diff --git a/pom.xml b/pom.xml index be0c3e3a..006822fe 100644 --- a/pom.xml +++ b/pom.xml @@ -40,8 +40,8 @@ maven-compiler-plugin 2.0.2 - 1.6 - 1.6 + 1.7 + 1.7 @@ -114,12 +114,6 @@ DynmapCore ${project.version} - - org.getspout - spoutpluginapi - dev-SNAPSHOT - compile - ru.tehkode PermissionsEx @@ -141,5 +135,5 @@ 2.10.1 - 2.3-SNAPSHOT + 2.5-SNAPSHOT diff --git a/src/main/java/org/dynmap/bukkit/BukkitVersionHelper.java b/src/main/java/org/dynmap/bukkit/BukkitVersionHelper.java index 90b1faa8..3c65ffc9 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitVersionHelper.java +++ b/src/main/java/org/dynmap/bukkit/BukkitVersionHelper.java @@ -1,15 +1,10 @@ package org.dynmap.bukkit; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Collections; import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.ChunkSnapshot; -import org.bukkit.Server; import org.bukkit.World; import org.bukkit.entity.Player; import org.dynmap.Log; @@ -95,7 +90,7 @@ public abstract class BukkitVersionHelper { /** * Get tile entities map from chunk */ - public abstract Map getTileEntitiesForChunk(Chunk c); + public abstract Map getTileEntitiesForChunk(Chunk c); /** * Get X coordinate of tile entity */ diff --git a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperCB.java b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperCB.java index 89a3d07c..30c29d8d 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperCB.java +++ b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperCB.java @@ -5,13 +5,14 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Map; +import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Server; import org.bukkit.World; import org.dynmap.Log; -import org.dynmap.common.BiomeMap; +import org.dynmap.hdmap.HDBlockModels; import org.dynmap.utils.Polygon; /** @@ -36,7 +37,16 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric { private boolean isBadUnload = false; BukkitVersionHelperCB() { - isBadUnload = Bukkit.getServer().getBukkitVersion().contains("1.9"); + String bukkitver = DynmapPlugin.plugin.getServer().getVersion(); + String mcver = "1.0.0"; + int idx = bukkitver.indexOf("(MC: "); + if(idx > 0) { + mcver = bukkitver.substring(idx+5); + idx = mcver.indexOf(")"); + if(idx > 0) mcver = mcver.substring(0, idx); + } + isBadUnload = HDBlockModels.checkVersionRange(mcver, "1.9-"); + Log.verboseinfo("MCVER=" + mcver + ", isBadUnload=" + isBadUnload); } @Override protected String getNMSPackage() { @@ -83,8 +93,8 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric { chunkprovserver = getNMSClass("net.minecraft.server.ChunkProviderServer"); nmsw_chunkproviderserver = getPrivateFieldNoFail(nmsworld, new String[] { "chunkProviderServer" }, chunkprovserver); if (nmsw_chunkproviderserver == null) { - Class nmsworldbase = getNMSClass("net.minecraft.server.World"); - Class nmsichunkprovider = getNMSClass("net.minecraft.server.IChunkProvider"); + Class nmsworldbase = getNMSClass("net.minecraft.server.World"); + Class nmsichunkprovider = getNMSClass("net.minecraft.server.IChunkProvider"); nmsw_chunkproviderserver = getPrivateField(nmsworldbase, new String[] { "chunkProvider" }, nmsichunkprovider); } getworldborder = getMethodNoFail(nmsworld, new String[] { "af" }, nulltypes); @@ -94,18 +104,27 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric { lhs_containskey = getMethod(longhashset, new String[] { "contains" }, new Class[] { int.class, int.class }); } else { - longhashset = getOBCClass("org.bukkit.craftbukkit.util.LongHashset"); - lhs_containskey = getMethod(longhashset, new String[] { "containsKey" }, new Class[] { int.class, int.class }); + longhashset = getOBCClassNoFail("org.bukkit.craftbukkit.util.LongHashset"); + if (longhashset != null) { + lhs_containskey = getMethod(longhashset, new String[] { "containsKey" }, new Class[] { int.class, int.class }); + } } - cps_unloadqueue = getFieldNoFail(chunkprovserver, new String[] { "unloadQueue" }, longhashset); + cps_unloadqueue_isSet = false; + if (longhashset != null) { + cps_unloadqueue = getFieldNoFail(chunkprovserver, new String[] { "unloadQueue" }, longhashset); + } + if(cps_unloadqueue == null) { + cps_unloadqueue = getFieldNoFail(chunkprovserver, new String[] { "unloadQueue" }, Set.class); + cps_unloadqueue_isSet = true; + } if(cps_unloadqueue == null) { Log.info("Unload queue not found - default to unload all chunks"); } /** n.m.s.Chunk */ nmschunk = getNMSClass("net.minecraft.server.Chunk"); nmsc_tileentities = getField(nmschunk, new String[] { "tileEntities" }, Map.class); - nmsc_inhabitedticks = getPrivateFieldNoFail(nmschunk, new String[] { "s", "q", "u", "v" }, long.class); + nmsc_inhabitedticks = getPrivateFieldNoFail(nmschunk, new String[] { "s", "q", "u", "v", "w" }, long.class); if (nmsc_inhabitedticks == null) { Log.info("inhabitedTicks field not found - inhabited shader not functional"); } diff --git a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGeneric.java b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGeneric.java index 2a4309ce..54d98c3b 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGeneric.java +++ b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGeneric.java @@ -3,10 +3,10 @@ package org.dynmap.bukkit; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Map; +import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.Chunk; @@ -24,8 +24,8 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { protected String nms_package; // Package used for net.minecraft.server private boolean failed; protected static final Object[] nullargs = new Object[0]; - protected static final Class[] nulltypes = new Class[0]; - private static final Map nullmap = Collections.emptyMap(); + protected static final Class[] nulltypes = new Class[0]; + private static final Map nullmap = Collections.emptyMap(); /** CraftChunkSnapshot */ private Class craftchunksnapshot; @@ -51,6 +51,7 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { protected Class longhashset; protected Field nmsw_chunkproviderserver; protected Field cps_unloadqueue; + protected boolean cps_unloadqueue_isSet; protected Method lhs_containskey; /** n.m.s.Chunk */ protected Class nmschunk; @@ -97,7 +98,6 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { BukkitVersionHelperGeneric() { failed = false; - Server srv = Bukkit.getServer(); /* Look up base classname for bukkit server - tells us OBC package */ obc_package = Bukkit.getServer().getClass().getPackage().getName(); /* Get NMS package */ @@ -249,7 +249,7 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { /** * Get method */ - protected Method getMethod(Class cls, String[] ids, Class[] args) { + protected Method getMethod(Class cls, String[] ids, Class[] args) { if(cls == null) return null; for(String id : ids) { try { @@ -262,7 +262,7 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { failed = true; return null; } - protected Method getMethodNoFail(Class cls, String[] ids, Class[] args) { + protected Method getMethodNoFail(Class cls, String[] ids, Class[] args) { if(cls == null) return null; for(String id : ids) { try { @@ -327,6 +327,8 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { /* For testing unload queue for presence of givne chunk */ public boolean isInUnloadQueue(Object unloadqueue, int x, int z) { if(unloadqueue != null) { + if (cps_unloadqueue_isSet) + return ((Set) unloadqueue).contains(Long.valueOf((long)x & 0xFFFFFFFF | ((long)z & 0xFFFFFFFF) << 32)); return (Boolean)callMethod(unloadqueue, lhs_containskey, new Object[] { x, z }, true); } return true; @@ -358,10 +360,10 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper { } /** Get tile entities map from chunk */ - public Map getTileEntitiesForChunk(Chunk c) { + public Map getTileEntitiesForChunk(Chunk c) { Object omsc = callMethod(c, cc_gethandle, nullargs, null); if(omsc != null) { - return (Map)getFieldValue(omsc, nmsc_tileentities, nullmap); + return (Map)getFieldValue(omsc, nmsc_tileentities, nullmap); } return nullmap; } diff --git a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGlowstone.java b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGlowstone.java index d15574a7..a25e4fe9 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGlowstone.java +++ b/src/main/java/org/dynmap/bukkit/BukkitVersionHelperGlowstone.java @@ -98,7 +98,7 @@ public class BukkitVersionHelperGlowstone extends BukkitVersionHelper { } @Override - public Map getTileEntitiesForChunk(Chunk c) { + public Map getTileEntitiesForChunk(Chunk c) { // TODO Auto-generated method stub return Collections.emptyMap(); } diff --git a/src/main/java/org/dynmap/bukkit/BukkitWorld.java b/src/main/java/org/dynmap/bukkit/BukkitWorld.java index 41b096e1..e608f392 100644 --- a/src/main/java/org/dynmap/bukkit/BukkitWorld.java +++ b/src/main/java/org/dynmap/bukkit/BukkitWorld.java @@ -11,7 +11,6 @@ import java.util.List; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; import org.dynmap.DynmapChunk;