diff --git a/bukkit/src/main/java/com/boydti/fawe/bukkit/v0/ChunkListener.java b/bukkit/src/main/java/com/boydti/fawe/bukkit/v0/ChunkListener.java index 0a664cb3..7d41037c 100644 --- a/bukkit/src/main/java/com/boydti/fawe/bukkit/v0/ChunkListener.java +++ b/bukkit/src/main/java/com/boydti/fawe/bukkit/v0/ChunkListener.java @@ -31,14 +31,6 @@ public class ChunkListener implements Listener { public ChunkListener() { if (Settings.IMP.TICK_LIMITER.ENABLED) { Bukkit.getPluginManager().registerEvents(ChunkListener.this, Fawe.imp().getPlugin()); - TaskManager.IMP.repeat(new Runnable() { - @Override - public void run() { - physSkip = 0; - physCancelPair = Long.MIN_VALUE; - physCancel = false; - } - }, 1); TaskManager.IMP.repeat(new Runnable() { @Override public void run() { @@ -46,6 +38,9 @@ public class ChunkListener implements Listener { physicsFreeze = false; itemFreeze = false; lastZ = Integer.MIN_VALUE; + physSkip = 0; + physCancelPair = Long.MIN_VALUE; + physCancel = false; counter.clear(); for (Long2ObjectMap.Entry entry : badChunks.long2ObjectEntrySet()) { @@ -211,21 +206,24 @@ public class ChunkListener implements Listener { for (int frame = start; frame < depth; frame++) { StackTraceElement elem = SharedSecrets.getJavaLangAccess().getStackTraceElement(e, frame); - String fileName = elem.getFileName(); - if (fileName.charAt(0) == 'E' && fileName.equals("EntityFireworks.java")) { - int chunkRange = 2; - for (int ocx = -chunkRange; ocx <= chunkRange; ocx++) { - for (int ocz = -chunkRange; ocz <= chunkRange; ocz++) { - int cx = chunk.getX() + ocx; - int cz = chunk.getZ() + ocz; - if (world.isChunkLoaded(cx, cz)) { - Chunk relativeChunk = world.getChunkAt(cx, cz); - Entity[] ents = relativeChunk.getEntities(); - for (Entity ent : ents) { - switch (ent.getType()) { - case FIREWORK: - Fawe.debug("[FAWE `tick-limiter`] Detected and cancelled rogue FireWork at " + ent.getLocation()); - ent.remove(); + String className = elem.getClassName(); + int len = className.length(); + if (className != null) { + if (className.charAt(len - 15) == 'E' && className.endsWith("EntityFireworks")) { + int chunkRange = 2; + for (int ocx = -chunkRange; ocx <= chunkRange; ocx++) { + for (int ocz = -chunkRange; ocz <= chunkRange; ocz++) { + int cx = chunk.getX() + ocx; + int cz = chunk.getZ() + ocz; + if (world.isChunkLoaded(cx, cz)) { + Chunk relativeChunk = world.getChunkAt(cx, cz); + Entity[] ents = relativeChunk.getEntities(); + for (Entity ent : ents) { + switch (ent.getType()) { + case FIREWORK: + Fawe.debug("[FAWE `tick-limiter`] Detected and cancelled rogue FireWork at " + ent.getLocation()); + ent.remove(); + } } } }