From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Wed, 2 Aug 2023 16:14:12 +0800 Subject: [PATCH] Fix tracker NPE diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java index 6fc90433a87ff682e76fe37618dd9460518a8387..755950c3797ccb3670f7cd12c941c226082ad010 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -115,8 +115,6 @@ import org.bukkit.craftbukkit.generator.CustomChunkGenerator; import org.bukkit.entity.Player; // CraftBukkit end -import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; // Paper - public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider { private static final byte CHUNK_TYPE_REPLACEABLE = -1; @@ -154,7 +152,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider private final Queue unloadQueue; int viewDistance; public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobDistanceMap; // Paper - public final ReferenceOpenHashSet needsChangeBroadcasting = new ReferenceOpenHashSet<>(); + public final Set needsChangeBroadcasting = Sets.newConcurrentHashSet(); // Leaf // Paper - rewrite chunk system // Paper start - optimise checkDespawn @@ -1452,7 +1450,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public final Entity entity; // Mirai -> public private final int range; SectionPos lastSectionPos; - public final Set seenBy = it.unimi.dsi.fastutil.objects.ReferenceSets.synchronize(new ReferenceOpenHashSet<>()); // Paper - optimise map impl // Mirai - sync + public final Set seenBy = Sets.newConcurrentHashSet(); // Paper - optimise map impl // Mirai - sync // Leaf public TrackedEntity(Entity entity, int i, int j, boolean flag) { this.serverEntity = new ServerEntity(ChunkMap.this.level, entity, j, flag, this::broadcast, this.seenBy); // CraftBukkit diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java index 259727ca7956416afa0f425fc203103654673cef..6a5009b1935b11e4dd5a3dfb083df159d47da450 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -10,6 +10,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.ArrayList; // Leaf import java.util.Objects; import java.util.Optional; import java.util.concurrent.CompletableFuture; @@ -47,7 +48,6 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp import net.minecraft.world.level.storage.DimensionDataStorage; import net.minecraft.world.level.storage.LevelData; import net.minecraft.world.level.storage.LevelStorageSource; -import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; // Paper public class ServerChunkCache extends ChunkSource { @@ -642,7 +642,7 @@ public class ServerChunkCache extends ChunkSource { // Paper start - use set of chunks requiring updates, rather than iterating every single one loaded this.level.timings.broadcastChunkUpdates.startTiming(); // Paper - timing if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { - ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); + List copy = new ArrayList<>(this.chunkMap.needsChangeBroadcasting); // Leaf this.chunkMap.needsChangeBroadcasting.clear(); for (ChunkHolder holder : copy) { holder.broadcastChanges(holder.getFullChunkNowUnchecked()); // LevelChunks are NEVER unloaded diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java index 00790f8c0c7ba5132b51cdaa58e4d3419aac23ab..edd8581e282836fa3331db957489059917ed6c48 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java @@ -1,6 +1,7 @@ package net.minecraft.world.entity.ai.attributes; import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; // Leaf import com.mojang.logging.LogUtils; import java.util.Collection; import java.util.Map; @@ -10,7 +11,6 @@ import java.util.stream.Collectors; import javax.annotation.Nullable; import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; -import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import net.minecraft.Util; import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; @@ -23,7 +23,7 @@ public class AttributeMap { private static final Logger LOGGER = LogUtils.getLogger(); // Gale start - Lithium - replace AI attributes with optimized collections private final Map attributes = new Reference2ReferenceOpenHashMap<>(0); - private final Set dirtyAttributes = new ReferenceOpenHashSet<>(0); + private final Set dirtyAttributes = Sets.newConcurrentHashSet(); // Leaf // Gale end - Lithium - replace AI attributes with optimized collections private final AttributeSupplier supplier; private final java.util.function.Function createInstance; // Gale - Airplane - reduce entity allocations