diff options
Diffstat (limited to 'paper-server/patches/unapplied/net/minecraft/server/PlayerAdvancements.java.patch')
-rw-r--r-- | paper-server/patches/unapplied/net/minecraft/server/PlayerAdvancements.java.patch | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/paper-server/patches/unapplied/net/minecraft/server/PlayerAdvancements.java.patch b/paper-server/patches/unapplied/net/minecraft/server/PlayerAdvancements.java.patch new file mode 100644 index 0000000000..93d25149bd --- /dev/null +++ b/paper-server/patches/unapplied/net/minecraft/server/PlayerAdvancements.java.patch @@ -0,0 +1,69 @@ +--- 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 + } + + }); |