From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Sat, 31 Oct 2020 11:49:01 -0700 Subject: [PATCH] Fix client lag on advancement loading When new advancements are added via the UnsafeValues#loadAdvancement API, it triggers a full datapack reload when this is not necessary. The advancement is already loaded directly into the advancement registry, and the point of saving the advancement to the Bukkit datapack seems to be for persistence. By removing the call to reload datapacks when an advancement is loaded, the client no longer completely freezes up when adding a new advancement. To ensure the client still receives the updated advancement data, we manually reload the advancement data for all players, which normally takes place as a part of the datapack reloading. diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index a557b40e1807933cf510ea489ebcab4a19c066c1..481aeb922952578ea68ce2425c84e1a93eff0cf9 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -317,7 +317,13 @@ public final class CraftMagicNumbers implements UnsafeValues { Bukkit.getLogger().log(Level.SEVERE, "Error saving advancement " + key, ex); } - MinecraftServer.getServer().getPlayerList().reloadResources(); + // Paper start - Fix client lag on advancement loading + //MinecraftServer.getServer().getPlayerList().reload(); + MinecraftServer.getServer().getPlayerList().getPlayers().forEach(player -> { + player.getAdvancements().reload(MinecraftServer.getServer().getAdvancements()); + player.getAdvancements().flushDirty(player); + }); + // Paper end - Fix client lag on advancement loading return bukkit; }