Remove getCubes patch as under some circumstances it can loop around itself forever. For anyone wishing to reimplement this patch, the rationale behind it is quite simple, get all cubes within each chunk at the same time.

By: md_5 <git@md-5.net>
This commit is contained in:
Spigot
2013-12-22 09:59:17 +11:00
parent 3d37af4544
commit 5261962003
74 changed files with 7044 additions and 68 deletions

View File

@@ -0,0 +1,72 @@
From e582842f0f1a49d697b1003021f56cd4b50ea5bf Mon Sep 17 00:00:00 2001
From: Ammar Askar <ammar@ammaraskar.com>
Date: Sat, 3 Aug 2013 21:42:00 +0500
Subject: [PATCH] Guard entity list
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 13ca7fa..5b0875d 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -30,7 +30,25 @@ import org.bukkit.event.weather.ThunderChangeEvent;
public abstract class World implements IBlockAccess {
public boolean d;
- public List entityList = new ArrayList();
+ public List entityList = new ArrayList() { // Spigot start - guard entity list from removals
+ @Override
+ public Object remove(int index) {
+ guard();
+ return super.remove(index);
+ }
+
+ @Override
+ public boolean remove(Object o) {
+ guard();
+ return super.remove(o);
+ }
+
+ private void guard() {
+ if (guardEntityList) {
+ throw new java.util.ConcurrentModificationException();
+ }
+ }
+ }; // Spigot end
protected List f = new ArrayList();
public Set tileEntityList = new HashSet(); // CraftBukkit - ArrayList -> HashSet
private List a = new ArrayList();
@@ -78,6 +96,7 @@ public abstract class World implements IBlockAccess {
int[] I;
// Spigot start
+ private boolean guardEntityList = false;
protected final gnu.trove.map.hash.TLongShortHashMap chunkTickList;
protected float growthOdds = 100;
protected float modifiedOdds = 100;
@@ -1243,6 +1262,7 @@ public abstract class World implements IBlockAccess {
org.spigotmc.ActivationRange.activateEntities(this); // Spigot
timings.entityTick.startTiming(); // Spigot
+ guardEntityList = true; // Spigot
for (i = 0; i < this.entityList.size(); ++i) {
entity = (Entity) this.entityList.get(i);
@@ -1290,12 +1310,15 @@ public abstract class World implements IBlockAccess {
this.getChunkAt(j, k).b(entity);
}
+ guardEntityList = false; // Spigot
this.entityList.remove(i--);
+ guardEntityList = true; // Spigot
this.b(entity);
}
this.methodProfiler.b();
}
+ guardEntityList = false; // Spigot
timings.entityTick.stopTiming(); // Spigot
this.methodProfiler.c("blockEntities");
--
1.8.3.2