Merge pull request #295 from mikeprimm/hdrender

Add block transparency attributes to improve lighting accuracy
This commit is contained in:
mikeprimm 2011-07-19 21:35:26 -07:00
commit a1536d03cd
6 changed files with 170 additions and 134 deletions

View File

@ -24,6 +24,8 @@ import org.dynmap.MapTile;
import org.dynmap.TileHashManager; import org.dynmap.TileHashManager;
import org.dynmap.debug.Debug; import org.dynmap.debug.Debug;
import org.dynmap.utils.MapIterator.BlockStep; 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.KzedBufferedImage;
import org.dynmap.kzedmap.KzedMap; import org.dynmap.kzedmap.KzedMap;
import org.dynmap.utils.FileLockManager; import org.dynmap.utils.FileLockManager;
@ -75,6 +77,7 @@ public class IsoHDPerspective implements HDPerspective {
private class OurPerspectiveState implements HDPerspectiveState { private class OurPerspectiveState implements HDPerspectiveState {
int blocktypeid = 0; int blocktypeid = 0;
int blockdata = 0; int blockdata = 0;
int lastblocktypeid = 0;
Vector3D top, bottom; Vector3D top, bottom;
int px, py; int px, py;
BlockStep laststep = BlockStep.Y_MINUS; BlockStep laststep = BlockStep.Y_MINUS;
@ -92,67 +95,54 @@ public class IsoHDPerspective implements HDPerspective {
MapIterator mapiter; MapIterator mapiter;
boolean isnether; boolean isnether;
boolean skiptoair; boolean skiptoair;
int skylevel = -1;
int emitlevel = -1;
public OurPerspectiveState(MapIterator mi, boolean isnether) { public OurPerspectiveState(MapIterator mi, boolean isnether) {
mapiter = mi; mapiter = mi;
this.isnether = isnether; 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 * Get sky light level - only available if shader requested it
*/ */
public final int getSkyLightLevel() { public final int getSkyLightLevel() {
int ll; if(skylevel < 0) {
BlockStep ls; updateLightLevel();
/* 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;
} }
return skylevel;
return ll;
} }
/** /**
* Get emitted light level - only available if shader requested it * Get emitted light level - only available if shader requested it
*/ */
public final int getEmittedLightLevel() { public final int getEmittedLightLevel() {
int ll; if(emitlevel < 0)
BlockStep ls; updateLightLevel();
/* Some blocks are light blocking, but not fully blocking - this sucks */ return emitlevel;
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;
} }
/** /**
* Get current block type ID * Get current block type ID
@ -321,6 +311,7 @@ public class IsoHDPerspective implements HDPerspective {
* Process visit of ray to block * Process visit of ray to block
*/ */
private boolean visit_block(MapIterator mapiter, HDShaderState[] shaderstate, boolean[] shaderdone) { private boolean visit_block(MapIterator mapiter, HDShaderState[] shaderstate, boolean[] shaderdone) {
lastblocktypeid = blocktypeid;
blocktypeid = mapiter.getBlockTypeID(); blocktypeid = mapiter.getBlockTypeID();
if(skiptoair) { /* If skipping until we see air */ if(skiptoair) { /* If skipping until we see air */
if(blocktypeid == 0) /* If air, we're done */ if(blocktypeid == 0) /* If air, we're done */
@ -346,6 +337,7 @@ public class IsoHDPerspective implements HDPerspective {
} }
if(!missed) { if(!missed) {
boolean done = true; boolean done = true;
skylevel = emitlevel = -1;
for(int i = 0; i < shaderstate.length; i++) { for(int i = 0; i < shaderstate.length; i++) {
if(!shaderdone[i]) if(!shaderdone[i])
shaderdone[i] = shaderstate[i].processBlock(this); shaderdone[i] = shaderstate[i].processBlock(this);

View File

@ -98,18 +98,27 @@ public class TexturePack {
private HashMap<Integer, TexturePack> scaled_textures; private HashMap<Integer, TexturePack> 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 { public static class HDTextureMap {
private int faces[]; /* index in terrain.png of image for each face (indexed by BlockStep.ordinal()) */ private int faces[]; /* index in terrain.png of image for each face (indexed by BlockStep.ordinal()) */
private List<Integer> blockids; private List<Integer> blockids;
private int databits; private int databits;
private BlockTransparency bt;
private static HDTextureMap[] texmaps; private static HDTextureMap[] texmaps;
private static BlockTransparency transp[];
private static void initializeTable() { private static void initializeTable() {
texmaps = new HDTextureMap[16*BLOCKTABLELEN]; texmaps = new HDTextureMap[16*BLOCKTABLELEN];
transp = new BlockTransparency[BLOCKTABLELEN];
HDTextureMap blank = new HDTextureMap(); HDTextureMap blank = new HDTextureMap();
for(int i = 0; i < texmaps.length; i++) for(int i = 0; i < texmaps.length; i++)
texmaps[i] = blank; texmaps[i] = blank;
for(int i = 0; i < transp.length; i++)
transp[i] = BlockTransparency.OPAQUE;
} }
private HDTextureMap() { private HDTextureMap() {
@ -122,10 +131,11 @@ public class TexturePack {
} }
} }
public HDTextureMap(List<Integer> blockids, int databits, int[] faces) { public HDTextureMap(List<Integer> blockids, int databits, int[] faces, BlockTransparency trans) {
this.faces = faces; this.faces = faces;
this.blockids = blockids; this.blockids = blockids;
this.databits = databits; this.databits = databits;
this.bt = trans;
} }
public void addToTable() { public void addToTable() {
@ -136,12 +146,17 @@ public class TexturePack {
texmaps[16*blkid + i] = this; texmaps[16*blkid + i] = this;
} }
} }
transp[blkid] = bt; /* Transparency is only blocktype based right now */
} }
} }
public static HDTextureMap getMap(int blkid, int blkdata) { public static HDTextureMap getMap(int blkid, int blkdata) {
return texmaps[(blkid<<4) + blkdata]; return texmaps[(blkid<<4) + blkdata];
} }
public static BlockTransparency getTransparency(int blkid) {
return transp[blkid];
}
} }
/** Get or load texture pack */ /** Get or load texture pack */
public static TexturePack getTexturePack(String tpname) { public static TexturePack getTexturePack(String tpname) {
@ -573,6 +588,7 @@ public class TexturePack {
int databits = -1; int databits = -1;
int faces[] = new int[] { -1, -1, -1, -1, -1, -1 }; int faces[] = new int[] { -1, -1, -1, -1, -1, -1 };
line = line.substring(6); line = line.substring(6);
BlockTransparency trans = BlockTransparency.OPAQUE;
String[] args = line.split(","); String[] args = line.split(",");
for(String a : args) { for(String a : args) {
String[] av = a.split("="); String[] av = a.split("=");
@ -622,12 +638,19 @@ public class TexturePack {
faces[BlockStep.Y_MINUS.ordinal()] = faces[BlockStep.Y_MINUS.ordinal()] =
faces[BlockStep.Y_PLUS.ordinal()] = Integer.parseInt(av[1]); 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 no data bits, assume all */
if(databits < 0) databits = 0xFFFF; if(databits < 0) databits = 0xFFFF;
/* If we have everything, build block */ /* If we have everything, build block */
if(blkids.size() > 0) { if(blkids.size() > 0) {
HDTextureMap map = new HDTextureMap(blkids, databits, faces); HDTextureMap map = new HDTextureMap(blkids, databits, faces, trans);
map.addToTable(); map.addToTable();
cnt++; cnt++;
} }

View File

@ -159,6 +159,12 @@ public class LegacyMapChunkCache implements MapChunkCache {
stepPosition(unstep[ls.ordinal()]); stepPosition(unstep[ls.ordinal()]);
return ls; 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) { public final void setY(int y) {
if(y > this.y) if(y > this.y)
laststep = BlockStep.Y_PLUS; laststep = BlockStep.Y_PLUS;

View File

@ -65,6 +65,10 @@ public interface MapIterator {
* Step current position in given direction * Step current position in given direction
*/ */
void stepPosition(BlockStep step); 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 * Unstep current position to previous position : return step to take to return
*/ */

View File

@ -55,6 +55,7 @@ public class NewMapChunkCache implements MapChunkCache {
private ChunkSnapshot snap; private ChunkSnapshot snap;
private BlockStep laststep; private BlockStep laststep;
private int typeid = -1; private int typeid = -1;
private int blkdata = -1;
OurMapIterator(int x0, int y0, int z0) { OurMapIterator(int x0, int y0, int z0) {
initialize(x0, y0, z0); initialize(x0, y0, z0);
@ -72,7 +73,7 @@ public class NewMapChunkCache implements MapChunkCache {
snap = EMPTY; snap = EMPTY;
} }
laststep = BlockStep.Y_MINUS; laststep = BlockStep.Y_MINUS;
typeid = -1; typeid = blkdata = -1;
} }
public final int getBlockTypeID() { public final int getBlockTypeID() {
if(typeid < 0) if(typeid < 0)
@ -80,7 +81,9 @@ public class NewMapChunkCache implements MapChunkCache {
return typeid; return typeid;
} }
public final int getBlockData() { 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() { public final int getHighestBlockYAt() {
return snap.getHighestBlockYAt(bx, bz); return snap.getHighestBlockYAt(bx, bz);
@ -166,6 +169,7 @@ public class NewMapChunkCache implements MapChunkCache {
} }
laststep = step; laststep = step;
typeid = -1; typeid = -1;
blkdata = -1;
} }
/** /**
* Unstep current position to previous position * Unstep current position to previous position
@ -175,6 +179,12 @@ public class NewMapChunkCache implements MapChunkCache {
stepPosition(unstep[ls.ordinal()]); stepPosition(unstep[ls.ordinal()]);
return ls; 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) { public final void setY(int y) {
if(y > this.y) if(y > this.y)
laststep = BlockStep.Y_PLUS; laststep = BlockStep.Y_PLUS;
@ -182,6 +192,7 @@ public class NewMapChunkCache implements MapChunkCache {
laststep = BlockStep.Y_PLUS; laststep = BlockStep.Y_PLUS;
this.y = y; this.y = y;
typeid = -1; typeid = -1;
blkdata = -1;
} }
public final int getX() { public final int getX() {
return x; return x;

View File

@ -16,21 +16,21 @@ block:id=4,allfaces=16
# Wooden Plank # Wooden Plank
block:id=5,allsides=4,topbottom=4004 block:id=5,allsides=4,topbottom=4004
# Sapling # Sapling
block:id=6,data=0,data=3,allsides=15 block:id=6,data=0,data=3,allsides=15,transparency=TRANSPARENT
# Sapling (Spruce) # Sapling (Spruce)
block:id=6,data=1,allsides=63 block:id=6,data=1,allsides=63,transparency=TRANSPARENT
# Sapling (Birch) # Sapling (Birch)
block:id=6,data=2,allsides=79 block:id=6,data=2,allsides=79,transparency=TRANSPARENT
# Bedrock # Bedrock
block:id=7,allfaces=16 block:id=7,allfaces=16
# Water # Water
block:id=8,allfaces=12258 block:id=8,allfaces=12258,transparency=TRANSPARENT
# Stationary water # Stationary water
block:id=9,allfaces=12257 block:id=9,allfaces=12257,transparency=TRANSPARENT
# Lava # Lava
block:id=10,allfaces=260 block:id=10,allfaces=260,transparency=TRANSPARENT
# Stationary Lava # Stationary Lava
block:id=11,allfaces=259 block:id=11,allfaces=259,transparency=TRANSPARENT
# Sand # Sand
block:id=12,allfaces=18 block:id=12,allfaces=18
# Gravel # Gravel
@ -48,15 +48,15 @@ block:id=17,data=1,allsides=116,top=21,bottom=21
# Wood (birch) # Wood (birch)
block:id=17,data=2,allsides=117,top=21,bottom=21 block:id=17,data=2,allsides=117,top=21,bottom=21
# Leaves (std) # Leaves (std)
block:id=18,data=0,allfaces=2052 block:id=18,data=0,allfaces=2052,transparency=TRANSPARENT
# Leaves (spruce/pine) # Leaves (spruce/pine)
block:id=18,data=1,allfaces=2132 block:id=18,data=1,allfaces=2132,transparency=TRANSPARENT
# Leaves (birch) # Leaves (birch)
block:id=18,data=2,allfaces=2052 block:id=18,data=2,allfaces=2052,transparency=TRANSPARENT
# Sponge # Sponge
block:id=19,allfaces=48 block:id=19,allfaces=48
# Glass # Glass
block:id=20,allfaces=12049 block:id=20,allfaces=12049,transparency=TRANSPARENT
# Lapis Lazuli Ore # Lapis Lazuli Ore
block:id=21,allfaces=160 block:id=21,allfaces=160
# Lapis Lazuli Block # Lapis Lazuli Block
@ -74,45 +74,45 @@ block:id=24,top=176,bottom=208,allsides=192
# Note Block # Note Block
block:id=25,allfaces=74 block:id=25,allfaces=74
# Bed - head - pointing west # 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 # 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 # 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 # 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 # 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 # 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 # 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 # 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 - heading east-west - unpowered
# Powered rail - incline to east - unpowered # Powered rail - incline to east - unpowered
# Powered rail - incline to west - 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 - heading east-west - powered
# Powered rail - incline to east - powered # Powered rail - incline to east - powered
# Powered rail - incline to west - 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 - heading north-south - unpowered
# Powered rail - inclined to north - unpowered # Powered rail - inclined to north - unpowered
# Powered rail - inclined to south - 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 - heading north-sout - powered
# Powered rail - inclined to north - powered # Powered rail - inclined to north - powered
# Powered rail - inclined to south - 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 - heading east-west
# Detector rail - incline to east # Detector rail - incline to east
# Detector rail - incline to west # 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 - heading north-south
# Detector rail - incline to north # Detector rail - incline to north
# Detector rail - incline to south # 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 # Sticky piston - facing down
block:id=29,data=0,data=8,top=109,bottom=106,allsides=5108 block:id=29,data=0,data=8,top=109,bottom=106,allsides=5108
# Sticky piston - facing up # 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 # Web
block:id=30,allfaces=11 block:id=30,allfaces=11
# Dead shrub # Dead shrub
block:id=31,data=0,allsides=55,top=20 block:id=31,data=0,allsides=55,top=20,transparency=TRANSPARENT
# Tall Grass # Tall Grass
block:id=31,data=1,allfaces=1039 block:id=31,data=1,allfaces=1039,transparency=TRANSPARENT
# Fern # Fern
block:id=31,data=2,allsides=1056,top=1000 block:id=31,data=2,allsides=1056,top=1000,transparency=TRANSPARENT
# Dead shrub # Dead shrub
block:id=32,allsides=55,top=20 block:id=32,allsides=55,top=20,transparency=TRANSPARENT
# Piston - facing down # Piston - facing down
block:id=33,data=0,data=8,top=109,bottom=107,allsides=5108 block:id=33,data=0,data=8,top=109,bottom=107,allsides=5108
# Piston - facing up # Piston - facing up
@ -184,13 +184,13 @@ block:id=35,data=15,allfaces=113
# Block move by piston - don't render # Block move by piston - don't render
block:id=36 block:id=36
# Dandelion # Dandelion
block:id=37,allsides=13,top=162 block:id=37,allsides=13,top=162,transparency=TRANSPARENT
# Rose # Rose
block:id=38,allsides=12,top=129 block:id=38,allsides=12,top=129,transparency=TRANSPARENT
# Brown mushroom # Brown mushroom
block:id=39,allsides=29,top=161 block:id=39,allsides=29,top=161,transparency=TRANSPARENT
# Red mushroom # Red mushroom
block:id=40,allsides=28,top=129 block:id=40,allsides=28,top=129,transparency=TRANSPARENT
# Gold block # Gold block
block:id=41,allfaces=23 block:id=41,allfaces=23
# Iron block # Iron block
@ -204,13 +204,13 @@ block:id=43,data=2,allsides=4,topbottom=4004
# Double Slab - Cobblestone # Double Slab - Cobblestone
block:id=43,data=3,allfaces=16 block:id=43,data=3,allfaces=16
# Slab - stone # Slab - stone
block:id=44,data=0,allsides=5,topbottom=6 block:id=44,data=0,allsides=5,topbottom=6,transparency=SEMITRANSPARENT
# Slab - Sandstone # 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 # Slab - Wood
block:id=44,data=2,allsides=4,topbottom=4004 block:id=44,data=2,allsides=4,topbottom=4004,transparency=SEMITRANSPARENT
# Slab - Cobblestone # Slab - Cobblestone
block:id=44,data=3,allfaces=16 block:id=44,data=3,allfaces=16,transparency=SEMITRANSPARENT
# Brick Block # Brick Block
block:id=45,allfaces=7 block:id=45,allfaces=7
# TNT # TNT
@ -222,19 +222,19 @@ block:id=48,allfaces=36
# Obsidian # Obsidian
block:id=49,allfaces=37 block:id=49,allfaces=37
# Torch - inclined # 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 # 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 # Fire
block:id=51,allsides=129,top=162 block:id=51,allsides=129,top=162,transparency=TRANSPARENT
# Monster spawner # Monster spawner
block:id=52,allfaces=65 block:id=52,allfaces=65,transparency=TRANSPARENT
# Wooden stairs # 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 # Chest - TODO: get entity data so we can see orientation
block:id=54,top=25,south=27,north=27,east=26,west=26 block:id=54,top=25,south=27,north=27,east=26,west=26
# Redstone wire (model handling shape - use red wool for color) # Redstone wire (model handling shape - use red wool for color)
block:id=55,allfaces=129 block:id=55,allfaces=129,transparency=TRANSPARENT
# Diamond ore # Diamond ore
block:id=56,allfaces=50 block:id=56,allfaces=50
# Diamond block # Diamond block
@ -242,21 +242,21 @@ block:id=57,allfaces=24
# Crafting table # Crafting table
block:id=58,topbottom=43,east=59,west=59,north=60,south=60 block:id=58,topbottom=43,east=59,west=59,north=60,south=60
# Crops (size 1) # 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) # 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) # 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) # 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) # 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) # 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) # 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) # 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) # Farmland (dry)
block:id=60,data=0,allfaces=87 block:id=60,data=0,allfaces=87
# Farmland (wet) # 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) # Furnace (facing south)
block:id=61,data=5,top=62,south=61,north=45,east=45,west=45,bottom=62 block:id=61,data=5,top=62,south=61,north=45,east=45,west=45,bottom=62
# Signpost # Signpost
block:id=62,allsides=4,topbottom=4004 block:id=62,allsides=4,topbottom=4004,transparency=TRANSPARENT
# Wooden Door - bottom # 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 # 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 # Ladders
block:id=65,allsides=83,topbottom=4 block:id=65,allsides=83,topbottom=4,transparency=TRANSPARENT
# Rail - heading east-west # Rail - heading east-west
# Rail - incline to east # Rail - incline to east
# Rail - incline to west # 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 - heading north-south
# Rail - incline to north # Rail - incline to north
# Rail - incline to south # 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 # 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 # 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 # 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 # 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 # Cobblestone Stairs
block:id=67,allfaces=16 block:id=67,allfaces=16,transparency=SEMITRANSPARENT
# Wall sign # Wall sign
block:id=68,allsides=4,topbottom=4004 block:id=68,allsides=4,topbottom=4004,transparency=TRANSPARENT
# Switch (just do stone for now) # Switch (just do stone for now)
block:id=69,allfaces=1 block:id=69,allfaces=1,transparency=TRANSPARENT
# Stone pressure plate # Stone pressure plate
block:id=70,allfaces=1 block:id=70,allfaces=1,transparency=TRANSPARENT
# Iron Door - bottom # 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 # 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 # Wooden pressure plate
block:id=72,allsides=4,topbottom=4004 block:id=72,allsides=4,topbottom=4004,transparency=TRANSPARENT
# Redstone Ore # Redstone Ore
block:id=73,id=74,allfaces=51 block:id=73,id=74,allfaces=51
# Redstone Torch - unlit - inclined # 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 # 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 # 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 # 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 # Stone button
block:id=77,allfaces=1 block:id=77,allfaces=1,transparency=TRANSPARENT
# Snow # Snow
block:id=78,allfaces=66 block:id=78,allfaces=66,transparency=TRANSPARENT
# Ice # Ice
block:id=79,allfaces=12067 block:id=79,allfaces=12067,transparency=TRANSPARENT
# Snow block # Snow block
block:id=80,allfaces=66 block:id=80,allfaces=66
# Cactus # Cactus
block:id=81,top=69,allsides=70,bottom=71 block:id=81,top=69,allsides=70,bottom=71,transparency=TRANSPARENT
# Clay block # Clay block
block:id=82,allfaces=72 block:id=82,allfaces=72
# Sugar Cane # Sugar Cane
block:id=83,allsides=73,topbottom=21 block:id=83,allsides=73,topbottom=21,transparency=TRANSPARENT
# Jukebox # Jukebox
block:id=84,allsides=74,topbottom=75 block:id=84,allsides=74,topbottom=75
# Fence # Fence
block:id=85,allsides=4,topbottom=4004 block:id=85,allsides=4,topbottom=4004,transparency=TRANSPARENT
# Pumpkin # Pumpkin
block:id=86,allsides=118,topbottom=102 block:id=86,allsides=118,topbottom=102
# Netherrock # Netherrock
@ -344,7 +344,7 @@ block:id=88,allfaces=104
# Glowstone Block # Glowstone Block
block:id=89,allfaces=105 block:id=89,allfaces=105
# Portal (no texture for this - using purple wool) # Portal (no texture for this - using purple wool)
block:id=90,allfaces=193 block:id=90,allfaces=193,transparency=TRANSPARENT
# Jack O Lantern (east) # Jack O Lantern (east)
block:id=91,data=0,north=118,south=118,east=120,west=118,topbottom=102 block:id=91,data=0,north=118,south=118,east=120,west=118,topbottom=102
# Jack O Lantern (south) # 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) # Jack O Lantern (north)
block:id=91,data=3,north=120,south=118,east=118,west=118,topbottom=102 block:id=91,data=3,north=120,south=118,east=118,west=118,topbottom=102
# Cake Block # Cake Block
block:id=92,allsides=122,top=121,bottom=124 block:id=92,allsides=122,top=121,bottom=124,transparency=TRANSPARENT
# Repeater (off) # Repeater (off)
block:id=93,top=131,allsides=1,bottom=1 block:id=93,top=131,allsides=1,bottom=1,transparency=TRANSPARENT
# Repeater (on) # 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 # Locked Chest - TODO: get entity data so we can see orientation
block:id=95,top=25,south=27,north=27,east=26,west=26 block:id=95,top=25,south=27,north=27,east=26,west=26
# Trap door # Trap door
block:id=96,topbottom=84,allsides=4 block:id=96,topbottom=84,allsides=4,transparency=TRANSPARENT