From c460b862d101ebc3062771ac96a5f6da1aff7260 Mon Sep 17 00:00:00 2001 From: Ben Woo <30431861+benwoo1110@users.noreply.github.com> Date: Tue, 16 Dec 2025 12:29:01 +0800 Subject: [PATCH] Update to support new gamerule naming in 1.21.11 --- .../inventories/share/Sharables.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java b/src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java index fd017338..6978b205 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java @@ -753,10 +753,12 @@ public boolean updatePlayer(Player player, ProfileData profile) { int totalExperience = player.getTotalExperience(); int level = player.getLevel(); float exp = player.getExp(); - boolean announceAdvancements = Boolean.TRUE.equals(player.getWorld().getGameRuleValue(GameRule.ANNOUNCE_ADVANCEMENTS)); - if (announceAdvancements) { - player.getWorld().setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, false); - } + + boolean announceAdvancements = announceAdvancementsRule + .map(rule -> Boolean.TRUE.equals(player.getWorld().getGameRuleValue(rule))) + .filter(Boolean::booleanValue) + .map(ignore -> player.getWorld().setGameRule(announceAdvancementsRule.get(), false)) + .getOrElse(false); Bukkit.advancementIterator().forEachRemaining(advancement -> { AdvancementProgress advancementProgress = player.getAdvancementProgress(advancement); @@ -777,14 +779,16 @@ public boolean updatePlayer(Player player, ProfileData profile) { player.setLevel(level); player.setTotalExperience(totalExperience); sendAdvancementUpdateWithoutToast.accept(player); - if (announceAdvancements) { - player.getWorld().setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, true); + if (announceAdvancements && announceAdvancementsRule.isDefined()) { + announceAdvancementsRule + .peek(rule -> player.getWorld().setGameRule(rule, true)); } return advancements != null; } }).defaultSerializer(new ProfileEntry(false, "advancements")).altName("achievements").optional().build(); + private static final Option> announceAdvancementsRule; private static final Consumer sendAdvancementUpdateWithoutToast; static { @@ -804,6 +808,13 @@ public boolean updatePlayer(Player player, ProfileData profile) { Try.of(() -> method.invoke(serverPlayer)).toOption()) .flatMap(playerAdvancements -> flushDirtyMethod.flatMap(method -> Try.of(() -> method.invoke(playerAdvancements, serverPlayer, false)).toOption()))); + + //todo use 1.21.11+ Registry lookup for gamerule instead of getByName + @SuppressWarnings("unchecked") + Option> rule = Try.of(() -> Option.of((GameRule) GameRule.getByName("announceAdvancements")) + .getOrElse(() -> (GameRule) GameRule.getByName("minecraft:show_advancement_messages"))) + .toOption(); + announceAdvancementsRule = rule; } /**