mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-11-24 11:15:21 +01:00
Handle waterlogged/water-filled blocks, fix turtle eggs, pickles
This commit is contained in:
parent
42dfce94bc
commit
2ebab4b7fc
@ -512,6 +512,7 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
* Process visit of ray to block
|
* Process visit of ray to block
|
||||||
*/
|
*/
|
||||||
private final boolean visit_block(HDShaderState[] shaderstate, boolean[] shaderdone) {
|
private final boolean visit_block(HDShaderState[] shaderstate, boolean[] shaderdone) {
|
||||||
|
boolean done = false;
|
||||||
lastblocktype = blocktype;
|
lastblocktype = blocktype;
|
||||||
blocktype = mapiter.getBlockType();
|
blocktype = mapiter.getBlockType();
|
||||||
if(skiptoair) { /* If skipping until we see air */
|
if(skiptoair) { /* If skipping until we see air */
|
||||||
@ -520,6 +521,7 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(nonairhit || blocktype.isNotAir()) {
|
else if(nonairhit || blocktype.isNotAir()) {
|
||||||
|
done = true;
|
||||||
// If waterlogged, start by rendering as if full water block
|
// If waterlogged, start by rendering as if full water block
|
||||||
if (blocktype.isWaterlogged()) {
|
if (blocktype.isWaterlogged()) {
|
||||||
DynmapBlockState saved_type = blocktype;
|
DynmapBlockState saved_type = blocktype;
|
||||||
@ -527,7 +529,6 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
full_water = DynmapBlockState.getBaseStateByName(DynmapBlockState.WATER_BLOCK);
|
full_water = DynmapBlockState.getBaseStateByName(DynmapBlockState.WATER_BLOCK);
|
||||||
}
|
}
|
||||||
blocktype = full_water; // Switch to water state
|
blocktype = full_water; // Switch to water state
|
||||||
boolean done = true;
|
|
||||||
subalpha = -1;
|
subalpha = -1;
|
||||||
for (int i = 0; i < shaderstate.length; i++) {
|
for (int i = 0; i < shaderstate.length; i++) {
|
||||||
if(!shaderdone[i]) {
|
if(!shaderdone[i]) {
|
||||||
@ -535,20 +536,22 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
}
|
}
|
||||||
done = done && shaderdone[i];
|
done = done && shaderdone[i];
|
||||||
}
|
}
|
||||||
|
/* If all are done, we're out */
|
||||||
|
if (done) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
// Restore block type
|
// Restore block type
|
||||||
blocktype = saved_type;
|
blocktype = saved_type;
|
||||||
/* If all are done, we're out */
|
|
||||||
if (done)
|
|
||||||
return true;
|
|
||||||
nonairhit = true;
|
nonairhit = true;
|
||||||
}
|
}
|
||||||
|
short[] model;
|
||||||
RenderPatch[] patches = scalemodels.getPatchModel(blocktype);
|
RenderPatch[] patches = scalemodels.getPatchModel(blocktype);
|
||||||
/* If no patches, see if custom model */
|
/* If no patches, see if custom model */
|
||||||
if(patches == null) {
|
if (patches == null) {
|
||||||
CustomBlockModel cbm = scalemodels.getCustomBlockModel(blocktype);
|
CustomBlockModel cbm = scalemodels.getCustomBlockModel(blocktype);
|
||||||
if(cbm != null) { /* If found, see if cached already */
|
if (cbm != null) { /* If found, see if cached already */
|
||||||
patches = this.getCustomMesh();
|
patches = this.getCustomMesh();
|
||||||
if(patches == null) {
|
if (patches == null) {
|
||||||
patches = cbm.getMeshForBlock(mapiter);
|
patches = cbm.getMeshForBlock(mapiter);
|
||||||
this.setCustomMesh(patches);
|
this.setCustomMesh(patches);
|
||||||
}
|
}
|
||||||
@ -556,14 +559,12 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
}
|
}
|
||||||
/* Look up to see if block is modelled */
|
/* Look up to see if block is modelled */
|
||||||
if(patches != null) {
|
if(patches != null) {
|
||||||
return handlePatches(patches, shaderstate, shaderdone);
|
done = handlePatches(patches, shaderstate, shaderdone);
|
||||||
}
|
}
|
||||||
short[] model = scalemodels.getScaledModel(blocktype);
|
else if ((model = scalemodels.getScaledModel(blocktype)) != null) {
|
||||||
if(model != null) {
|
done = handleSubModel(model, shaderstate, shaderdone);
|
||||||
return handleSubModel(model, shaderstate, shaderdone);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
boolean done = true;
|
|
||||||
subalpha = -1;
|
subalpha = -1;
|
||||||
for(int i = 0; i < shaderstate.length; i++) {
|
for(int i = 0; i < shaderstate.length; i++) {
|
||||||
if(!shaderdone[i]) {
|
if(!shaderdone[i]) {
|
||||||
@ -571,13 +572,11 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
}
|
}
|
||||||
done = done && shaderdone[i];
|
done = done && shaderdone[i];
|
||||||
}
|
}
|
||||||
/* If all are done, we're out */
|
if (!done)
|
||||||
if(done)
|
|
||||||
return true;
|
|
||||||
nonairhit = true;
|
nonairhit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return done;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skip empty : return false if exited */
|
/* Skip empty : return false if exited */
|
||||||
|
@ -2727,7 +2727,7 @@ public class TexturePack {
|
|||||||
/* If clear-inside op, get out early */
|
/* If clear-inside op, get out early */
|
||||||
if((textop == COLORMOD_CLEARINSIDE) || (textop == COLORMOD_MULTTONED_CLEARINSIDE)) {
|
if((textop == COLORMOD_CLEARINSIDE) || (textop == COLORMOD_MULTTONED_CLEARINSIDE)) {
|
||||||
/* Check if previous block is same block type as we are: surface is transparent if it is */
|
/* Check if previous block is same block type as we are: surface is transparent if it is */
|
||||||
if (blk.matchingBaseState(lastblocktype)) {
|
if (blk.matchingBaseState(lastblocktype) || (blk.isWater() && lastblocktype.isWaterlogged())) {
|
||||||
rslt.setTransparent();
|
rslt.setTransparent();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3480,10 +3480,10 @@ public class TexturePack {
|
|||||||
textid = textid % COLORMOD_MULT_INTERNAL;
|
textid = textid % COLORMOD_MULT_INTERNAL;
|
||||||
BlockStep step = steps[patchidx];
|
BlockStep step = steps[patchidx];
|
||||||
/* If clear-inside op, get out early */
|
/* If clear-inside op, get out early */
|
||||||
if((mod == COLORMOD_CLEARINSIDE) || (mod == COLORMOD_MULTTONED_CLEARINSIDE)) {
|
if ((mod == COLORMOD_CLEARINSIDE) || (mod == COLORMOD_MULTTONED_CLEARINSIDE)) {
|
||||||
BlockStep dir = step.opposite();
|
BlockStep dir = step.opposite();
|
||||||
/* Check if previous block is same block type as we are: surface is transparent if it is */
|
/* Check if previous block is same block type as we are: surface is transparent if it is */
|
||||||
if (blk == mapiter.getBlockTypeAt(dir)) {
|
if (blk.matchingBaseState(mapiter.getBlockTypeAt(dir))) {
|
||||||
continue; // Skip: no texture
|
continue; // Skip: no texture
|
||||||
}
|
}
|
||||||
/* If water block, to watercolor tone op */
|
/* If water block, to watercolor tone op */
|
||||||
|
@ -1328,8 +1328,14 @@ boxblock:id=grass_path,ymax=0.9375
|
|||||||
# Kelp Plant
|
# Kelp Plant
|
||||||
patchblock:id=kelp,id=kelp_plant,patch0=VertX1Z0ToX0Z1,patch1=VertX1Z0ToX0Z1@90
|
patchblock:id=kelp,id=kelp_plant,patch0=VertX1Z0ToX0Z1,patch1=VertX1Z0ToX0Z1@90
|
||||||
|
|
||||||
# Turtle egg
|
# Turtle egg - single
|
||||||
boxblock:id=turtle_egg,xmin=0.3125,xmax=0.625,ymax=0.4375,zmin=0.25,zmax=0.5625
|
customblock:id=turtle_egg,data=0,data=1,data=2,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.3125:0:0.25/0.625:0.4275:0.5625
|
||||||
|
# Turtle egg - double
|
||||||
|
customblock:id=turtle_egg,data=3,data=4,data=5,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.3125:0:0.25/0.625:0.4275:0.5625,cuboid1=0.0625:0:0.4275/0.3125:0.3125:0.6875
|
||||||
|
# Turtle egg - triple
|
||||||
|
customblock:id=turtle_egg,data=6,data=7,data=8,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.3125:0:0.25/0.625:0.4275:0.5625,cuboid1=0.0625:0:0.4275/0.3125:0.3125:0.6875,cuboid2=0.6875:0:0.4275/0.875:0.25:0.625
|
||||||
|
# Turtle egg - quad
|
||||||
|
customblock:id=turtle_egg,data=9,data=10,data=11,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.3125:0:0.25/0.625:0.4275:0.5625,cuboid1=0.0625:0:0.4275/0.3125:0.3125:0.6875,cuboid2=0.6875:0:0.4275/0.875:0.25:0.625,cuboid3=0.4275:0:0.625/0.625:0.1875:0.8125
|
||||||
|
|
||||||
# Patch for coral wall fan - 22.5 degrees up
|
# Patch for coral wall fan - 22.5 degrees up
|
||||||
patch:id=CoralFan0u,Ox=0.0,Oy=0.4375,Oz=0.0,Ux=1.0,Uy=0.4375,Uz=0.0,Vx=0.0,Vy=0.9375,Vz=1.0
|
patch:id=CoralFan0u,Ox=0.0,Oy=0.4375,Oz=0.0,Ux=1.0,Uy=0.4375,Uz=0.0,Vx=0.0,Vy=0.9375,Vz=1.0
|
||||||
@ -1358,3 +1364,11 @@ patchblock:id=dead_tube_coral_wall_fan,id=dead_fire_coral_wall_fan,id=dead_brain
|
|||||||
# Coral fan on bottom
|
# Coral fan on bottom
|
||||||
patchblock:id=dead_tube_coral_fan,id=dead_fire_coral_fan,id=dead_brain_coral_fan,id=dead_horn_coral_fan,id=dead_bubble_coral_fan,id=tube_coral_fan,id=fire_coral_fan,id=brain_coral_fan,id=horn_coral_fan,id=bubble_coral_fan,data=0,data=1,patch0=CoralFan0f,patch1=CoralFan1f,patch2=CoralFan2f,patch3=CoralFan3f
|
patchblock:id=dead_tube_coral_fan,id=dead_fire_coral_fan,id=dead_brain_coral_fan,id=dead_horn_coral_fan,id=dead_bubble_coral_fan,id=tube_coral_fan,id=fire_coral_fan,id=brain_coral_fan,id=horn_coral_fan,id=bubble_coral_fan,data=0,data=1,patch0=CoralFan0f,patch1=CoralFan1f,patch2=CoralFan2f,patch3=CoralFan3f
|
||||||
|
|
||||||
|
# Sea pickle - single
|
||||||
|
customblock:id=sea_pickle,data=0,data=1,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.375:0:0.375/0.625:0.375:0.625
|
||||||
|
# Sea pickle - double
|
||||||
|
customblock:id=sea_pickle,data=2,data=3,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.1875:0:0.1875/0.4375:0.375:0.4375,cuboid1=0.5:0:0.5/0.75:0.25:0.75
|
||||||
|
# Sea pickle - triple
|
||||||
|
customblock:id=sea_pickle,data=4,data=5,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.375:0:0.5625/0.625:0.375:0.8125,cuboid1=0.125:0:0.125/0.375:0.25:0.375,cuboid2=0.5:0:0.25/0.75:0.375:0.5
|
||||||
|
# Sea pickle - quad
|
||||||
|
customblock:id=sea_pickle,data=6,data=7,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.125:0:0.125/0.375:0.375:0.375,cuboid1=0.5625:0:0.625/0.8125:0.25:0.875,cuboid2=0.5625:0:0.125/0.8125:0.375:0.375,cuboid3=0.125:0:0.5/0.375:0.4275:0.75
|
||||||
|
@ -1628,7 +1628,7 @@ block:id=prismarine_bricks,allfaces=0:prismarine_bricks,stdrot=true
|
|||||||
# Dark Prismarine
|
# Dark Prismarine
|
||||||
block:id=dark_prismarine,allfaces=0:dark_prismarine,stdrot=true
|
block:id=dark_prismarine,allfaces=0:dark_prismarine,stdrot=true
|
||||||
# Sea Lantern
|
# Sea Lantern
|
||||||
block:id=sea_lantern,data=*,allfaces=0:sea_lantern,stdrot=true
|
block:id=sea_lantern,allfaces=0:sea_lantern,stdrot=true
|
||||||
|
|
||||||
|
|
||||||
# Red Sandstone
|
# Red Sandstone
|
||||||
@ -2006,6 +2006,8 @@ texture:id=dried_kelp_side
|
|||||||
texture:id=dried_kelp_top
|
texture:id=dried_kelp_top
|
||||||
texture:id=dried_kelp_bottom
|
texture:id=dried_kelp_bottom
|
||||||
texture:id=turtle_egg
|
texture:id=turtle_egg
|
||||||
|
texture:id=turtle_egg_slightly_cracked
|
||||||
|
texture:id=turtle_egg_very_cracked
|
||||||
texture:id=dead_tube_coral_block
|
texture:id=dead_tube_coral_block
|
||||||
texture:id=dead_brain_coral_block
|
texture:id=dead_brain_coral_block
|
||||||
texture:id=dead_bubble_coral_block
|
texture:id=dead_bubble_coral_block
|
||||||
@ -2027,7 +2029,7 @@ texture:id=bubble_coral_fan
|
|||||||
texture:id=fire_coral_fan
|
texture:id=fire_coral_fan
|
||||||
texture:id=horn_coral_fan
|
texture:id=horn_coral_fan
|
||||||
texture:id=blue_ice
|
texture:id=blue_ice
|
||||||
tecture:id=sea_pickles
|
texture:id=sea_pickle
|
||||||
|
|
||||||
# Kelp
|
# Kelp
|
||||||
block:id=kelp,patch0-1=1000:kelp,stdrot=true,transparency=TRANSPARENT
|
block:id=kelp,patch0-1=1000:kelp,stdrot=true,transparency=TRANSPARENT
|
||||||
@ -2036,10 +2038,14 @@ block:id=kelp,patch0-1=1000:kelp,stdrot=true,transparency=TRANSPARENT
|
|||||||
block:id=kelp,patch0-1=1000:kelp_plant,stdrot=true,transparency=TRANSPARENT
|
block:id=kelp,patch0-1=1000:kelp_plant,stdrot=true,transparency=TRANSPARENT
|
||||||
|
|
||||||
# Dried kelp block
|
# Dried kelp block
|
||||||
block:id=dried_kelp,allsides=0:dried_kelp_side,top=0:dried_kelp_top,bottom=0:dried_kelp_bottom,stdrot=true
|
block:id=dried_kelp_block,allsides=0:dried_kelp_side,top=0:dried_kelp_top,bottom=0:dried_kelp_bottom,stdrot=true
|
||||||
|
|
||||||
# Turtle egg
|
# Turtle egg
|
||||||
block:id=turtle_egg,allfaces=0:turtle_egg,stdrot=true,transparency=TRANSPARENT
|
block:id=turtle_egg,data=0,data=3,data=6,data=9,patch0-5=0:turtle_egg,transparency=TRANSPARENT
|
||||||
|
# Turtle egg - slightly cracked
|
||||||
|
block:id=turtle_egg,data=1,data=4,data=7,data=10,patch0-5=0:turtle_egg_slightly_cracked,transparency=TRANSPARENT
|
||||||
|
# Turtle egg - very cracked
|
||||||
|
block:id=turtle_egg,data=2,data=5,data=8,data=11,patch0-5=0:turtle_egg_very_cracked,transparency=TRANSPARENT
|
||||||
|
|
||||||
# Dead tube coral block
|
# Dead tube coral block
|
||||||
block:id=dead_tube_coral_block,allfaces=0:dead_tube_coral_block,stdrot=true
|
block:id=dead_tube_coral_block,allfaces=0:dead_tube_coral_block,stdrot=true
|
||||||
@ -2131,17 +2137,11 @@ block:id=fire_coral_fan,patch0-3=0:fire_coral_fan,stdrot=true,transparency=TRANS
|
|||||||
# Horn coral fan
|
# Horn coral fan
|
||||||
block:id=horn_coral_fan,patch0-3=0:horn_coral_fan,stdrot=true,transparency=TRANSPARENT
|
block:id=horn_coral_fan,patch0-3=0:horn_coral_fan,stdrot=true,transparency=TRANSPARENT
|
||||||
|
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8564: blk=minecraft:sea_pickle, idx=0, state=pickles=1,waterlogged=true
|
# Sea pickle
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8565: blk=minecraft:sea_pickle, idx=1, state=pickles=1,waterlogged=false
|
block:id=sea_pickle,patch0-5=0:sea_pickle,transparency=TRANSPARENT
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8566: blk=minecraft:sea_pickle, idx=2, state=pickles=2,waterlogged=true
|
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8567: blk=minecraft:sea_pickle, idx=3, state=pickles=2,waterlogged=false
|
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8568: blk=minecraft:sea_pickle, idx=4, state=pickles=3,waterlogged=true
|
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8569: blk=minecraft:sea_pickle, idx=5, state=pickles=3,waterlogged=false
|
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8570: blk=minecraft:sea_pickle, idx=6, state=pickles=4,waterlogged=true
|
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8571: blk=minecraft:sea_pickle, idx=7, state=pickles=4,waterlogged=false
|
|
||||||
|
|
||||||
# Blue Ice
|
# Blue Ice
|
||||||
block:id=bloe_ice,allfaces=0:blue_ice,stdrot=true
|
block:id=blue_ice,allfaces=0:blue_ice,stdrot=true
|
||||||
|
|
||||||
#[18:55:16] [Server thread/INFO]: [dynmap] 8573: blk=minecraft:conduit, idx=0, state=
|
#[18:55:16] [Server thread/INFO]: [dynmap] 8573: blk=minecraft:conduit, idx=0, state=
|
||||||
|
|
||||||
|
@ -124,7 +124,6 @@ public class DynmapBlockState {
|
|||||||
matchflags |= isWater(blockName) ? MATCH_WATER : 0;
|
matchflags |= isWater(blockName) ? MATCH_WATER : 0;
|
||||||
matchflags |= (blockName.equals(SNOW_BLOCK) || blockName.equals(SNOW_LAYER_BLOCK)) ? MATCH_SNOW : 0;
|
matchflags |= (blockName.equals(SNOW_BLOCK) || blockName.equals(SNOW_LAYER_BLOCK)) ? MATCH_SNOW : 0;
|
||||||
matchflags |= blockName.equals(GRASS_BLOCK) ? MATCH_GRASS : 0;
|
matchflags |= blockName.equals(GRASS_BLOCK) ? MATCH_GRASS : 0;
|
||||||
matchflags |= stateName.contains("waterlogged=true") ? MATCH_WATERLOGGED : 0;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Get state for same base block with given index
|
* Get state for same base block with given index
|
||||||
@ -281,6 +280,12 @@ public class DynmapBlockState {
|
|||||||
public final boolean isWaterlogged() {
|
public final boolean isWaterlogged() {
|
||||||
return (matchflags & MATCH_WATERLOGGED) != 0;
|
return (matchflags & MATCH_WATERLOGGED) != 0;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Set state to be waterlogged (block filled with water)
|
||||||
|
*/
|
||||||
|
public final void setWaterlogged() {
|
||||||
|
matchflags |= MATCH_WATERLOGGED;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Test for matching blockname
|
* Test for matching blockname
|
||||||
*/
|
*/
|
||||||
|
@ -28,6 +28,7 @@ import org.dynmap.utils.MapChunkCache;
|
|||||||
import org.dynmap.utils.Polygon;
|
import org.dynmap.utils.Polygon;
|
||||||
import org.dynmap.bukkit.helper.v113.MapChunkCache113;
|
import org.dynmap.bukkit.helper.v113.MapChunkCache113;
|
||||||
import net.minecraft.server.v1_13_R1.Block;
|
import net.minecraft.server.v1_13_R1.Block;
|
||||||
|
import net.minecraft.server.v1_13_R1.BlockFluids;
|
||||||
import net.minecraft.server.v1_13_R1.IBlockData;
|
import net.minecraft.server.v1_13_R1.IBlockData;
|
||||||
import net.minecraft.server.v1_13_R1.IBlockState;
|
import net.minecraft.server.v1_13_R1.IBlockState;
|
||||||
|
|
||||||
@ -110,9 +111,12 @@ public class BukkitVersionHelperSpigot113 extends BukkitVersionHelperCB {
|
|||||||
sb = fname.substring(off1+1, off2);
|
sb = fname.substring(off1+1, off2);
|
||||||
}
|
}
|
||||||
DynmapBlockState bs = new DynmapBlockState(lastbs, idx, bname, sb);
|
DynmapBlockState bs = new DynmapBlockState(lastbs, idx, bname, sb);
|
||||||
|
if ((!bd.s().e()) && ((bd.getBlock() instanceof BlockFluids) == false)) { // Test if fluid type for block is not empty
|
||||||
|
bs.setWaterlogged();
|
||||||
|
}
|
||||||
dataToState.put(bd, bs);
|
dataToState.put(bd, bs);
|
||||||
lastBlockState.put(bname, (lastbs == null) ? bs : lastbs);
|
lastBlockState.put(bname, (lastbs == null) ? bs : lastbs);
|
||||||
Log.info(i + ": blk=" + bname + ", idx=" + idx + ", state=" + sb);
|
Log.info(i + ": blk=" + bname + ", idx=" + idx + ", state=" + sb + ", waterlogged=" + bs.isWaterlogged());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user