@@ -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 );
@@ -777,14 +779,16 @@ public boolean updatePlayer(Player player, ProfileData profile) {
777779 player .setLevel (level );
778780 player .setTotalExperience (totalExperience );
779781 sendAdvancementUpdateWithoutToast .accept (player );
780- if (announceAdvancements ) {
781- player .getWorld ().setGameRule (GameRule .ANNOUNCE_ADVANCEMENTS , true );
782+ if (announceAdvancements && announceAdvancementsRule .isDefined ()) {
783+ announceAdvancementsRule
784+ .peek (rule -> player .getWorld ().setGameRule (rule , true ));
782785 }
783786
784787 return advancements != null ;
785788 }
786789 }).defaultSerializer (new ProfileEntry (false , "advancements" )).altName ("achievements" ).optional ().build ();
787790
791+ private static final Option <GameRule <Boolean >> announceAdvancementsRule ;
788792 private static final Consumer <Player > sendAdvancementUpdateWithoutToast ;
789793
790794 static {
@@ -804,6 +808,13 @@ public boolean updatePlayer(Player player, ProfileData profile) {
804808 Try .of (() -> method .invoke (serverPlayer )).toOption ())
805809 .flatMap (playerAdvancements -> flushDirtyMethod .flatMap (method ->
806810 Try .of (() -> method .invoke (playerAdvancements , serverPlayer , false )).toOption ())));
811+
812+ //todo use 1.21.11+ Registry lookup for gamerule instead of getByName
813+ @ SuppressWarnings ("unchecked" )
814+ Option <GameRule <Boolean >> rule = Try .of (() -> Option .of ((GameRule <Boolean >) GameRule .getByName ("announceAdvancements" ))
815+ .getOrElse (() -> (GameRule <Boolean >) GameRule .getByName ("minecraft:show_advancement_messages" )))
816+ .toOption ();
817+ announceAdvancementsRule = rule ;
807818 }
808819
809820 /**
0 commit comments