From 69ff788454fe936a8a6b851c88a7e316eae1bb69 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Sat, 30 May 2015 01:21:00 -0500 Subject: [PATCH] Remove Spigot TileEntity/Enity Tick Time Capping Appears to cause visual glitches with TNT Entities and certain types of cannons TileEntity cap removed as we implement our own solution in a later (next) patch. diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index d30b406..bdf4896 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -125,8 +125,6 @@ public abstract class World implements IBlockAccess { private final byte chunkTickRadius; public static boolean haveWeSilencedAPhysicsCrash; public static String blockLocation; - private org.spigotmc.TickLimiter entityLimiter; - private org.spigotmc.TickLimiter tileLimiter; private int tileTickPosition; public static long chunkToKey(int x, int z) @@ -219,9 +217,7 @@ public abstract class World implements IBlockAccess { this.getServer().addWorld(this.world); // CraftBukkit end this.keepSpawnInMemory = this.paperSpigotConfig.keepSpawnInMemory; // PaperSpigot - timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings - this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime); - this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime); + timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings } public World b() { @@ -1393,12 +1389,7 @@ public abstract class World implements IBlockAccess { timings.entityTick.startTiming(); // Spigot guardEntityList = true; // Spigot // CraftBukkit start - Use field for loop variable - int entitiesThisCycle = 0; - if (tickPosition < 0) tickPosition = 0; - for (entityLimiter.initTick(); - entitiesThisCycle < entityList.size() && (entitiesThisCycle % 10 == 0 || entityLimiter.shouldContinue()); - tickPosition++, entitiesThisCycle++) { - tickPosition = (tickPosition < entityList.size()) ? tickPosition : 0; + for (this.tickPosition = 0; this.tickPosition < this.entityList.size(); ++this.tickPosition) { entity = (Entity) this.entityList.get(this.tickPosition); // CraftBukkit end if (entity.vehicle != null) { @@ -1454,19 +1445,13 @@ public abstract class World implements IBlockAccess { this.c.clear(); } // CraftBukkit end + Iterator iterator = this.tileEntityList.iterator(); - // Spigot start - int tilesThisCycle = 0; - for (tileLimiter.initTick(); - tilesThisCycle < tileEntityList.size() && (tilesThisCycle % 10 == 0 || tileLimiter.shouldContinue()); - tileTickPosition++, tilesThisCycle++) { - tileTickPosition = (tileTickPosition < tileEntityList.size()) ? tileTickPosition : 0; - TileEntity tileentity = (TileEntity) this.tileEntityList.get(tileTickPosition); - // Spigot start + while (iterator.hasNext()) { + TileEntity tileentity = (TileEntity) iterator.next(); if (tileentity == null) { getServer().getLogger().severe("Spigot has detected a null entity and has removed it, preventing a crash"); - tilesThisCycle--; - this.tileEntityList.remove(tileTickPosition--); + iterator.remove(); continue; } // Spigot end @@ -1494,8 +1479,7 @@ public abstract class World implements IBlockAccess { } if (tileentity.x()) { - tilesThisCycle--; - this.tileEntityList.remove(tileTickPosition--); + iterator.remove(); this.h.remove(tileentity); if (this.isLoaded(tileentity.getPosition())) { this.getChunkAtWorldCoords(tileentity.getPosition()).e(tileentity.getPosition()); diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java index 8e86212..ab2f8bf 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -332,13 +332,4 @@ public class SpigotWorldConfig { hangingTickFrequency = getInt( "hanging-tick-frequency", 100 ); } - - public int tileMaxTickTime; - public int entityMaxTickTime; - private void maxTickTimes() - { - tileMaxTickTime = getInt("max-tick-time.tile", 50); - entityMaxTickTime = getInt("max-tick-time.entity", 50); - log("Tile Max Tick Time: " + tileMaxTickTime + "ms Entity max Tick Time: " + entityMaxTickTime + "ms"); - } } diff --git a/src/main/java/org/spigotmc/TickLimiter.java b/src/main/java/org/spigotmc/TickLimiter.java deleted file mode 100644 index 23a3938..0000000 --- a/src/main/java/org/spigotmc/TickLimiter.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.spigotmc; - -public class TickLimiter { - - private final int maxTime; - private long startTime; - - public TickLimiter(int maxtime) { - this.maxTime = maxtime; - } - - public void initTick() { - startTime = System.currentTimeMillis(); - } - - public boolean shouldContinue() { - long remaining = System.currentTimeMillis() - startTime; - return remaining < maxTime; - } -} -- 2.4.1.windows.1