Get 1.12.2 blockname based textures working

This commit is contained in:
Mike Primm 2018-08-05 21:27:18 -05:00
parent b4920e0246
commit 58d5e59616
5 changed files with 37 additions and 19 deletions

View File

@ -1,5 +1,6 @@
package org.dynmap.bukkit;
import java.util.Arrays;
import java.util.Map;
import org.bukkit.Bukkit;
@ -47,7 +48,7 @@ public abstract class BukkitVersionHelper {
return helper;
}
public static DynIntHashMap stateByID = new DynIntHashMap();
public static DynmapBlockState[] stateByID = new DynmapBlockState[65536];
protected BukkitVersionHelper() {
@ -121,9 +122,9 @@ public abstract class BukkitVersionHelper {
*/
public abstract void unloadChunkNoSave(World w, Chunk c, int cx, int cz);
/**
* Get block short name list
* Get block name list
*/
public abstract String[] getBlockShortNames();
public abstract String[] getBlockNames();
/**
* Get biome name list
*/
@ -157,21 +158,28 @@ public abstract class BukkitVersionHelper {
* Initialize block states (org.dynmap.blockstate.DynmapBlockState)
*/
public void initializeBlockStates() {
String[] blkname = getBlockShortNames();
String[] blkname = getBlockNames();
// Keep it simple for now - just assume 16 meta states for each
Arrays.fill(stateByID, DynmapBlockState.AIR);
for (int i = 0; i < blkname.length; i++) {
if (blkname[i] == null) continue;
String bn = blkname[i];
if (bn.indexOf(':') < 0) {
bn = "minecraft:" + bn;
}
// Only do defined names, and not "air"
if ((blkname[i] != null) && (!blkname[i].equals("air"))) {
Log.info("block " + blkname[i]);
DynmapBlockState basebs = new DynmapBlockState(null, 0, "minecraft:" + blkname, "meta=0");
stateByID.put((i << 4), basebs);
if (!bn.equals(DynmapBlockState.AIR_BLOCK)) {
DynmapBlockState basebs = new DynmapBlockState(null, 0, bn, "meta=0");
stateByID[i << 4] = basebs;
for (int m = 1; m < 16; m++) {
DynmapBlockState bs = new DynmapBlockState(basebs, m, "minecraft:" + blkname, "meta=" + m);
stateByID.put((i << 4) + m, bs);
DynmapBlockState bs = new DynmapBlockState(basebs, m, bn, "meta=" + m);
stateByID[(i << 4) + m] = bs;
}
}
}
stateByID.put(0, DynmapBlockState.AIR); // Include air block;
for (int gidx = 0; gidx < DynmapBlockState.getGlobalIndexMax(); gidx++) {
DynmapBlockState bs = DynmapBlockState.getStateByGlobalIndex(gidx);
Log.info(gidx + ":" + bs.toString() + ", gidx=" + bs.globalStateIndex + ", sidx=" + bs.stateIndex);
}
}
}

View File

@ -186,18 +186,25 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
public void unloadChunkNoSave(World w, Chunk c, int cx, int cz) {
w.unloadChunk(cx, cz, false, false);
}
private String stripBlockString(String bname) {
int idx = bname.indexOf('{');
if (idx >= 0) bname = bname.substring(idx+1);
idx = bname.indexOf('}');
if (idx >= 0) bname = bname.substring(0, idx);
return bname;
}
/**
* Get block short name list
*/
@Override
public String[] getBlockShortNames() {
public String[] getBlockNames() {
try {
String[] names = new String[4096];
if (blockbyid != null) {
Object[] byid = (Object[])blockbyid.get(nmsblock);
for (int i = 0; i < names.length; i++) {
if (byid[i] != null) {
names[i] = (String)blockname.get(byid[i]);
names[i] = stripBlockString(byid[i].toString());
}
}
}
@ -205,7 +212,7 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
for (int i = 0; i < names.length; i++) {
Object blk = blockbyidfunc.invoke(nmsblock, i);
if (blk != null) {
names[i] = (String)blockname.get(blk);
names[i] = stripBlockString(blk.toString());
}
}
}

View File

@ -140,7 +140,7 @@ public class BukkitVersionHelperGlowstone extends BukkitVersionHelper {
}
@Override
public String[] getBlockShortNames() {
public String[] getBlockNames() {
// TODO Auto-generated method stub
return null;
}

View File

@ -545,11 +545,14 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
@Override
public Map<Integer, String> getBlockIDMap() {
String[] bsn = helper.getBlockShortNames();
String[] bsn = helper.getBlockNames();
HashMap<Integer, String> map = new HashMap<Integer, String>();
for (int i = 0; i < bsn.length; i++) {
if (bsn[i] != null) {
map.put(i, "minecraft:" + bsn[i]);
if (bsn[i].indexOf(':') < 0)
map.put(i, "minecraft:" + bsn[i]);
else
map.put(i, bsn[i]);
}
}
return map;

View File

@ -63,7 +63,7 @@ public class NewMapChunkCache extends MapChunkCache {
}
private static DynmapBlockState getTypeAt(ChunkSnapshot ss, int x, int y, int z) {
return (DynmapBlockState) BukkitVersionHelper.stateByID.get((ss.getBlockTypeId(x, y, z) << 4) | ss.getBlockData(x, y, z));
return BukkitVersionHelper.stateByID[(ss.getBlockTypeId(x, y, z) << 4) | ss.getBlockData(x, y, z)];
}
/**