Merge remote branch 'origin/master' into HEAD

This commit is contained in:
Mike Primm 2011-07-04 09:29:02 -05:00
commit 4086291ce2
8 changed files with 51 additions and 15 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.dynmap</groupId>
<artifactId>dynmap</artifactId>
<version>0.20</version>
<version>0.19.2</version>
<name>dynmap</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

View File

@ -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;

View File

@ -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<DynmapChunk> 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,13 +351,28 @@ 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((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
* moved, so it must be safe (also prevent chunk leak, which appears to happen
* because isChunkInUse defined "in use" as being within 256 blocks of a player,

View File

@ -1,6 +1,6 @@
name: dynmap
main: org.dynmap.DynmapPlugin
version: "0.20"
version: "0.19.2"
authors: [FrozenCow, mikeprimm, zeeZ]
softdepend: [Permissions]
commands: