mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-06 18:50:51 +01:00
f5e9df0862
Reduces json size by about 25% Not sure why advancements even had pretty printing enabled. My best guess was by accident on mojang's part, especially since stats json files don't have pretty printing.
69 lines
4.3 KiB
Diff
69 lines
4.3 KiB
Diff
--- a/net/minecraft/server/PlayerAdvancements.java
|
|
+++ b/net/minecraft/server/PlayerAdvancements.java
|
|
@@ -50,7 +50,7 @@
|
|
public class PlayerAdvancements {
|
|
|
|
private static final Logger LOGGER = LogUtils.getLogger();
|
|
- private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create();
|
|
+ private static final Gson GSON = (new GsonBuilder()).create(); // Paper - Remove pretty printing from advancements
|
|
private final PlayerList playerList;
|
|
private final Path playerSavePath;
|
|
private AdvancementTree tree;
|
|
@@ -63,6 +63,7 @@
|
|
private AdvancementHolder lastSelectedTab;
|
|
private boolean isFirstPacket = true;
|
|
private final Codec<PlayerAdvancements.Data> codec;
|
|
+ public final Map<net.minecraft.advancements.critereon.SimpleCriterionTrigger<?>, Set<CriterionTrigger.Listener<?>>> criterionData = new java.util.IdentityHashMap<>(); // Paper - fix advancement data player leakage
|
|
|
|
public PlayerAdvancements(DataFixer dataFixer, PlayerList playerManager, ServerAdvancementManager advancementLoader, Path filePath, ServerPlayer owner) {
|
|
this.playerList = playerManager;
|
|
@@ -162,6 +163,7 @@
|
|
}
|
|
|
|
public void save() {
|
|
+ if (org.spigotmc.SpigotConfig.disableAdvancementSaving) return; // Spigot
|
|
JsonElement jsonelement = (JsonElement) this.codec.encodeStart(JsonOps.INSTANCE, this.asData()).getOrThrow();
|
|
|
|
try {
|
|
@@ -196,6 +198,7 @@
|
|
AdvancementHolder advancementholder = loader.get(minecraftkey);
|
|
|
|
if (advancementholder == null) {
|
|
+ if (!minecraftkey.getNamespace().equals("minecraft")) return; // CraftBukkit
|
|
PlayerAdvancements.LOGGER.warn("Ignored advancement '{}' in progress file {} - it doesn't exist anymore?", minecraftkey, this.playerSavePath);
|
|
} else {
|
|
this.startProgress(advancementholder, advancementprogress);
|
|
@@ -223,14 +226,31 @@
|
|
boolean flag1 = advancementprogress.isDone();
|
|
|
|
if (advancementprogress.grantProgress(criterionName)) {
|
|
+ // Paper start - Add PlayerAdvancementCriterionGrantEvent
|
|
+ if (!new com.destroystokyo.paper.event.player.PlayerAdvancementCriterionGrantEvent(this.player.getBukkitEntity(), advancement.toBukkit(), criterionName).callEvent()) {
|
|
+ advancementprogress.revokeProgress(criterionName);
|
|
+ return false;
|
|
+ }
|
|
+ // Paper end - Add PlayerAdvancementCriterionGrantEvent
|
|
this.unregisterListeners(advancement);
|
|
this.progressChanged.add(advancement);
|
|
flag = true;
|
|
if (!flag1 && advancementprogress.isDone()) {
|
|
+ // Paper start - Add Adventure message to PlayerAdvancementDoneEvent
|
|
+ final net.kyori.adventure.text.Component message = advancement.value().display().flatMap(info -> {
|
|
+ return java.util.Optional.ofNullable(
|
|
+ info.shouldAnnounceChat() ? io.papermc.paper.adventure.PaperAdventure.asAdventure(info.getType().createAnnouncement(advancement, this.player)) : null
|
|
+ );
|
|
+ }).orElse(null);
|
|
+ final org.bukkit.event.player.PlayerAdvancementDoneEvent event = new org.bukkit.event.player.PlayerAdvancementDoneEvent(this.player.getBukkitEntity(), advancement.toBukkit(), message);
|
|
+ this.player.level().getCraftServer().getPluginManager().callEvent(event); // CraftBukkit
|
|
+ // Paper end
|
|
advancement.value().rewards().grant(this.player);
|
|
advancement.value().display().ifPresent((advancementdisplay) -> {
|
|
- if (advancementdisplay.shouldAnnounceChat() && this.player.serverLevel().getGameRules().getBoolean(GameRules.RULE_ANNOUNCE_ADVANCEMENTS)) {
|
|
- this.playerList.broadcastSystemMessage(advancementdisplay.getType().createAnnouncement(advancement, this.player), false);
|
|
+ // Paper start - Add Adventure message to PlayerAdvancementDoneEvent
|
|
+ if (event.message() != null && this.player.serverLevel().getGameRules().getBoolean(GameRules.RULE_ANNOUNCE_ADVANCEMENTS)) {
|
|
+ this.playerList.broadcastSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.message()), false);
|
|
+ // Paper end
|
|
}
|
|
|
|
});
|