From 313b7f3beb7a46ecc190b74f05185fd916583b65 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Fri, 17 May 2019 23:58:15 -0500 Subject: [PATCH] Finish new 1.14 walls, add boxlist: model, use for scaffolding --- .../java/org/dynmap/hdmap/HDBlockModels.java | 85 +++++++++++++++++++ DynmapCore/src/main/resources/models_1.txt | 19 ++++- DynmapCore/src/main/resources/texture_1.txt | 30 +++++++ 3 files changed, 131 insertions(+), 3 deletions(-) diff --git a/DynmapCore/src/main/java/org/dynmap/hdmap/HDBlockModels.java b/DynmapCore/src/main/java/org/dynmap/hdmap/HDBlockModels.java index 9e48f1c2..b0859079 100644 --- a/DynmapCore/src/main/java/org/dynmap/hdmap/HDBlockModels.java +++ b/DynmapCore/src/main/java/org/dynmap/hdmap/HDBlockModels.java @@ -315,6 +315,10 @@ public class HDBlockModels { // Patch index ordering, corresponding to BlockStep ordinal order public static final int boxPatchList[] = { 1, 4, 0, 3, 2, 5 }; + private static class BoxLimits { + double xmin = 0.0, xmax = 1.0, ymin = 0.0, ymax = 1.0, zmin = 0.0, zmax = 1.0; + int[] patches = new int[6]; // Default all to patch0 + } /** * Load models from file * @param core @@ -875,6 +879,87 @@ public class HDBlockModels { Log.severe("Box block model missing required parameters = line " + rdr.getLineNumber() + " of " + fname); } } + // Shortcut for defining a patchblock that is a simple rectangular prism, with sidex corresponding to full block sides + else if(line.startsWith("boxlist:")) { + ArrayList blknames = new ArrayList(); + databits.clear(); + line = line.substring(8); + String[] args = line.split(","); + ArrayList boxes = new ArrayList(); + for(String a : args) { + String[] av = a.split("="); + if(av.length < 2) continue; + if(av[0].equals("id")) { + blknames.add(getBlockName(modname,av[1])); + } + else if(av[0].equals("data")) { + if(av[1].equals("*")) { + databits.clear(); + } + else if (av[1].indexOf('-') > 0) { + String[] sp = av[1].split("-"); + int m0 = getIntValue(varvals, sp[0]); + int m1 = getIntValue(varvals, sp[1]); + for (int m = m0; m <= m1; m++) { + databits.set(m); + } + } + else + databits.set(getIntValue(varvals,av[1])); + } + else if(av[0].equals("box")) { + String[] prms = av[1].split(":"); + BoxLimits box = new BoxLimits(); + if (prms.length > 0) + box.xmin = Double.parseDouble(prms[0]); + if (prms.length > 1) + box.xmax = Double.parseDouble(prms[1]); + if (prms.length > 2) + box.ymin = Double.parseDouble(prms[2]); + if (prms.length > 3) + box.ymax = Double.parseDouble(prms[3]); + if (prms.length > 4) + box.zmin = Double.parseDouble(prms[4]); + if (prms.length > 5) + box.zmax = Double.parseDouble(prms[5]); + if (prms.length > 6) { + String[] pl = prms[6].split("/"); + for (int p = 0; (p < 6) && (p < pl.length); p++) { + box.patches[p] = Integer.parseInt(pl[p]); + } + } + boxes.add(box); + } + } + /* If we have everything, build block */ + pmodlist.clear(); + if (blknames.size() > 0) { + ArrayList pd = new ArrayList(); + + for (BoxLimits bl : boxes) { + CustomRenderer.addBox(pdf, pd, bl.xmin, bl.xmax, bl.ymin, bl.ymax, bl.zmin, bl.zmax, bl.patches); + } + PatchDefinition[] patcharray = new PatchDefinition[pd.size()]; + for (int i = 0; i < patcharray.length; i++) { + patcharray[i] = (PatchDefinition) pd.get(i); + } + if(patcharray.length > max_patches) + max_patches = patcharray.length; + for(String nm : blknames) { + DynmapBlockState bs = DynmapBlockState.getBaseStateByName(nm); + if (bs.isNotAir()) { + pmodlist.add(new HDBlockPatchModel(bs, databits, patcharray, blockset)); + cnt++; + } + else { + Log.severe("Invalid boxlist block name " + nm + " at line " + rdr.getLineNumber()); + } + } + } + else { + Log.severe("Box list block model missing required parameters = line " + rdr.getLineNumber() + " of " + fname); + } + } else if(line.startsWith("customblock:")) { ArrayList blknames = new ArrayList(); HashMap custargs = new HashMap(); diff --git a/DynmapCore/src/main/resources/models_1.txt b/DynmapCore/src/main/resources/models_1.txt index e80c14c4..972e60f8 100644 --- a/DynmapCore/src/main/resources/models_1.txt +++ b/DynmapCore/src/main/resources/models_1.txt @@ -1468,6 +1468,19 @@ patchblock:id=bubble_column # Red nether brick slab # Polished andesite slab # Diorite slab -[1.14-]boxblock:id=polished_granite_slab,id=smooth_red_sandstone_slab,id=mossy_stone_brick_slab,id=polished_diorite_slab,id=mossy_cobblestone_slab,id=end_stone_brick_slab,id=smooth_sandstone_slab,id=smooth_quarts_slab,id=granite_slab,id=andesite_slab,id=red_nether_brick_slab,id=polished_andesite_slab,id=diorite_slab,data=0,data=1,ymin=0.5 -[1.14-]boxblock:id=polished_granite_slab,id=smooth_red_sandstone_slab,id=mossy_stone_brick_slab,id=polished_diorite_slab,id=mossy_cobblestone_slab,id=end_stone_brick_slab,id=smooth_sandstone_slab,id=smooth_quarts_slab,id=granite_slab,id=andesite_slab,id=red_nether_brick_slab,id=polished_andesite_slab,id=diorite_slab,data=2,data=3,ymax=0.5 - +[1.14-]boxblock:id=polished_granite_slab,id=smooth_red_sandstone_slab,id=mossy_stone_brick_slab,id=polished_diorite_slab,id=mossy_cobblestone_slab,id=end_stone_brick_slab,id=smooth_sandstone_slab,id=smooth_quartz_slab,id=granite_slab,id=andesite_slab,id=red_nether_brick_slab,id=polished_andesite_slab,id=diorite_slab,data=0,data=1,ymin=0.5 +[1.14-]boxblock:id=polished_granite_slab,id=smooth_red_sandstone_slab,id=mossy_stone_brick_slab,id=polished_diorite_slab,id=mossy_cobblestone_slab,id=end_stone_brick_slab,id=smooth_sandstone_slab,id=smooth_quartz_slab,id=granite_slab,id=andesite_slab,id=red_nether_brick_slab,id=polished_andesite_slab,id=diorite_slab,data=2,data=3,ymax=0.5 +# Brick wall +# Prismarine wall +# Red sandstone wall +# Mossy stone brick wall +# Granite wall +# Stone brick wall +# Nether brick wall +# Red nether brick wall +# Sandstone wall +# End stone brick wall +# Diorite wall +[1.14-]customblock:id=brick_wall,id=prismarine_wall,id=red_sandstone_wall,id=mossy_stone_brick_wall,id=granite_wall,id=stone_brick_wall,id=nether_brick_wall,id=andesite_wall,id=red_nether_brick_wall,id=sandstone_wall,id=end_stone_brick_wall,id=diorite_wall,class=org.dynmap.hdmap.renderer.FenceWallBlockStateRenderer,type=wall +# Scaffolding +[1.14-]boxlist:id=scaffolding,box=0:1:0.99:1:0:1:0/0/-1/-1/-1/-1,box=0:0.125:0:1:0:0.125:2/-1/1/1/1/1,box=0:0.125:0:1:0.875:1:2/-1/1/1/1/1,box=0.875:1:0:1:0.875:1:2/-1/1/1/1/1,box=0.875:1:0:1:0:0.125:2/-1/1/1/1/1,box=0.125:0.875:0.875:1:0:0.125:2/-1/1/1/1/1,box=0.125:0.875:0.875:1:0.875:1:2/-1/1/1/1/1,box=0.875:1:0.875:1:0.125:0.875:2/-1/1/1/1/1,box=0:0.125:0.875:1:0.125:0.875:2/-1/1/1/1/1 diff --git a/DynmapCore/src/main/resources/texture_1.txt b/DynmapCore/src/main/resources/texture_1.txt index a0bfbfda..d08ee9bb 100644 --- a/DynmapCore/src/main/resources/texture_1.txt +++ b/DynmapCore/src/main/resources/texture_1.txt @@ -2172,6 +2172,10 @@ block:id=horn_coral,patch0-1=0:horn_coral,transparency=TRANSPARENT [1.14-]texture:id=smooth_stone [1.14-]texture:id=bamboo_stage0 [1.14-]texture:id=bamboo_stalk +[1.14-]texture:id=scaffolding_top +[1.14-]texture:id=scaffolding_side +[1.14-]texture:id=scaffolding_bottom + # Signpost [1.14-]block:id=oak_sign,patch0=0,patch1=1,patch2=2,patch3=3,patch4=4,patch5=5,patch6=6,patch7=7,patch8=8,patch9=9,transparency=TRANSPARENT,txtid=oak_sign [1.14-]block:id=spruce_sign,patch0=0,patch1=1,patch2=2,patch3=3,patch4=4,patch5=5,patch6=6,patch7=7,patch8=8,patch9=9,transparency=TRANSPARENT,txtid=spruce_sign @@ -2280,3 +2284,29 @@ block:id=horn_coral,patch0-1=0:horn_coral,transparency=TRANSPARENT # Diorite slab [1.14-]block:id=diorite_slab,data=0,data=1,data=2,data=3,allsides=0:diorite,topbottom=0:diorite,stdrot=true,transparency=SEMITRANSPARENT [1.14-]block:id=diorite_slab,data=4,data=5,allsides=0:diorite,topbottom=0:diorite,stdrot=true +# Brick wall +[1.14-]block:id=brick_wall,patch0-2=0:bricks,transparency=TRANSPARENT +# Prismarine wall +[1.14-]block:id=prismarine_wall,patch0-2=0:prismarine,transparency=TRANSPARENT +# Red sandstone wall +[1.14-]block:id=red_sandstone_wall,patch0-2=0:red_sandstone,transparency=TRANSPARENT +# Mossy stone brick wall +[1.14-]block:id=mossy_stone_brick_wall,patch0-2=0:mossy_stone_bricks,transparency=TRANSPARENT +# Granite wall +[1.14-]block:id=granite_wall,patch0-2=0:granite,transparency=TRANSPARENT +# Stone brick wall +[1.14-]block:id=stone_brick_wall,patch0-2=0:stone_bricks,transparency=TRANSPARENT +# Nether brick wall +[1.14-]block:id=nether_brick_wall,patch0-2=0:nether_bricks,transparency=TRANSPARENT +# Andesite wall +[1.14-]block:id=andesite_wall,patch0-2=0:andesite,transparency=TRANSPARENT +# Red nether brick wall +[1.14-]block:id=red_nether_brick_wall,patch0-2=0:red_nether_bricks,transparency=TRANSPARENT +# Sandstone wall +[1.14-]block:id=sandstone_wall,patch0-2=0:sandstone,transparency=TRANSPARENT +# End stone brick wall +[1.14-]block:id=end_stone_brick_wall,patch0-2=0:end_stone_bricks,transparency=TRANSPARENT +# Diorite wall +[1.14-]block:id=diorite_wall,patch0-2=0:diorite,transparency=TRANSPARENT +# Scaffolding +[1.14-]block:id=scaffolding,patch0=0:scaffolding_top,patch1=0:scaffolding_side,patch2=0:scaffolding_bottom,transparency=TRANSPARENT