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:
66
CraftBukkit-Patches/0046-Entity-ticking-chunk-caching.patch
Normal file
66
CraftBukkit-Patches/0046-Entity-ticking-chunk-caching.patch
Normal file
@@ -0,0 +1,66 @@
|
||||
From 9c4b4c0ba7d0fd8a5a336458aff31231fed72a07 Mon Sep 17 00:00:00 2001
|
||||
From: Ammar Askar <ammar@ammaraskar.com>
|
||||
Date: Tue, 16 Jul 2013 03:32:32 +0500
|
||||
Subject: [PATCH] Entity ticking chunk caching
|
||||
|
||||
Cache known loaded chunks so we avoid making a potentially expensive contains call for every single entity in exchange for some simple arithmetic. Best case scenario, this cuts down contains call to once per chunk, worst case it adds on some simple arithmetic operations
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0b6b681..13ca7fa 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1179,6 +1179,7 @@ public abstract class World implements IBlockAccess {
|
||||
CrashReport crashreport;
|
||||
CrashReportSystemDetails crashreportsystemdetails;
|
||||
|
||||
+ long lastChunk = Long.MIN_VALUE; // Spigot - cache chunk x, z cords for unload queue
|
||||
for (i = 0; i < this.i.size(); ++i) {
|
||||
entity = (Entity) this.i.get(i);
|
||||
// CraftBukkit start - Fixed an NPE, don't process entities in chunks queued for unload
|
||||
@@ -1187,10 +1188,15 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
|
||||
ChunkProviderServer chunkProviderServer = ((WorldServer) this).chunkProviderServer;
|
||||
- if (chunkProviderServer.unloadQueue.contains(MathHelper.floor(entity.locX) >> 4, MathHelper.floor(entity.locZ) >> 4)) {
|
||||
- continue;
|
||||
+ // Spigot start - check last chunk to see if this loaded (fast cache)
|
||||
+ long chunk = org.bukkit.craftbukkit.util.LongHash.toLong(MathHelper.floor(entity.locX) >> 4, MathHelper.floor(entity.locZ) >> 4);
|
||||
+ if (lastChunk != chunk) {
|
||||
+ if (chunkProviderServer.unloadQueue.contains(chunk)) { // Spigot end
|
||||
+ continue;
|
||||
+ }
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ lastChunk = chunk; // Spigot
|
||||
|
||||
try {
|
||||
++entity.ticksLived;
|
||||
@@ -1211,6 +1217,7 @@ public abstract class World implements IBlockAccess {
|
||||
this.i.remove(i--);
|
||||
}
|
||||
}
|
||||
+ lastChunk = Long.MIN_VALUE; // Spigot
|
||||
|
||||
this.methodProfiler.c("remove");
|
||||
this.entityList.removeAll(this.f);
|
||||
@@ -1241,10 +1248,15 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
// CraftBukkit start - Don't tick entities in chunks queued for unload
|
||||
ChunkProviderServer chunkProviderServer = ((WorldServer) this).chunkProviderServer;
|
||||
- if (chunkProviderServer.unloadQueue.contains(MathHelper.floor(entity.locX) >> 4, MathHelper.floor(entity.locZ) >> 4)) {
|
||||
- continue;
|
||||
+ // Spigot start - check last chunk to see if this loaded (fast cache)
|
||||
+ long chunk = org.bukkit.craftbukkit.util.LongHash.toLong(MathHelper.floor(entity.locX) >> 4, MathHelper.floor(entity.locZ) >> 4);
|
||||
+ if (lastChunk != chunk) {
|
||||
+ if (chunkProviderServer.unloadQueue.contains(chunk)) { // Spigot end
|
||||
+ continue;
|
||||
+ }
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ lastChunk = Long.MIN_VALUE; // Spigot
|
||||
|
||||
if (entity.vehicle != null) {
|
||||
if (!entity.vehicle.dead && entity.vehicle.passenger == entity) {
|
||||
--
|
||||
1.8.3.2
|
||||
|
||||
Reference in New Issue
Block a user