Skip to content

Commit a470124

Browse files
authored
Merge pull request #650 from Multiverse/fix/gamerule
Update to support new gamerule naming in 1.21.11
2 parents 80678a2 + c460b86 commit a470124

File tree

1 file changed

+17
-6
lines changed
  • src/main/java/org/mvplugins/multiverse/inventories/share

1 file changed

+17
-6
lines changed

src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -753,10 +753,12 @@ public boolean updatePlayer(Player player, ProfileData profile) {
753753
int totalExperience = player.getTotalExperience();
754754
int level = player.getLevel();
755755
float exp = player.getExp();
756-
boolean announceAdvancements = Boolean.TRUE.equals(player.getWorld().getGameRuleValue(GameRule.ANNOUNCE_ADVANCEMENTS));
757-
if (announceAdvancements) {
758-
player.getWorld().setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, false);
759-
}
756+
757+
boolean announceAdvancements = announceAdvancementsRule
758+
.map(rule -> Boolean.TRUE.equals(player.getWorld().getGameRuleValue(rule)))
759+
.filter(Boolean::booleanValue)
760+
.map(ignore -> player.getWorld().setGameRule(announceAdvancementsRule.get(), false))
761+
.getOrElse(false);
760762

761763
Bukkit.advancementIterator().forEachRemaining(advancement -> {
762764
AdvancementProgress advancementProgress = player.getAdvancementProgress(advancement);
@@ -773,14 +775,16 @@ public boolean updatePlayer(Player player, ProfileData profile) {
773775
player.setLevel(level);
774776
player.setTotalExperience(totalExperience);
775777
sendAdvancementUpdateWithoutToast.accept(player);
776-
if (announceAdvancements) {
777-
player.getWorld().setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, true);
778+
if (announceAdvancements && announceAdvancementsRule.isDefined()) {
779+
announceAdvancementsRule
780+
.peek(rule -> player.getWorld().setGameRule(rule, true));
778781
}
779782

780783
return advancements != null;
781784
}
782785
}).defaultSerializer(new ProfileEntry(false, "advancements")).altName("achievements").optional().build();
783786

787+
private static final Option<GameRule<Boolean>> announceAdvancementsRule;
784788
private static final Consumer<Player> sendAdvancementUpdateWithoutToast;
785789

786790
static {
@@ -800,6 +804,13 @@ public boolean updatePlayer(Player player, ProfileData profile) {
800804
Try.of(() -> method.invoke(serverPlayer)).toOption())
801805
.flatMap(playerAdvancements -> flushDirtyMethod.flatMap(method ->
802806
Try.of(() -> method.invoke(playerAdvancements, serverPlayer, false)).toOption())));
807+
808+
//todo use 1.21.11+ Registry lookup for gamerule instead of getByName
809+
@SuppressWarnings("unchecked")
810+
Option<GameRule<Boolean>> rule = Try.of(() -> Option.of((GameRule<Boolean>) GameRule.getByName("announceAdvancements"))
811+
.getOrElse(() -> (GameRule<Boolean>) GameRule.getByName("minecraft:show_advancement_messages")))
812+
.toOption();
813+
announceAdvancementsRule = rule;
803814
}
804815

805816
/**

0 commit comments

Comments
 (0)