mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-11-25 03:35:18 +01:00
Merge pull request #295 from mikeprimm/hdrender
Add block transparency attributes to improve lighting accuracy
This commit is contained in:
commit
a1536d03cd
@ -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);
|
||||||
|
@ -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++;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -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;
|
||||||
|
166
texture.txt
166
texture.txt
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user