From 6188ea1fe10d05fd67558cb270221a06e981b1f2 Mon Sep 17 00:00:00 2001 From: Joseph Hirschfeld Date: Thu, 3 Mar 2016 02:39:54 -0600 Subject: [PATCH] Change implementation of (tile)entity removal list diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index d988fd007..26b2a1fd4 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -35,7 +35,10 @@ import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.generator.ChunkGenerator; // CraftBukkit end - +// Paper start +import java.util.Set; +import com.google.common.collect.Sets; +// Paper end public abstract class World implements GeneratorAccess, IIBlockAccess, AutoCloseable { protected static final Logger e = LogManager.getLogger(); @@ -67,11 +70,11 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose } }; // Spigot end - protected final List g = Lists.newArrayList(); + protected final Set g = Sets.newHashSet(); // Paper public final List tileEntityList = Lists.newArrayList(); public final List tileEntityListTick = Lists.newArrayList(); private final List c = Lists.newArrayList(); - private final List tileEntityListUnload = Lists.newArrayList(); + private final Set tileEntityListUnload = Sets.newHashSet(); // Paper public final List players = Lists.newArrayList(); public final List k = Lists.newArrayList(); protected final IntHashMap entitiesById = new IntHashMap(); @@ -1114,20 +1117,20 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose this.entityList.removeAll(this.g); int j; + // Paper start - Set based removal lists + for (Entity e : this.g) { + j = e.getChunkZ(); + int k = e.getChunkX(); - for (i = 0; i < this.g.size(); ++i) { - entity = (Entity) this.g.get(i); - int k = entity.ae; - - j = entity.ag; - if (entity.inChunk && this.isChunkLoaded(k, j, true)) { - this.getChunkAt(k, j).b(entity); + if (e.inChunk && this.isChunkLoaded(k, j, true)) { + this.getChunkAt(k, j).b(e); } } - for (i = 0; i < this.g.size(); ++i) { - this.c((Entity) this.g.get(i)); + for (Entity e : this.g) { + this.c(e); } + // Paper end this.g.clear(); this.p_(); -- 2.18.0