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:
72
CraftBukkit-Patches/0051-Guard-entity-list.patch
Normal file
72
CraftBukkit-Patches/0051-Guard-entity-list.patch
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user