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; } /**