5b6dfb3463
This work is 100% unfinished. I am pushing it up so that we as a team can work on this update. Do not try to use this branch. You will fail.
69 lines
2.7 KiB
Diff
69 lines
2.7 KiB
Diff
From 6188ea1fe10d05fd67558cb270221a06e981b1f2 Mon Sep 17 00:00:00 2001
|
|
From: Joseph Hirschfeld <joe@ibj.io>
|
|
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<Entity> g = Lists.newArrayList();
|
|
+ protected final Set<Entity> g = Sets.newHashSet(); // Paper
|
|
public final List<TileEntity> tileEntityList = Lists.newArrayList();
|
|
public final List<TileEntity> tileEntityListTick = Lists.newArrayList();
|
|
private final List<TileEntity> c = Lists.newArrayList();
|
|
- private final List<TileEntity> tileEntityListUnload = Lists.newArrayList();
|
|
+ private final Set<TileEntity> tileEntityListUnload = Sets.newHashSet(); // Paper
|
|
public final List<EntityHuman> players = Lists.newArrayList();
|
|
public final List<Entity> k = Lists.newArrayList();
|
|
protected final IntHashMap<Entity> 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
|
|
|