From 644c8d0213ccce17c1956a78bbb7ec38743184aa Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Tue, 19 Jul 2011 23:34:01 -0500 Subject: [PATCH] Add block transparency attributes to improve lighting accuracy --- .../org/dynmap/hdmap/IsoHDPerspective.java | 84 ++++----- .../java/org/dynmap/hdmap/TexturePack.java | 29 ++- .../org/dynmap/utils/LegacyMapChunkCache.java | 6 + .../java/org/dynmap/utils/MapIterator.java | 4 + .../org/dynmap/utils/NewMapChunkCache.java | 15 +- texture.txt | 166 +++++++++--------- 6 files changed, 170 insertions(+), 134 deletions(-) diff --git a/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java b/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java index 75da33ee..8db1de0d 100644 --- a/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java +++ b/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java @@ -24,6 +24,8 @@ import org.dynmap.MapTile; import org.dynmap.TileHashManager; import org.dynmap.debug.Debug; import org.dynmap.utils.MapIterator.BlockStep; +import org.dynmap.hdmap.TexturePack.BlockTransparency; +import org.dynmap.hdmap.TexturePack.HDTextureMap; import org.dynmap.kzedmap.KzedMap.KzedBufferedImage; import org.dynmap.kzedmap.KzedMap; import org.dynmap.utils.FileLockManager; @@ -75,6 +77,7 @@ public class IsoHDPerspective implements HDPerspective { private class OurPerspectiveState implements HDPerspectiveState { int blocktypeid = 0; int blockdata = 0; + int lastblocktypeid = 0; Vector3D top, bottom; int px, py; BlockStep laststep = BlockStep.Y_MINUS; @@ -92,67 +95,54 @@ public class IsoHDPerspective implements HDPerspective { MapIterator mapiter; boolean isnether; boolean skiptoair; + int skylevel = -1; + int emitlevel = -1; public OurPerspectiveState(MapIterator mi, boolean isnether) { mapiter = mi; this.isnether = isnether; } + /** + * Update sky and emitted light + */ + private final void updateLightLevel() { + /* Look up transparency for current block */ + BlockTransparency bt = HDTextureMap.getTransparency(blocktypeid); + if(bt == BlockTransparency.TRANSPARENT) { + skylevel = mapiter.getBlockSkyLight(); + emitlevel = mapiter.getBlockEmittedLight(); + } + else if(HDTextureMap.getTransparency(lastblocktypeid) != BlockTransparency.SEMITRANSPARENT) { + mapiter.unstepPosition(laststep); /* Back up to block we entered on */ + emitlevel = mapiter.getBlockEmittedLight(); + skylevel = mapiter.getBlockSkyLight(); + mapiter.stepPosition(laststep); + } + else { + mapiter.unstepPosition(laststep); /* Back up to block we entered on */ + mapiter.stepPosition(BlockStep.Y_PLUS); /* Look above */ + emitlevel = mapiter.getBlockEmittedLight(); + skylevel = mapiter.getBlockSkyLight(); + mapiter.stepPosition(BlockStep.Y_MINUS); + mapiter.stepPosition(laststep); + } + } /** * Get sky light level - only available if shader requested it */ public final int getSkyLightLevel() { - int ll; - BlockStep ls; - /* Some blocks are light blocking, but not fully blocking - this sucks */ - switch(mapiter.getBlockTypeID()) { - case 53: /* Wood stairs */ - case 44: /* Slabs */ - case 67: /* Cobblestone stairs */ - ls = mapiter.unstepPosition(); - mapiter.stepPosition(BlockStep.Y_PLUS); /* Look above */ - ll = mapiter.getBlockSkyLight(); - mapiter.stepPosition(BlockStep.Y_MINUS); - mapiter.stepPosition(ls); - break; - case 78: /* Snow */ - ll = mapiter.getBlockSkyLight(); - break; - default: - ls = mapiter.unstepPosition(); - ll = mapiter.getBlockSkyLight(); - mapiter.stepPosition(ls); - break; + if(skylevel < 0) { + updateLightLevel(); } - - return ll; + return skylevel; } /** * Get emitted light level - only available if shader requested it */ public final int getEmittedLightLevel() { - int ll; - BlockStep ls; - /* Some blocks are light blocking, but not fully blocking - this sucks */ - switch(mapiter.getBlockTypeID()) { - case 53: /* Wood stairs */ - case 44: /* Slabs */ - case 67: /* Cobblestone stairs */ - ls = mapiter.unstepPosition(); - mapiter.stepPosition(BlockStep.Y_PLUS); /* Look above */ - ll = mapiter.getBlockEmittedLight(); - mapiter.stepPosition(BlockStep.Y_MINUS); - mapiter.stepPosition(ls); - break; - case 78: /* Snow */ - ll = mapiter.getBlockEmittedLight(); - break; - default: - ls = mapiter.unstepPosition(); - ll = mapiter.getBlockEmittedLight(); - mapiter.stepPosition(ls); - break; - } - return ll; + if(emitlevel < 0) + updateLightLevel(); + return emitlevel; } /** * Get current block type ID @@ -321,6 +311,7 @@ public class IsoHDPerspective implements HDPerspective { * Process visit of ray to block */ private boolean visit_block(MapIterator mapiter, HDShaderState[] shaderstate, boolean[] shaderdone) { + lastblocktypeid = blocktypeid; blocktypeid = mapiter.getBlockTypeID(); if(skiptoair) { /* If skipping until we see air */ if(blocktypeid == 0) /* If air, we're done */ @@ -346,6 +337,7 @@ public class IsoHDPerspective implements HDPerspective { } if(!missed) { boolean done = true; + skylevel = emitlevel = -1; for(int i = 0; i < shaderstate.length; i++) { if(!shaderdone[i]) shaderdone[i] = shaderstate[i].processBlock(this); diff --git a/src/main/java/org/dynmap/hdmap/TexturePack.java b/src/main/java/org/dynmap/hdmap/TexturePack.java index 60862477..d803f0c4 100644 --- a/src/main/java/org/dynmap/hdmap/TexturePack.java +++ b/src/main/java/org/dynmap/hdmap/TexturePack.java @@ -98,18 +98,27 @@ public class TexturePack { private HashMap scaled_textures; - + public enum BlockTransparency { + OPAQUE, /* Block is opaque - blocks light - lit by light from adjacent blocks */ + TRANSPARENT, /* Block is transparent - passes light - lit by light level in own block */ + SEMITRANSPARENT /* Opaque block that doesn't block all rays (steps, slabs) - use light above for face lighting on opaque blocks */ + } public static class HDTextureMap { private int faces[]; /* index in terrain.png of image for each face (indexed by BlockStep.ordinal()) */ private List blockids; private int databits; + private BlockTransparency bt; private static HDTextureMap[] texmaps; + private static BlockTransparency transp[]; private static void initializeTable() { texmaps = new HDTextureMap[16*BLOCKTABLELEN]; + transp = new BlockTransparency[BLOCKTABLELEN]; HDTextureMap blank = new HDTextureMap(); for(int i = 0; i < texmaps.length; i++) texmaps[i] = blank; + for(int i = 0; i < transp.length; i++) + transp[i] = BlockTransparency.OPAQUE; } private HDTextureMap() { @@ -122,10 +131,11 @@ public class TexturePack { } } - public HDTextureMap(List blockids, int databits, int[] faces) { + public HDTextureMap(List blockids, int databits, int[] faces, BlockTransparency trans) { this.faces = faces; this.blockids = blockids; this.databits = databits; + this.bt = trans; } public void addToTable() { @@ -136,12 +146,17 @@ public class TexturePack { texmaps[16*blkid + i] = this; } } + transp[blkid] = bt; /* Transparency is only blocktype based right now */ } } public static HDTextureMap getMap(int blkid, int blkdata) { return texmaps[(blkid<<4) + blkdata]; } + + public static BlockTransparency getTransparency(int blkid) { + return transp[blkid]; + } } /** Get or load texture pack */ public static TexturePack getTexturePack(String tpname) { @@ -573,6 +588,7 @@ public class TexturePack { int databits = -1; int faces[] = new int[] { -1, -1, -1, -1, -1, -1 }; line = line.substring(6); + BlockTransparency trans = BlockTransparency.OPAQUE; String[] args = line.split(","); for(String a : args) { String[] av = a.split("="); @@ -622,12 +638,19 @@ public class TexturePack { faces[BlockStep.Y_MINUS.ordinal()] = faces[BlockStep.Y_PLUS.ordinal()] = Integer.parseInt(av[1]); } + else if(av[0].equals("transparency")) { + trans = BlockTransparency.valueOf(av[1]); + if(trans == null) { + trans = BlockTransparency.OPAQUE; + Log.severe("Texture mapping has invalid transparency setting - " + av[1] + " - line " + rdr.getLineNumber() + " of " + txtfile.getPath()); + } + } } /* If no data bits, assume all */ if(databits < 0) databits = 0xFFFF; /* If we have everything, build block */ if(blkids.size() > 0) { - HDTextureMap map = new HDTextureMap(blkids, databits, faces); + HDTextureMap map = new HDTextureMap(blkids, databits, faces, trans); map.addToTable(); cnt++; } diff --git a/src/main/java/org/dynmap/utils/LegacyMapChunkCache.java b/src/main/java/org/dynmap/utils/LegacyMapChunkCache.java index 56709974..d910ff34 100644 --- a/src/main/java/org/dynmap/utils/LegacyMapChunkCache.java +++ b/src/main/java/org/dynmap/utils/LegacyMapChunkCache.java @@ -159,6 +159,12 @@ public class LegacyMapChunkCache implements MapChunkCache { stepPosition(unstep[ls.ordinal()]); return ls; } + /** + * Unstep current position in oppisite director of given step + */ + public void unstepPosition(BlockStep s) { + stepPosition(unstep[s.ordinal()]); + } public final void setY(int y) { if(y > this.y) laststep = BlockStep.Y_PLUS; diff --git a/src/main/java/org/dynmap/utils/MapIterator.java b/src/main/java/org/dynmap/utils/MapIterator.java index fdad2c20..4aaec1a0 100644 --- a/src/main/java/org/dynmap/utils/MapIterator.java +++ b/src/main/java/org/dynmap/utils/MapIterator.java @@ -65,6 +65,10 @@ public interface MapIterator { * Step current position in given direction */ void stepPosition(BlockStep step); + /** + * Step current position in opposite of given direction + */ + void unstepPosition(BlockStep step); /** * Unstep current position to previous position : return step to take to return */ diff --git a/src/main/java/org/dynmap/utils/NewMapChunkCache.java b/src/main/java/org/dynmap/utils/NewMapChunkCache.java index 0bb01e08..e517263c 100644 --- a/src/main/java/org/dynmap/utils/NewMapChunkCache.java +++ b/src/main/java/org/dynmap/utils/NewMapChunkCache.java @@ -55,6 +55,7 @@ public class NewMapChunkCache implements MapChunkCache { private ChunkSnapshot snap; private BlockStep laststep; private int typeid = -1; + private int blkdata = -1; OurMapIterator(int x0, int y0, int z0) { initialize(x0, y0, z0); @@ -72,7 +73,7 @@ public class NewMapChunkCache implements MapChunkCache { snap = EMPTY; } laststep = BlockStep.Y_MINUS; - typeid = -1; + typeid = blkdata = -1; } public final int getBlockTypeID() { if(typeid < 0) @@ -80,7 +81,9 @@ public class NewMapChunkCache implements MapChunkCache { return typeid; } public final int getBlockData() { - return snap.getBlockData(bx, y, bz); + if(blkdata < 0) + blkdata = snap.getBlockData(bx, y, bz); + return blkdata; } public final int getHighestBlockYAt() { return snap.getHighestBlockYAt(bx, bz); @@ -166,6 +169,7 @@ public class NewMapChunkCache implements MapChunkCache { } laststep = step; typeid = -1; + blkdata = -1; } /** * Unstep current position to previous position @@ -175,6 +179,12 @@ public class NewMapChunkCache implements MapChunkCache { stepPosition(unstep[ls.ordinal()]); return ls; } + /** + * Unstep current position in oppisite director of given step + */ + public void unstepPosition(BlockStep s) { + stepPosition(unstep[s.ordinal()]); + } public final void setY(int y) { if(y > this.y) laststep = BlockStep.Y_PLUS; @@ -182,6 +192,7 @@ public class NewMapChunkCache implements MapChunkCache { laststep = BlockStep.Y_PLUS; this.y = y; typeid = -1; + blkdata = -1; } public final int getX() { return x; diff --git a/texture.txt b/texture.txt index b99e9161..a89a2a5c 100644 --- a/texture.txt +++ b/texture.txt @@ -16,21 +16,21 @@ block:id=4,allfaces=16 # Wooden Plank block:id=5,allsides=4,topbottom=4004 # Sapling -block:id=6,data=0,data=3,allsides=15 +block:id=6,data=0,data=3,allsides=15,transparency=TRANSPARENT # Sapling (Spruce) -block:id=6,data=1,allsides=63 +block:id=6,data=1,allsides=63,transparency=TRANSPARENT # Sapling (Birch) -block:id=6,data=2,allsides=79 +block:id=6,data=2,allsides=79,transparency=TRANSPARENT # Bedrock block:id=7,allfaces=16 # Water -block:id=8,allfaces=12258 +block:id=8,allfaces=12258,transparency=TRANSPARENT # Stationary water -block:id=9,allfaces=12257 +block:id=9,allfaces=12257,transparency=TRANSPARENT # Lava -block:id=10,allfaces=260 +block:id=10,allfaces=260,transparency=TRANSPARENT # Stationary Lava -block:id=11,allfaces=259 +block:id=11,allfaces=259,transparency=TRANSPARENT # Sand block:id=12,allfaces=18 # Gravel @@ -48,15 +48,15 @@ block:id=17,data=1,allsides=116,top=21,bottom=21 # Wood (birch) block:id=17,data=2,allsides=117,top=21,bottom=21 # Leaves (std) -block:id=18,data=0,allfaces=2052 +block:id=18,data=0,allfaces=2052,transparency=TRANSPARENT # Leaves (spruce/pine) -block:id=18,data=1,allfaces=2132 +block:id=18,data=1,allfaces=2132,transparency=TRANSPARENT # Leaves (birch) -block:id=18,data=2,allfaces=2052 +block:id=18,data=2,allfaces=2052,transparency=TRANSPARENT # Sponge block:id=19,allfaces=48 # Glass -block:id=20,allfaces=12049 +block:id=20,allfaces=12049,transparency=TRANSPARENT # Lapis Lazuli Ore block:id=21,allfaces=160 # Lapis Lazuli Block @@ -74,45 +74,45 @@ block:id=24,top=176,bottom=208,allsides=192 # Note Block block:id=25,allfaces=74 # Bed - head - pointing west -block:id=26,data=8,top=5135,bottom=5135,south=7151,north=151,west=152 +block:id=26,data=8,top=5135,bottom=5135,south=7151,north=151,west=152,transparency=TRANSPARENT # Bed - foot - pointing west -block:id=26,data=0,top=5134,bottom=5134,south=7150,north=150,east=149 +block:id=26,data=0,top=5134,bottom=5134,south=7150,north=150,east=149,transparency=TRANSPARENT # Bed - head - pointing north -block:id=26,data=9,top=4135,bottom=4135,north=152,east=151,west=7151 +block:id=26,data=9,top=4135,bottom=4135,north=152,east=151,west=7151,transparency=TRANSPARENT # Bed - foot - pointing north -block:id=26,data=1,top=4134,bottom=4134,south=149,east=150,west=7150 +block:id=26,data=1,top=4134,bottom=4134,south=149,east=150,west=7150,transparency=TRANSPARENT # Bed - head - pointing east -block:id=26,data=10,top=135,bottom=135,south=151,north=7151,east=152 +block:id=26,data=10,top=135,bottom=135,south=151,north=7151,east=152,transparency=TRANSPARENT # Bed - foot - pointing east -block:id=26,data=2,top=134,bottom=134,south=150,north=7150,west=149 +block:id=26,data=2,top=134,bottom=134,south=150,north=7150,west=149,transparency=TRANSPARENT # Bed - head - pointing south -block:id=26,data=11,top=6135,bottom=6135,south=152,east=7151,west=151 +block:id=26,data=11,top=6135,bottom=6135,south=152,east=7151,west=151,transparency=TRANSPARENT # Bed - foot - pointing south -block:id=26,data=3,top=6134,bottom=6134,north=149,east=7150,west=150 +block:id=26,data=3,top=6134,bottom=6134,north=149,east=7150,west=150,transparency=TRANSPARENT # Powered rail - heading east-west - unpowered # Powered rail - incline to east - unpowered # Powered rail - incline to west - unpowered -block:id=27,data=0,data=4,data=5,top=4163,bottom=4163,allsides=4 +block:id=27,data=0,data=4,data=5,top=4163,bottom=4163,allsides=4,transparency=TRANSPARENT # Powered rail - heading east-west - powered # Powered rail - incline to east - powered # Powered rail - incline to west - powered -block:id=27,data=8,data=12,data=13,top=4179,bottom=4179,allsides=4 +block:id=27,data=8,data=12,data=13,top=4179,bottom=4179,allsides=4,transparency=TRANSPARENT # Powered rail - heading north-south - unpowered # Powered rail - inclined to north - unpowered # Powered rail - inclined to south - unpowered -block:id=27,data=1,data=2,data=3,top=163,bottom=163,allsides=4 +block:id=27,data=1,data=2,data=3,top=163,bottom=163,allsides=4,transparency=TRANSPARENT # Powered rail - heading north-sout - powered # Powered rail - inclined to north - powered # Powered rail - inclined to south - powered -block:id=27,data=9,data=10,data=11,top=179,bottom=179,allsides=4 +block:id=27,data=9,data=10,data=11,top=179,bottom=179,allsides=4,transparency=TRANSPARENT # Detector rail - heading east-west # Detector rail - incline to east # Detector rail - incline to west -block:id=28,data=0,data=4,data=5,top=4195,bottom=4195,allsides=4 +block:id=28,data=0,data=4,data=5,top=4195,bottom=4195,allsides=4,transparency=TRANSPARENT # Detector rail - heading north-south # Detector rail - incline to north # Detector rail - incline to south -block:id=28,data=1,data=2,data=3,top=195,bottom=195,allsides=4 +block:id=28,data=1,data=2,data=3,top=195,bottom=195,allsides=4,transparency=TRANSPARENT # Sticky piston - facing down block:id=29,data=0,data=8,top=109,bottom=106,allsides=5108 # Sticky piston - facing up @@ -128,13 +128,13 @@ block:id=29,data=5,data=13,north=109,south=106,top=5108,bottom=108,east=4108,wes # Web block:id=30,allfaces=11 # Dead shrub -block:id=31,data=0,allsides=55,top=20 +block:id=31,data=0,allsides=55,top=20,transparency=TRANSPARENT # Tall Grass -block:id=31,data=1,allfaces=1039 +block:id=31,data=1,allfaces=1039,transparency=TRANSPARENT # Fern -block:id=31,data=2,allsides=1056,top=1000 +block:id=31,data=2,allsides=1056,top=1000,transparency=TRANSPARENT # Dead shrub -block:id=32,allsides=55,top=20 +block:id=32,allsides=55,top=20,transparency=TRANSPARENT # Piston - facing down block:id=33,data=0,data=8,top=109,bottom=107,allsides=5108 # Piston - facing up @@ -184,13 +184,13 @@ block:id=35,data=15,allfaces=113 # Block move by piston - don't render block:id=36 # Dandelion -block:id=37,allsides=13,top=162 +block:id=37,allsides=13,top=162,transparency=TRANSPARENT # Rose -block:id=38,allsides=12,top=129 +block:id=38,allsides=12,top=129,transparency=TRANSPARENT # Brown mushroom -block:id=39,allsides=29,top=161 +block:id=39,allsides=29,top=161,transparency=TRANSPARENT # Red mushroom -block:id=40,allsides=28,top=129 +block:id=40,allsides=28,top=129,transparency=TRANSPARENT # Gold block block:id=41,allfaces=23 # Iron block @@ -204,13 +204,13 @@ block:id=43,data=2,allsides=4,topbottom=4004 # Double Slab - Cobblestone block:id=43,data=3,allfaces=16 # Slab - stone -block:id=44,data=0,allsides=5,topbottom=6 +block:id=44,data=0,allsides=5,topbottom=6,transparency=SEMITRANSPARENT # Slab - Sandstone -block:id=44,data=1,top=176,bottom=208,allsides=192 +block:id=44,data=1,top=176,bottom=208,allsides=192,transparency=SEMITRANSPARENT # Slab - Wood -block:id=44,data=2,allsides=4,topbottom=4004 +block:id=44,data=2,allsides=4,topbottom=4004,transparency=SEMITRANSPARENT # Slab - Cobblestone -block:id=44,data=3,allfaces=16 +block:id=44,data=3,allfaces=16,transparency=SEMITRANSPARENT # Brick Block block:id=45,allfaces=7 # TNT @@ -222,19 +222,19 @@ block:id=48,allfaces=36 # Obsidian block:id=49,allfaces=37 # Torch - inclined -block:id=50,data=1,data=2,data=3,data=4,allsides=10080,top=162,bottom=4 +block:id=50,data=1,data=2,data=3,data=4,allsides=10080,top=162,bottom=4,transparency=TRANSPARENT # Torch - up -block:id=50,data=5,allsides=80,top=162,bottom=4 +block:id=50,data=5,allsides=80,top=162,bottom=4,transparency=TRANSPARENT # Fire -block:id=51,allsides=129,top=162 +block:id=51,allsides=129,top=162,transparency=TRANSPARENT # Monster spawner -block:id=52,allfaces=65 +block:id=52,allfaces=65,transparency=TRANSPARENT # Wooden stairs -block:id=53,allsides=4,topbottom=4004 +block:id=53,allsides=4,topbottom=4004,transparency=SEMITRANSPARENT # Chest - TODO: get entity data so we can see orientation block:id=54,top=25,south=27,north=27,east=26,west=26 # Redstone wire (model handling shape - use red wool for color) -block:id=55,allfaces=129 +block:id=55,allfaces=129,transparency=TRANSPARENT # Diamond ore block:id=56,allfaces=50 # Diamond block @@ -242,21 +242,21 @@ block:id=57,allfaces=24 # Crafting table block:id=58,topbottom=43,east=59,west=59,north=60,south=60 # Crops (size 1) -block:id=59,data=0,allsides=88,top=1000 +block:id=59,data=0,allsides=88,top=1000,transparency=TRANSPARENT # Crops (size 2) -block:id=59,data=1,allsides=89,top=1000 +block:id=59,data=1,allsides=89,top=1000,transparency=TRANSPARENT # Crops (size 3) -block:id=59,data=2,allsides=90,top=1000 +block:id=59,data=2,allsides=90,top=1000,transparency=TRANSPARENT # Crops (size 4) -block:id=59,data=3,allsides=91,top=1000 +block:id=59,data=3,allsides=91,top=1000,transparency=TRANSPARENT # Crops (size 5) -block:id=59,data=4,allsides=92,top=1000 +block:id=59,data=4,allsides=92,top=1000,transparency=TRANSPARENT # Crops (size 6) -block:id=59,data=5,allsides=93,top=1000 +block:id=59,data=5,allsides=93,top=1000,transparency=TRANSPARENT # Crops (size 7) -block:id=59,data=6,allsides=94,top=1000 +block:id=59,data=6,allsides=94,top=1000,transparency=TRANSPARENT # Crops (size 8) -block:id=59,data=7,allsides=95,top=1000 +block:id=59,data=7,allsides=95,top=1000,transparency=TRANSPARENT # Farmland (dry) block:id=60,data=0,allfaces=87 # Farmland (wet) @@ -270,71 +270,71 @@ block:id=61,data=4,top=62,north=61,south=45,east=45,west=45,bottom=62 # Furnace (facing south) block:id=61,data=5,top=62,south=61,north=45,east=45,west=45,bottom=62 # Signpost -block:id=62,allsides=4,topbottom=4004 +block:id=62,allsides=4,topbottom=4004,transparency=TRANSPARENT # Wooden Door - bottom -block:id=64,data=0,data=1,data=2,data=3,data=4,data=5,data=6,data=7,allsides=97,topbottom=4 +block:id=64,data=0,data=1,data=2,data=3,data=4,data=5,data=6,data=7,allsides=97,topbottom=4,transparency=TRANSPARENT # Wooden Door - top -block:id=64,data=8,data=9,data=10,data=11,data=12,data=13,data=14,data=15,allsides=81,topbottom=4 +block:id=64,data=8,data=9,data=10,data=11,data=12,data=13,data=14,data=15,allsides=81,topbottom=4,transparency=TRANSPARENT # Ladders -block:id=65,allsides=83,topbottom=4 +block:id=65,allsides=83,topbottom=4,transparency=TRANSPARENT # Rail - heading east-west # Rail - incline to east # Rail - incline to west -block:id=66,data=0,data=4,data=5,top=4128,bottom=4128,allsides=4 +block:id=66,data=0,data=4,data=5,top=4128,bottom=4128,allsides=4,transparency=TRANSPARENT # Rail - heading north-south # Rail - incline to north # Rail - incline to south -block:id=66,data=1,data=2,data=3,top=128,bottom=128,allsides=4 +block:id=66,data=1,data=2,data=3,top=128,bottom=128,allsides=4,transparency=TRANSPARENT # Rails - northeast corner -block:id=66,data=6,topbottom=4112,allsides=4 +block:id=66,data=6,topbottom=4112,allsides=4,transparency=TRANSPARENT # Rails - southeast corner -block:id=66,data=7,topbottom=5112,allsides=4 +block:id=66,data=7,topbottom=5112,allsides=4,transparency=TRANSPARENT # Rails - southwest corner -block:id=66,data=8,topbottom=6112,allsides=4 +block:id=66,data=8,topbottom=6112,allsides=4,transparency=TRANSPARENT # Rails - northwest corner -block:id=66,data=9,topbottom=112,allsides=4 +block:id=66,data=9,topbottom=112,allsides=4,transparency=TRANSPARENT # Cobblestone Stairs -block:id=67,allfaces=16 +block:id=67,allfaces=16,transparency=SEMITRANSPARENT # Wall sign -block:id=68,allsides=4,topbottom=4004 +block:id=68,allsides=4,topbottom=4004,transparency=TRANSPARENT # Switch (just do stone for now) -block:id=69,allfaces=1 +block:id=69,allfaces=1,transparency=TRANSPARENT # Stone pressure plate -block:id=70,allfaces=1 +block:id=70,allfaces=1,transparency=TRANSPARENT # Iron Door - bottom -block:id=71,data=0,data=1,data=2,data=3,data=4,data=5,data=6,data=7,allsides=98,topbottom=22 +block:id=71,data=0,data=1,data=2,data=3,data=4,data=5,data=6,data=7,allsides=98,topbottom=22,transparency=TRANSPARENT # Iron Door - top -block:id=71,data=8,data=9,data=10,data=11,data=12,data=13,data=14,data=15,allsides=82,topbottom=22 +block:id=71,data=8,data=9,data=10,data=11,data=12,data=13,data=14,data=15,allsides=82,topbottom=22,transparency=TRANSPARENT # Wooden pressure plate -block:id=72,allsides=4,topbottom=4004 +block:id=72,allsides=4,topbottom=4004,transparency=TRANSPARENT # Redstone Ore block:id=73,id=74,allfaces=51 # Redstone Torch - unlit - inclined -block:id=75,data=1,data=2,data=3,data=4,allsides=10115,top=162,bottom=4 +block:id=75,data=1,data=2,data=3,data=4,allsides=10115,top=162,bottom=4,transparency=TRANSPARENT # Redstone Torch - unlit - up -block:id=75,data=5,allsides=115,top=162,bottom=4 +block:id=75,data=5,allsides=115,top=162,bottom=4,transparency=TRANSPARENT # Redstone Torch - lit - inclined -block:id=76,data=1,data=2,data=3,data=4,allsides=10099,top=162,bottom=4 +block:id=76,data=1,data=2,data=3,data=4,allsides=10099,top=162,bottom=4,transparency=TRANSPARENT # Redstone Torch - lit - up -block:id=76,data=5,allsides=99,top=162,bottom=4 +block:id=76,data=5,allsides=99,top=162,bottom=4,transparency=TRANSPARENT # Stone button -block:id=77,allfaces=1 +block:id=77,allfaces=1,transparency=TRANSPARENT # Snow -block:id=78,allfaces=66 +block:id=78,allfaces=66,transparency=TRANSPARENT # Ice -block:id=79,allfaces=12067 +block:id=79,allfaces=12067,transparency=TRANSPARENT # Snow block block:id=80,allfaces=66 # Cactus -block:id=81,top=69,allsides=70,bottom=71 +block:id=81,top=69,allsides=70,bottom=71,transparency=TRANSPARENT # Clay block block:id=82,allfaces=72 # Sugar Cane -block:id=83,allsides=73,topbottom=21 +block:id=83,allsides=73,topbottom=21,transparency=TRANSPARENT # Jukebox block:id=84,allsides=74,topbottom=75 # Fence -block:id=85,allsides=4,topbottom=4004 +block:id=85,allsides=4,topbottom=4004,transparency=TRANSPARENT # Pumpkin block:id=86,allsides=118,topbottom=102 # Netherrock @@ -344,7 +344,7 @@ block:id=88,allfaces=104 # Glowstone Block block:id=89,allfaces=105 # Portal (no texture for this - using purple wool) -block:id=90,allfaces=193 +block:id=90,allfaces=193,transparency=TRANSPARENT # Jack O Lantern (east) block:id=91,data=0,north=118,south=118,east=120,west=118,topbottom=102 # Jack O Lantern (south) @@ -354,12 +354,12 @@ block:id=91,data=2,north=118,south=118,east=118,west=120,topbottom=102 # Jack O Lantern (north) block:id=91,data=3,north=120,south=118,east=118,west=118,topbottom=102 # Cake Block -block:id=92,allsides=122,top=121,bottom=124 +block:id=92,allsides=122,top=121,bottom=124,transparency=TRANSPARENT # Repeater (off) -block:id=93,top=131,allsides=1,bottom=1 +block:id=93,top=131,allsides=1,bottom=1,transparency=TRANSPARENT # Repeater (on) -block:id=94,top=147,allsides=1,bottom=1 +block:id=94,top=147,allsides=1,bottom=1,transparency=TRANSPARENT # Locked Chest - TODO: get entity data so we can see orientation block:id=95,top=25,south=27,north=27,east=26,west=26 # Trap door -block:id=96,topbottom=84,allsides=4 +block:id=96,topbottom=84,allsides=4,transparency=TRANSPARENT