@@ -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