--- a/net/minecraft/server/PlayerAdvancements.java +++ b/net/minecraft/server/PlayerAdvancements.java @@ -51,16 +_,18 @@ private final PlayerList playerList; private final Path playerSavePath; private AdvancementTree tree; - private final Map progress = new LinkedHashMap<>(); - private final Set visible = new HashSet<>(); - private final Set progressChanged = new HashSet<>(); - private final Set rootsToUpdate = new HashSet<>(); + // DivineMC start - Use synchronized map + private final Map progress = java.util.Collections.synchronizedMap(new LinkedHashMap<>()); + private final Set visible = com.google.common.collect.Sets.newConcurrentHashSet(); + private final Set progressChanged = com.google.common.collect.Sets.newConcurrentHashSet(); + private final Set rootsToUpdate = com.google.common.collect.Sets.newConcurrentHashSet(); + // DivineMC end - Use synchronized map private ServerPlayer player; @Nullable private AdvancementHolder lastSelectedTab; private boolean isFirstPacket = true; private final Codec codec; - public final Map, Set>> criterionData = new java.util.IdentityHashMap<>(); // Paper - fix advancement data player leakage + public final Map, Set>> criterionData = java.util.Collections.synchronizedMap(new java.util.IdentityHashMap<>()); // Paper - fix advancement data player leakage // DivineMC - Use synchronized map public PlayerAdvancements(DataFixer dataFixer, PlayerList playerList, ServerAdvancementManager manager, Path playerSavePath, ServerPlayer player) { this.playerList = playerList;