Add full support for CTM material connection method

This commit is contained in:
Mike Primm 2013-04-28 10:12:01 -05:00
parent a2ab8c4f2f
commit 5396d0b823
3 changed files with 39 additions and 0 deletions

View File

@ -124,4 +124,8 @@ public abstract class BukkitVersionHelper {
* Get biome name list * Get biome name list
*/ */
public abstract String[] getBiomeNames(); public abstract String[] getBiomeNames();
/**
* Get block material index list
*/
public abstract int[] getBlockMaterialMap();
} }

View File

@ -2,6 +2,7 @@ package org.dynmap.bukkit;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Map; import java.util.Map;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Chunk; import org.bukkit.Chunk;
@ -16,8 +17,10 @@ import org.dynmap.common.BiomeMap;
public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric { public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
private Class<?> nmsblock; private Class<?> nmsblock;
private Class<?> nmsblockarray; private Class<?> nmsblockarray;
private Class<?> nmsmaterial;
private Field blockbyid; private Field blockbyid;
private Field blockname; private Field blockname;
private Field material;
BukkitVersionHelperCB() { BukkitVersionHelperCB() {
} }
@ -39,8 +42,10 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
// Get block fields // Get block fields
nmsblock = getNMSClass("net.minecraft.server.Block"); nmsblock = getNMSClass("net.minecraft.server.Block");
nmsblockarray = getNMSClass("[Lnet.minecraft.server.Block;"); nmsblockarray = getNMSClass("[Lnet.minecraft.server.Block;");
nmsmaterial = getNMSClass("net.minecraft.server.Material");
blockbyid = getField(nmsblock, new String[] { "byId" }, nmsblockarray); blockbyid = getField(nmsblock, new String[] { "byId" }, nmsblockarray);
blockname = getPrivateField(nmsblock, new String[] { "name" }, String.class); blockname = getPrivateField(nmsblock, new String[] { "name" }, String.class);
material = getField(nmsblock, new String[] { "material" }, nmsmaterial);
/* Set up biomebase fields */ /* Set up biomebase fields */
biomebase = getNMSClass("net.minecraft.server.BiomeBase"); biomebase = getNMSClass("net.minecraft.server.BiomeBase");
@ -143,4 +148,33 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
} }
return names; return names;
} }
/**
* Get block material index list
*/
public int[] getBlockMaterialMap() {
try {
Object[] byid = (Object[])blockbyid.get(nmsblock);
int[] map = new int[byid.length];
ArrayList<Object> mats = new ArrayList<Object>();
for (int i = 0; i < map.length; i++) {
if (byid[i] != null) {
Object mat = (Object)material.get(byid[i]);
if (mat != null) {
map[i] = mats.indexOf(mat);
if (map[i] < 0) {
map[i] = mats.size();
mats.add(mat);
}
}
else {
map[i] = -1;
}
}
}
return map;
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
return new int[0];
}
} }

View File

@ -756,6 +756,7 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
core.setDataFolder(dataDirectory); core.setDataFolder(dataDirectory);
core.setServer(new BukkitServer()); core.setServer(new BukkitServer());
core.setBlockNames(helper.getBlockShortNames()); core.setBlockNames(helper.getBlockShortNames());
core.setBlockMaterialMap(helper.getBlockMaterialMap());
core.setBiomeNames(helper.getBiomeNames()); core.setBiomeNames(helper.getBiomeNames());
/* Load configuration */ /* Load configuration */