From ab733a6000cb094ce8845e8d95d08f5a910fea07 Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Sat, 25 Mar 2017 16:21:37 -0500 Subject: [PATCH] Enable Shadow Rendering for full blocks, Adds #253 --- .../chiseledblock/BlockChiseled.java | 24 ++++++++++++++--- .../TileEntityBlockChiseled.java | 10 +++++++ .../mod/chiselsandbits/core/ClientSide.java | 26 +++++++++++++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java b/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java index 71bd9ff6..33f20089 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java @@ -27,6 +27,7 @@ import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.client.particle.ParticleManager; @@ -69,6 +70,7 @@ public class BlockChiseled extends Block implements ITileEntityProvider, IMultiS public static final IUnlistedProperty UProperty_VoxelNeighborState = new UnlistedVoxelNeighborState(); public static final IUnlistedProperty UProperty_VoxelBlob = new UnlistedVoxelBlob(); public static final IUnlistedProperty UProperty_Primary_BlockState = new UnlistedBlockStateID(); + public static final PropertyBool LProperty_FullBlock = PropertyBool.create( "full_block" ); public final String name; @@ -226,6 +228,8 @@ public BlockChiseled( setHardness( 1 ); setHarvestLevel( "pickaxe", 0 ); name = BlockName; + + setDefaultState( getDefaultState().withProperty( LProperty_FullBlock, false ) ); } private void configureSound( @@ -265,6 +269,20 @@ else if ( mat == Material.GLASS ) } } + @Override + public int getMetaFromState( + IBlockState state ) + { + return state.getValue( LProperty_FullBlock ) ? 1 : 0; + } + + @Override + public IBlockState getStateFromMeta( + int meta ) + { + return getDefaultState().withProperty( LProperty_FullBlock, meta == 1 ); + } + @Override public boolean canRenderInLayer( final BlockRenderLayer layer ) @@ -310,14 +328,14 @@ public float getAmbientOcclusionLightValue( public boolean isOpaqueCube( final IBlockState state ) { - return false; + return state.getValue( LProperty_FullBlock ); } @Override public boolean isFullCube( final IBlockState state ) { - return false; + return state.getValue( LProperty_FullBlock ); } @Override @@ -488,7 +506,7 @@ public ItemStack getPickBlock( @Override protected BlockStateContainer createBlockState() { - return new ExtendedBlockState( this, new IProperty[0], new IUnlistedProperty[] { UProperty_VoxelBlob, UProperty_Primary_BlockState, UProperty_VoxelNeighborState } ); + return new ExtendedBlockState( this, new IProperty[] { LProperty_FullBlock }, new IUnlistedProperty[] { UProperty_VoxelBlob, UProperty_Primary_BlockState, UProperty_VoxelNeighborState } ); } @Override diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java b/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java index ef135753..02c0d3a3 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java @@ -583,6 +583,11 @@ public boolean updateBlob( if ( oldLV != getLightValue() || oldNC != isNormalCube() ) { worldObj.checkLight( pos ); + + // update block state to reflect lighting characteristics + IBlockState state = worldObj.getBlockState( pos ); + if ( state.isFullCube() != isNormalCube && state.getBlock() instanceof BlockChiseled ) + worldObj.setBlockState( pos, state.withProperty( BlockChiseled.LProperty_FullBlock, isNormalCube ) ); } if ( oldSides != sideState ) @@ -685,6 +690,11 @@ else if ( common.mostCommonState != 0 ) if ( olv != lv || oldNC != nc ) { worldObj.checkLight( pos ); + + // update block state to reflect lighting characteristics + IBlockState state = worldObj.getBlockState( pos ); + if ( state.isFullCube() != isNormalCube && state.getBlock() instanceof BlockChiseled ) + worldObj.setBlockState( pos, state.withProperty( BlockChiseled.LProperty_FullBlock, isNormalCube ) ); } } diff --git a/src/main/java/mod/chiselsandbits/core/ClientSide.java b/src/main/java/mod/chiselsandbits/core/ClientSide.java index 3bef3c24..044d256d 100644 --- a/src/main/java/mod/chiselsandbits/core/ClientSide.java +++ b/src/main/java/mod/chiselsandbits/core/ClientSide.java @@ -3,6 +3,7 @@ import java.awt.image.BufferedImage; import java.io.IOException; import java.util.HashMap; +import java.util.Map; import java.util.Random; import java.util.concurrent.TimeUnit; @@ -81,6 +82,7 @@ import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.IStateMapper; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureUtil; @@ -328,6 +330,7 @@ public ModelResourceLocation getModelLocation( { final Item item = Item.getItemFromBlock( blk ); registerMesh( item, 0, new ModelResourceLocation( new ResourceLocation( modId, "block_chiseled" ), "inventory" ) ); + registerMesh( blk, new ModelResourceLocation( new ResourceLocation( modId, "block_chiseled" ), "" ) ); } final BlockBitTank bitTank = ChiselsAndBits.getBlocks().blockBitTank; @@ -348,6 +351,29 @@ private void registerMesh( } } + private void registerMesh( + final Block blk, + final ModelResourceLocation loctaion ) + { + if ( blk != null ) + { + ModelLoader.setCustomStateMapper( blk, new IStateMapper() { + + @Override + public Map putStateModelLocations( + Block blockIn ) + { + Map map = new HashMap(); + + for ( IBlockState o : blk.getBlockState().getValidStates() ) + map.put( o, loctaion ); + + return map; + } + }); + } + } + public static TextureAtlasSprite undoIcon; public static TextureAtlasSprite redoIcon; public static TextureAtlasSprite trashIcon;