papermc/Spigot-Server-Patches/0071-Change-implementation-of-tile-entity-removal-list.patch
Byteflux 3fd3544a36 Add Lighting Queue
The lighting queue spreads out the processing of light updates across
multiple ticks based on how much free time the server has left at the end
of the tick.
2016-03-24 23:38:38 -07:00

68 lines
2.5 KiB
Diff

From 5d2b01e642cb5ef8b70cdf786376be1610e2e2a2 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 c93af22..6cfd38c 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -30,6 +30,11 @@ 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 IBlockAccess {
private int a = 63;
@@ -60,11 +65,11 @@ public abstract class World implements IBlockAccess {
}
};
// Spigot end
- protected final List<Entity> f = Lists.newArrayList();
+ protected final Set<Entity> f = Sets.newHashSet(); // Paper
//public final List<TileEntity> tileEntityList = Lists.newArrayList(); // Paper - Remove unused list
public final List<TileEntity> tileEntityListTick = Lists.newArrayList();
private final List<TileEntity> b = 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> j = Lists.newArrayList();
protected final IntHashMap<Entity> entitiesById = new IntHashMap();
@@ -1387,19 +1392,20 @@ public abstract class World implements IBlockAccess {
int j;
- for (i = 0; i < this.f.size(); ++i) {
- entity = (Entity) this.f.get(i);
- int k = entity.ab;
+ // Paper start - Set based removal lists
+ for (Entity e : this.f) {
+ j = e.getChunkX();
+ int k = e.getChunkZ();
- j = entity.ad;
- if (entity.aa && this.isChunkLoaded(k, j, true)) {
- this.getChunkAt(k, j).b(entity);
+ if (e.aa && this.isChunkLoaded(k, j, true)) {
+ this.getChunkAt(k, j).b(e);
}
}
- for (i = 0; i < this.f.size(); ++i) {
- this.c((Entity) this.f.get(i));
+ for (Entity e : this.f) {
+ this.c(e);
}
+ // Paper end
this.f.clear();
this.l();
--
2.7.1.windows.2