96 lines
5 KiB
Java
96 lines
5 KiB
Java
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.dynmap.Log;
|
|
|
|
/**
|
|
* Helper for isolation of bukkit version specific issues
|
|
*/
|
|
public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
|
|
|
BukkitVersionHelperCB() {
|
|
}
|
|
@Override
|
|
protected String getNMSPackage() {
|
|
Server srv = Bukkit.getServer();
|
|
/* Get getHandle() method */
|
|
try {
|
|
Method m = srv.getClass().getMethod("getHandle");
|
|
Object scm = m.invoke(srv); /* And use it to get SCM (nms object) */
|
|
return scm.getClass().getPackage().getName();
|
|
} catch (Exception x) {
|
|
Log.severe("Error finding net.minecraft.server packages");
|
|
return null;
|
|
}
|
|
}
|
|
@Override
|
|
protected void loadNMS() {
|
|
/* Set up biomebase fields */
|
|
biomebase = getNMSClass("net.minecraft.server.BiomeBase");
|
|
biomebasearray = getNMSClass("[Lnet.minecraft.server.BiomeBase;");
|
|
biomebaselist = getField(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" }, String.class);
|
|
biomebaseid = getField(biomebase, new String[] { "id" }, int.class);
|
|
/* n.m.s.World */
|
|
nmsworld = getNMSClass("net.minecraft.server.WorldServer");
|
|
chunkprovserver = getNMSClass("net.minecraft.server.ChunkProviderServer");
|
|
nmsw_chunkproviderserver = getField(nmsworld, new String[] { "chunkProviderServer" }, chunkprovserver);
|
|
|
|
longhashset = getOBCClassNoFail("org.bukkit.craftbukkit.util.LongHashSet");
|
|
if(longhashset != null) {
|
|
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 });
|
|
}
|
|
|
|
cps_unloadqueue = getFieldNoFail(chunkprovserver, new String[] { "unloadQueue" }, longhashset);
|
|
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_removeentities = getMethod(nmschunk, new String[] { "removeEntities" }, new Class[0]);
|
|
nmsc_tileentities = getField(nmschunk, new String[] { "tileEntities" }, Map.class);
|
|
/** nbt classes */
|
|
nbttagcompound = getNMSClass("net.minecraft.server.NBTTagCompound");
|
|
nbttagbyte = getNMSClass("net.minecraft.server.NBTTagByte");
|
|
nbttagshort = getNMSClass("net.minecraft.server.NBTTagShort");
|
|
nbttagint = getNMSClass("net.minecraft.server.NBTTagInt");
|
|
nbttaglong = getNMSClass("net.minecraft.server.NBTTagLong");
|
|
nbttagfloat = getNMSClass("net.minecraft.server.NBTTagFloat");
|
|
nbttagdouble = getNMSClass("net.minecraft.server.NBTTagDouble");
|
|
nbttagbytearray = getNMSClass("net.minecraft.server.NBTTagByteArray");
|
|
nbttagstring = getNMSClass("net.minecraft.server.NBTTagString");
|
|
nbttagintarray = getNMSClass("net.minecraft.server.NBTTagIntArray");
|
|
compound_get = getMethod(nbttagcompound, new String[] { "get" }, new Class[] { String.class });
|
|
nbttagbyte_val = getField(nbttagbyte, new String[] { "data" }, byte.class);
|
|
nbttagshort_val = getField(nbttagshort, new String[] { "data" }, short.class);
|
|
nbttagint_val = getField(nbttagint, new String[] { "data" }, int.class);
|
|
nbttaglong_val = getField(nbttaglong, new String[] { "data" }, long.class);
|
|
nbttagfloat_val = getField(nbttagfloat, new String[] { "data" }, float.class);
|
|
nbttagdouble_val = getField(nbttagdouble, new String[] { "data" }, double.class);
|
|
nbttagbytearray_val = getField(nbttagbytearray, new String[] { "data" }, byte[].class);
|
|
nbttagstring_val = getField(nbttagstring, new String[] { "data" }, String.class);
|
|
nbttagintarray_val = getField(nbttagintarray, new String[] { "data" }, int[].class);
|
|
|
|
/** Tile entity */
|
|
nms_tileentity = getNMSClass("net.minecraft.server.TileEntity");
|
|
nmst_readnbt = getMethod(nms_tileentity, new String[] { "b" }, new Class[] { nbttagcompound });
|
|
nmst_x = getField(nms_tileentity, new String[] { "x" }, int.class);
|
|
nmst_y = getField(nms_tileentity, new String[] { "y" }, int.class);
|
|
nmst_z = getField(nms_tileentity, new String[] { "z" }, int.class);
|
|
}
|
|
}
|