mirror of
https://github.com/webbukkit/dynmap.git
synced 2025-02-04 14:01:31 +01:00
Add initial support for Spigot/CB 1.9
This commit is contained in:
parent
20320c578f
commit
94fc53ef91
@ -31,6 +31,8 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
private Method worldbordermaxx;
|
||||
private Method worldborderminz;
|
||||
private Method worldbordermaxz;
|
||||
private Method getbiomebyid;
|
||||
private Method getidbybiome;
|
||||
|
||||
BukkitVersionHelperCB() {
|
||||
}
|
||||
@ -63,15 +65,26 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
/* Set up biomebase fields */
|
||||
biomebase = getNMSClass("net.minecraft.server.BiomeBase");
|
||||
biomebasearray = getNMSClass("[Lnet.minecraft.server.BiomeBase;");
|
||||
biomebaselist = getPrivateField(biomebase, new String[] { "biomes" }, biomebasearray);
|
||||
biomebasetemp = getField(biomebase, new String[] { "temperature", "F" }, float.class);
|
||||
biomebasehumi = getField(biomebase, new String[] { "humidity", "G" }, float.class);
|
||||
biomebaseidstring = getField(biomebase, new String[] { "y", "af", "ah" }, String.class);
|
||||
biomebaseid = getField(biomebase, new String[] { "id" }, int.class);
|
||||
biomebaselist = getPrivateFieldNoFail(biomebase, new String[] { "biomes" }, biomebasearray);
|
||||
if (biomebaselist == null) {
|
||||
getbiomebyid = getMethod(biomebase, new String[] { "a" }, new Class[] { int.class} );
|
||||
}
|
||||
biomebasetemp = getPrivateField(biomebase, new String[] { "temperature", "F", "C" }, float.class);
|
||||
biomebasehumi = getPrivateField(biomebase, new String[] { "humidity", "G", "D" }, float.class);
|
||||
biomebaseidstring = getPrivateField(biomebase, new String[] { "y", "af", "ah", "z" }, String.class);
|
||||
biomebaseid = getFieldNoFail(biomebase, new String[] { "id" }, int.class);
|
||||
if (biomebaseid == null) {
|
||||
getidbybiome = getMethod(biomebase, new String[] { "a" }, new Class[] { biomebase } );
|
||||
}
|
||||
/* n.m.s.World */
|
||||
nmsworld = getNMSClass("net.minecraft.server.WorldServer");
|
||||
chunkprovserver = getNMSClass("net.minecraft.server.ChunkProviderServer");
|
||||
nmsw_chunkproviderserver = getField(nmsworld, new String[] { "chunkProviderServer" }, chunkprovserver);
|
||||
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");
|
||||
nmsw_chunkproviderserver = getPrivateField(nmsworldbase, new String[] { "chunkProvider" }, nmsichunkprovider);
|
||||
}
|
||||
getworldborder = getMethodNoFail(nmsworld, new String[] { "af" }, nulltypes);
|
||||
|
||||
longhashset = getOBCClassNoFail("org.bukkit.craftbukkit.util.LongHashSet");
|
||||
@ -90,7 +103,7 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
/** n.m.s.Chunk */
|
||||
nmschunk = getNMSClass("net.minecraft.server.Chunk");
|
||||
nmsc_tileentities = getField(nmschunk, new String[] { "tileEntities" }, Map.class);
|
||||
nmsc_inhabitedticks = getFieldNoFail(nmschunk, new String[] { "s", "q", "u" }, long.class);
|
||||
nmsc_inhabitedticks = getFieldNoFail(nmschunk, new String[] { "s", "q", "u", "v" }, long.class);
|
||||
if (nmsc_inhabitedticks == null) {
|
||||
Log.info("inhabitedTicks field not found - inhabited shader not functional");
|
||||
}
|
||||
@ -127,7 +140,7 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
|
||||
/** Tile entity */
|
||||
nms_tileentity = getNMSClass("net.minecraft.server.TileEntity");
|
||||
nmst_readnbt = getMethod(nms_tileentity, new String[] { "b" }, new Class[] { nbttagcompound });
|
||||
nmst_readnbt = getMethod(nms_tileentity, new String[] { "b", "save" }, new Class[] { nbttagcompound });
|
||||
nmst_getposition = getMethodNoFail(nms_tileentity, new String[] { "getPosition" }, new Class[0]); // Try 1.8 method
|
||||
if (nmst_getposition == null) {
|
||||
nmst_x = getField(nms_tileentity, new String[] { "x" }, int.class);
|
||||
@ -268,4 +281,38 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
}
|
||||
return p;
|
||||
}
|
||||
private Object[] biomelist = null;
|
||||
/**
|
||||
* Get list of defined biomebase objects
|
||||
*/
|
||||
public Object[] getBiomeBaseList() {
|
||||
if (getbiomebyid != null) {
|
||||
if (biomelist == null) {
|
||||
biomelist = new Object[256];
|
||||
for (int i = 0; i < 256; i++) {
|
||||
try {
|
||||
biomelist[i] = getbiomebyid.invoke(biomebase, i);
|
||||
} catch (IllegalAccessException x) {
|
||||
} catch (IllegalArgumentException x) {
|
||||
} catch (InvocationTargetException x) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return biomelist;
|
||||
}
|
||||
return super.getBiomeBaseList();
|
||||
}
|
||||
/** Get ID from biomebase */
|
||||
public int getBiomeBaseID(Object bb) {
|
||||
if (getidbybiome != null) {
|
||||
try {
|
||||
return (Integer) getidbybiome.invoke(biomebase, bb);
|
||||
} catch (IllegalAccessException e) {
|
||||
} catch (IllegalArgumentException e) {
|
||||
} catch (InvocationTargetException e) {
|
||||
}
|
||||
}
|
||||
return super.getBiomeBaseID(bb);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -197,10 +197,22 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Get private field
|
||||
*/
|
||||
protected Field getPrivateFieldNoFail(Class<?> cls, String[] ids, Class<?> type) {
|
||||
return getPrivateField(cls, ids, type, true);
|
||||
}
|
||||
/**
|
||||
* Get private field
|
||||
*/
|
||||
protected Field getPrivateField(Class<?> cls, String[] ids, Class<?> type) {
|
||||
return getPrivateField(cls, ids, type, false);
|
||||
}
|
||||
/**
|
||||
* Get private field
|
||||
*/
|
||||
protected Field getPrivateField(Class<?> cls, String[] ids, Class<?> type, boolean nofail) {
|
||||
if((cls == null) || (type == null)) return null;
|
||||
for(String id : ids) {
|
||||
try {
|
||||
@ -212,8 +224,10 @@ public abstract class BukkitVersionHelperGeneric extends BukkitVersionHelper {
|
||||
} catch (NoSuchFieldException nsfx) {
|
||||
}
|
||||
}
|
||||
Log.severe("Unable to find field " + ids[0] + " for " + cls.getName());
|
||||
failed = true;
|
||||
if (!nofail) {
|
||||
Log.severe("Unable to find field " + ids[0] + " for " + cls.getName());
|
||||
failed = true;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
protected Object getFieldValue(Object obj, Field field, Object def) {
|
||||
|
Loading…
Reference in New Issue
Block a user