diff --git a/src/main/java/org/dynmap/bukkit/BukkitVersionHelper.java b/src/main/java/org/dynmap/bukkit/BukkitVersionHelper.java index 35ab52ca..21c57b1d 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitVersionHelper.java +++ b/src/main/java/org/dynmap/bukkit/BukkitVersionHelper.java @@ -88,6 +88,10 @@ public abstract class BukkitVersionHelper { * Test if normal chunk snapshot */ // public abstract boolean isCraftChunkSnapshot(ChunkSnapshot css); + /** + * Remove entities from given chunk + */ + public abstract void removeEntitiesFromChunk(Chunk c); /** * Get inhabited ticks count from chunk */ diff --git a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperCB.java b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperCB.java index 10f74112..8c07d8ba 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperCB.java +++ b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperCB.java @@ -102,6 +102,7 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric { } /** n.m.s.Chunk */ nmschunk = getNMSClass("net.minecraft.server.Chunk"); + nmsc_removeentities = getMethod(nmschunk, new String[] { "removeEntities" }, nulltypes); nmsc_tileentities = getField(nmschunk, new String[] { "tileEntities" }, Map.class); nmsc_inhabitedticks = getFieldNoFail(nmschunk, new String[] { "s", "q", "u", "v" }, long.class); if (nmsc_inhabitedticks == null) { @@ -156,6 +157,7 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric { } @Override public void unloadChunkNoSave(World w, Chunk c, int cx, int cz) { + this.removeEntitiesFromChunk(c); w.unloadChunk(cx, cz, false, false); } /** diff --git a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGeneric.java b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGeneric.java index 0c4ca78d..e83121ef 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGeneric.java +++ b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGeneric.java @@ -54,6 +54,7 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { protected Method lhs_containskey; /** n.m.s.Chunk */ protected Class nmschunk; + protected Method nmsc_removeentities; protected Field nmsc_tileentities; protected Field nmsc_inhabitedticks; /** nbt classes */ @@ -335,7 +336,13 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { // } // return false; // } - + /** Remove entities from given chunk */ + public void removeEntitiesFromChunk(Chunk c) { + Object omsc = callMethod(c, cc_gethandle, nullargs, null); + if(omsc != null) { + callMethod(omsc, nmsc_removeentities, nullargs, null); + } + } /** * Get inhabited ticks count from chunk */ diff --git a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGlowstone.java b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGlowstone.java index d15574a7..6c117116 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGlowstone.java +++ b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGlowstone.java @@ -91,6 +91,12 @@ public class BukkitVersionHelperGlowstone extends BukkitVersionHelper { return b; } + @Override + public void removeEntitiesFromChunk(Chunk c) { + // TODO Auto-generated method stub + + } + @Override public long getInhabitedTicks(Chunk c) { // TODO Auto-generated method stub