diff --git a/colorschemes/default.txt b/colorschemes/default.txt index 0d8cc741..919f7a66 100644 --- a/colorschemes/default.txt +++ b/colorschemes/default.txt @@ -54,6 +54,8 @@ Powered Rail 27 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180 Detector Rail 28 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180 +Sticky Piston +29 157 128 79 255 96 96 96 255 78 64 39 255 48 48 48 255 Cobweb 30 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255 Tall Grass diff --git a/colorschemes/flames.txt b/colorschemes/flames.txt index 13c3a049..e2af1042 100644 --- a/colorschemes/flames.txt +++ b/colorschemes/flames.txt @@ -54,6 +54,8 @@ Powered Rail 27 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180 Detector Rail 28 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180 +Sticky Piston +29 157 128 79 255 96 96 96 255 78 64 39 255 48 48 48 255 Cobweb 30 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255 Tall Grass diff --git a/colorschemes/ovocean.txt b/colorschemes/ovocean.txt index c5bb3adc..5612a5f0 100644 --- a/colorschemes/ovocean.txt +++ b/colorschemes/ovocean.txt @@ -54,6 +54,8 @@ Powered Rail 27 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180 Detector Rail 28 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180 +Sticky Piston +29 157 128 79 255 125 122 116 255 78 64 39 255 88 85 81 255 Cobweb 30 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255 Tall Grass diff --git a/colorschemes/sk89q.txt b/colorschemes/sk89q.txt index 6b30df05..0e66def4 100644 --- a/colorschemes/sk89q.txt +++ b/colorschemes/sk89q.txt @@ -25,6 +25,7 @@ 26 200 20 20 255 160 16 16 255 100 10 10 255 80 8 8 255 27 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180 28 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180 +29 109 80 60 255 111 108 98 255 76 56 41 255 111 108 98 255 30 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255 31 97 156 53 255 73 120 38 255 38 68 16 255 26 50 9 255 32 75 44 24 255 60 35 19 255 37 22 12 255 30 18 10 255 diff --git a/pom.xml b/pom.xml index 62ac6cc7..f8e3ad03 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 org.dynmap dynmap - 0.20 + 0.19.2 dynmap UTF-8 diff --git a/src/main/java/org/dynmap/utils/FileLockManager.java b/src/main/java/org/dynmap/utils/FileLockManager.java index 71048616..b7c3c600 100644 --- a/src/main/java/org/dynmap/utils/FileLockManager.java +++ b/src/main/java/org/dynmap/utils/FileLockManager.java @@ -72,7 +72,9 @@ public class FileLockManager { String fn = f.getPath(); synchronized(lock) { boolean got_lock = false; - boolean first_wait = true; + long starttime = 0; + if(timeout > 0) + starttime = System.currentTimeMillis(); while(!got_lock) { Integer lockcnt = filelocks.get(fn); /* Get lock count */ if(lockcnt == null) { @@ -85,14 +87,16 @@ public class FileLockManager { } else { /* Write lock in place */ try { - if((timeout > 0) && (!first_wait)) { /* We already waited */ - return false; - } - if(timeout < 0) + if(timeout < 0) { lock.wait(); - else - lock.wait(timeout); - first_wait = false; + } + else { + long now = System.currentTimeMillis(); + long elapsed = now-starttime; + if(elapsed > timeout) /* Give up on timeout */ + return false; + lock.wait(timeout-elapsed); + } } catch (InterruptedException ix) { Log.severe("getReadLock(" + fn + ") interrupted"); return false; diff --git a/src/main/java/org/dynmap/utils/NewMapChunkCache.java b/src/main/java/org/dynmap/utils/NewMapChunkCache.java index e2b9fb92..ca76b764 100644 --- a/src/main/java/org/dynmap/utils/NewMapChunkCache.java +++ b/src/main/java/org/dynmap/utils/NewMapChunkCache.java @@ -25,6 +25,8 @@ public class NewMapChunkCache implements MapChunkCache { private static Method poppreservedchunk = null; private static Method getsnapshot2 = null; private static Method getemptysnapshot = null; + private static Method gethandle = null; + private static Method removeentities = null; private World w; private List chunks; @@ -230,10 +232,18 @@ public class NewMapChunkCache implements MapChunkCache { } catch (ClassNotFoundException cnfx) { } catch (NoSuchMethodException nsmx) { } - /* Get CraftChunk.getChunkSnapshot(boolean,boolean,boolean) */ + /* Get CraftChunk.getChunkSnapshot(boolean,boolean,boolean) and CraftChunk.getHandle() */ try { Class c = Class.forName("org.bukkit.craftbukkit.CraftChunk"); getsnapshot2 = c.getDeclaredMethod("getChunkSnapshot", new Class[] { boolean.class, boolean.class, boolean.class }); + gethandle = c.getDeclaredMethod("getHandle", new Class[0]); + } catch (ClassNotFoundException cnfx) { + } catch (NoSuchMethodException nsmx) { + } + /* Get Chunk.removeEntities() */ + try { + Class c = Class.forName("net.minecraft.server.Chunk"); + removeentities = c.getDeclaredMethod("removeEntities", new Class[0]); } catch (ClassNotFoundException cnfx) { } catch (NoSuchMethodException nsmx) { } @@ -341,11 +351,26 @@ public class NewMapChunkCache implements MapChunkCache { if ((!wasLoaded) && didload) { /* It looks like bukkit "leaks" entities - they don't get removed from the world-level table * when chunks are unloaded but not saved - removing them seems to do the trick */ - if(!didgenerate) { + if(!(didgenerate && do_save)) { + boolean did_remove = false; Chunk cc = w.getChunkAt(chunk.x, chunk.z); - if(cc != null) { - for(Entity e: cc.getEntities()) - e.remove(); + if((gethandle != null) && (removeentities != null)) { + try { + Object chk = gethandle.invoke(cc); + if(chk != null) { + removeentities.invoke(chk); + did_remove = true; + } + } catch (InvocationTargetException itx) { + } catch (IllegalArgumentException e) { + } catch (IllegalAccessException e) { + } + } + if(!did_remove) { + if(cc != null) { + for(Entity e: cc.getEntities()) + e.remove(); + } } } /* Since we only remember ones we loaded, and we're synchronous, no player has diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b63efc54..eb5554f8 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: dynmap main: org.dynmap.DynmapPlugin -version: "0.20" +version: "0.19.2" authors: [FrozenCow, mikeprimm, zeeZ] softdepend: [Permissions] commands: