From f9ef62923e5d38d71ecc0a851689ced0cbe79079 Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Wed, 30 Nov 2016 23:16:16 -0600 Subject: [PATCH] Cached State Conversions and some other tweaks, fixes #193 --- .../chiselsandbits/bitbag/BagInventory.java | 4 +- .../bittank/TileEntityBitTank.java | 5 +- .../chiseledblock/BlockBitInfo.java | 4 +- .../chiseledblock/BlockChiseled.java | 28 ++++-- .../chiseledblock/NBTBlobConverter.java | 8 +- .../TileEntityBlockChiseled.java | 10 +-- .../chiseledblock/data/VoxelBlob.java | 5 +- .../CrossWorldBlobSerializer.java | 5 +- .../CrossWorldBlobSerializerLegacy.java | 5 +- .../client/BlockColorChisled.java | 4 +- .../chiselsandbits/client/ItemColorBits.java | 5 +- .../client/ItemColorChisled.java | 3 +- .../client/ItemColorPatterns.java | 3 +- .../client/culling/MCCullTest.java | 6 +- .../client/culling/TransparentCullTest.java | 4 +- .../mod/chiselsandbits/core/ClientSide.java | 10 +-- .../chiselsandbits/core/api/BitAccess.java | 3 +- .../mod/chiselsandbits/core/api/BitBrush.java | 4 +- .../core/api/ChiselAndBitsAPI.java | 11 ++- .../crafting/MirrorTransferCrafting.java | 4 +- .../crafting/NegativeInversionCrafting.java | 6 +- .../mod/chiselsandbits/debug/DebugAction.java | 3 +- .../mod/chiselsandbits/helpers/ModUtil.java | 25 ++++++ .../chiselsandbits/helpers/StateLookup.java | 61 +++++++++++++ .../mod/chiselsandbits/items/ItemChisel.java | 4 +- .../chiselsandbits/items/ItemChiseledBit.java | 6 +- .../items/ItemNegativePrint.java | 5 +- .../chiseledblock/ChiseledBlockBaked.java | 86 ++++++++++--------- .../render/helpers/ModelUtil.java | 5 +- 29 files changed, 216 insertions(+), 116 deletions(-) create mode 100644 src/main/java/mod/chiselsandbits/helpers/StateLookup.java diff --git a/src/main/java/mod/chiselsandbits/bitbag/BagInventory.java b/src/main/java/mod/chiselsandbits/bitbag/BagInventory.java index b1f1da82..4fcbfcd3 100644 --- a/src/main/java/mod/chiselsandbits/bitbag/BagInventory.java +++ b/src/main/java/mod/chiselsandbits/bitbag/BagInventory.java @@ -10,9 +10,9 @@ import mod.chiselsandbits.core.ChiselsAndBits; import mod.chiselsandbits.helpers.LocalStrings; +import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.items.ItemBitBag; import mod.chiselsandbits.items.ItemChiseledBit; -import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -351,7 +351,7 @@ public List listContents( final ItemStack is = getStackInSlot( x ); if ( is != null ) { - final IBlockState state = Block.getStateById( ItemChiseledBit.getStackState( is ) ); + final IBlockState state = ModUtil.getStateById( ItemChiseledBit.getStackState( is ) ); if ( state == null ) { continue; diff --git a/src/main/java/mod/chiselsandbits/bittank/TileEntityBitTank.java b/src/main/java/mod/chiselsandbits/bittank/TileEntityBitTank.java index 0ed54829..2a7e1e93 100644 --- a/src/main/java/mod/chiselsandbits/bittank/TileEntityBitTank.java +++ b/src/main/java/mod/chiselsandbits/bittank/TileEntityBitTank.java @@ -5,7 +5,6 @@ import mod.chiselsandbits.helpers.DeprecationHelper; import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.items.ItemChiseledBit; -import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -164,7 +163,7 @@ public ItemStack getFluidBitStack( return null; } - return ItemChiseledBit.createStack( Block.getStateId( liquid.getBlock().getDefaultState() ), amount, false ); + return ItemChiseledBit.createStack( ModUtil.getStateId( liquid.getBlock().getDefaultState() ), amount, false ); } @Override @@ -176,7 +175,7 @@ public ItemStack insertItem( if ( stack != null && stack.getItem() instanceof ItemChiseledBit ) { final int state = ItemChiseledBit.getStackState( stack ); - final IBlockState blk = Block.getStateById( state ); + final IBlockState blk = ModUtil.getStateById( state ); Fluid f = null; for ( final Fluid fl : FluidRegistry.getRegisteredFluids().values() ) diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/BlockBitInfo.java b/src/main/java/mod/chiselsandbits/chiseledblock/BlockBitInfo.java index 5b53e5d3..9db0f739 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/BlockBitInfo.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/BlockBitInfo.java @@ -100,7 +100,7 @@ public static void addFluidBlock( { try { - fluidStates.put( Block.getStateId( state ), fluid ); + fluidStates.put( ModUtil.getStateId( state ), fluid ); } catch ( final Throwable t ) { @@ -328,7 +328,7 @@ public static BlockBitInfo createFromState( reflectBlock.getExplosionResistance( null, null, null, null ); final boolean test_d = getDeclaringClass( blkClass, reflectBlock.MethodName, World.class, BlockPos.class, Entity.class, Explosion.class ) == Block.class; - final boolean isFluid = fluidStates.containsKey( Block.getStateId( state ) ); + final boolean isFluid = fluidStates.containsKey( ModUtil.getStateId( state ) ); // is it perfect? if ( test_a && test_b && test_c && test_d && !isFluid ) diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java b/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java index ce8293f3..ba608a34 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java @@ -272,17 +272,27 @@ public boolean canRenderInLayer( return true; } - public TileEntityBlockChiseled getTileEntity( + static ExceptionNoTileEntity noTileEntity = new ExceptionNoTileEntity(); + + public static TileEntityBlockChiseled getTileEntity( final TileEntity te ) throws ExceptionNoTileEntity { - if ( te instanceof TileEntityBlockChiseled ) + if ( te == null ) + { + throw noTileEntity; + } + + try { return (TileEntityBlockChiseled) te; } - throw new ExceptionNoTileEntity(); + catch ( final ClassCastException e ) + { + throw noTileEntity; + } } - public TileEntityBlockChiseled getTileEntity( + public static TileEntityBlockChiseled getTileEntity( final IBlockAccess world, final BlockPos pos ) throws ExceptionNoTileEntity { @@ -524,7 +534,7 @@ public boolean addLandingEffects( try { final IBlockState texture = getTileEntity( worldObj, blockPosition ).getBlockState( Blocks.STONE ); - worldObj.spawnParticle( EnumParticleTypes.BLOCK_DUST, entity.posX, entity.posY, entity.posZ, numberOfParticles, 0.0D, 0.0D, 0.0D, 0.15000000596046448D, new int[] { Block.getStateId( texture ) } ); + worldObj.spawnParticle( EnumParticleTypes.BLOCK_DUST, entity.posX, entity.posY, entity.posZ, numberOfParticles, 0.0D, 0.0D, 0.0D, 0.15000000596046448D, new int[] { ModUtil.getStateId( texture ) } ); return true; } catch ( final ExceptionNoTileEntity e ) @@ -940,13 +950,13 @@ public static boolean replaceWithChisled( { BlockChiseled blk = ChiselsAndBits.getBlocks().getConversion( originalState ); - int BlockID = Block.getStateId( actingState ); + int BlockID = ModUtil.getStateId( actingState ); if ( isAir ) { - actingState = Block.getStateById( fragmentBlockStateID ); + actingState = ModUtil.getStateById( fragmentBlockStateID ); target = actingState.getBlock(); - BlockID = Block.getStateId( actingState ); + BlockID = ModUtil.getStateId( actingState ); blk = ChiselsAndBits.getBlocks().getConversion( actingState ); // its still air tho.. actingState = Blocks.AIR.getDefaultState(); @@ -993,7 +1003,7 @@ public IBlockState getCommonState( final VoxelBlob vb = data.getVoxelBlob(); if ( vb != null ) { - return Block.getStateById( vb.getVoxelStats().mostCommonState ); + return ModUtil.getStateById( vb.getVoxelStats().mostCommonState ); } } diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/NBTBlobConverter.java b/src/main/java/mod/chiselsandbits/chiseledblock/NBTBlobConverter.java index c938c81a..ac94c65a 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/NBTBlobConverter.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/NBTBlobConverter.java @@ -57,7 +57,7 @@ public int getPrimaryBlockStateID() public IBlockState getPrimaryBlockState() { - return Block.getStateById( primaryBlockState ); + return ModUtil.getStateById( primaryBlockState ); } public VoxelBlobStateReference getVoxelRef( @@ -89,7 +89,7 @@ public NBTBlobConverter( sideState = tile.sideState; lightValue = tile.getLightValue(); isNormalCube = tile.isNormalCube; - primaryBlockState = Block.getStateId( tile.getBlockState( Blocks.COBBLESTONE ) ); + primaryBlockState = ModUtil.getStateId( tile.getBlockState( Blocks.COBBLESTONE ) ); voxelBlobRef = tile.getBlobStateReference(); format = voxelBlobRef == null ? -1 : voxelBlobRef.getFormat(); } @@ -97,7 +97,7 @@ public NBTBlobConverter( public void fillWith( final IBlockState state ) { - voxelBlobRef = new VoxelBlobStateReference( Block.getStateId( state ), 0 ); + voxelBlobRef = new VoxelBlobStateReference( ModUtil.getStateId( state ), 0 ); updateFromBlob(); } @@ -175,7 +175,7 @@ public final boolean readChisleData( if ( primaryBlockState == 0 ) { // if load fails default to cobble stone... - primaryBlockState = Block.getStateId( Blocks.COBBLESTONE.getDefaultState() ); + primaryBlockState = ModUtil.getStateId( Blocks.COBBLESTONE.getDefaultState() ); } voxelBlobRef = new VoxelBlobStateReference( v, 0 ); diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java b/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java index 40b0280e..8aab1803 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java @@ -231,7 +231,7 @@ public IBlockState getBlockState( if ( stateID != null ) { - final IBlockState state = Block.getStateById( stateID ); + final IBlockState state = ModUtil.getStateById( stateID ); if ( state != null ) { return state; @@ -432,14 +432,14 @@ public void func_189667_a( public void fillWith( final IBlockState blockType ) { - final int ref = Block.getStateId( blockType ); + final int ref = ModUtil.getStateId( blockType ); sideState = 0xff; lightlevel = DeprecationHelper.getLightValue( blockType ); isNormalCube = ModUtil.isNormalCube( blockType ); IExtendedBlockState state = getBasicState() - .withProperty( BlockChiseled.UProperty_VoxelBlob, new VoxelBlobStateReference( Block.getStateId( blockType ), getPositionRandom( pos ) ) ); + .withProperty( BlockChiseled.UProperty_VoxelBlob, new VoxelBlobStateReference( ModUtil.getStateId( blockType ), getPositionRandom( pos ) ) ); final VoxelNeighborRenderTracker tracker = state.getValue( BlockChiseled.UProperty_VoxelNeighborState ); @@ -491,7 +491,7 @@ public VoxelBlob getBlob() if ( vb == null ) { vb = new VoxelBlob(); - vb.fill( Block.getStateId( Blocks.COBBLESTONE.getDefaultState() ) ); + vb.fill( ModUtil.getStateId( Blocks.COBBLESTONE.getDefaultState() ) ); } } else @@ -632,7 +632,7 @@ public void setBlob( setState( getBasicState() .withProperty( BlockChiseled.UProperty_VoxelBlob, new VoxelBlobStateReference( common.mostCommonState, getPositionRandom( pos ) ) ) ); - final IBlockState newState = Block.getStateById( common.mostCommonState ); + final IBlockState newState = ModUtil.getStateById( common.mostCommonState ); if ( !MinecraftForge.EVENT_BUS.post( new EventFullBlockRestoration( worldObj, pos, newState ) ) ) { worldObj.setBlockState( pos, newState, triggerUpdates ? 3 : 0 ); diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/data/VoxelBlob.java b/src/main/java/mod/chiselsandbits/chiseledblock/data/VoxelBlob.java index eae17ac5..8364428e 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/data/VoxelBlob.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/data/VoxelBlob.java @@ -87,6 +87,7 @@ public static synchronized void clearCache() if ( FMLCommonHandler.instance().getSide() == Side.CLIENT ) { updateCacheClient(); + ModUtil.cacheFastStates(); } } @@ -108,7 +109,7 @@ private static void updateCacheClient() for ( final IBlockState state : block.getBlockState().getValidStates() ) { - int id = Block.getStateId( state ); + final int id = ModUtil.getStateId( state ); if ( state == null || state.getBlock() != block ) { // reverse mapping is broken, so just skip over this state. @@ -670,7 +671,7 @@ public BlobStats getVoxelStats() cb.mostCommonStateTotal = quantity; } - final IBlockState state = Block.getStateById( r ); + final IBlockState state = ModUtil.getStateById( r ); if ( state != null && r != 0 ) { nonAirBits += quantity; diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/serialization/CrossWorldBlobSerializer.java b/src/main/java/mod/chiselsandbits/chiseledblock/serialization/CrossWorldBlobSerializer.java index b16fcb44..f1fb722c 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/serialization/CrossWorldBlobSerializer.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/serialization/CrossWorldBlobSerializer.java @@ -8,6 +8,7 @@ import mod.chiselsandbits.chiseledblock.data.VoxelBlob; import mod.chiselsandbits.core.Log; +import mod.chiselsandbits.helpers.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.IBlockState; @@ -86,7 +87,7 @@ protected int readStateID( } } - return Block.getStateId( state ); + return ModUtil.getStateId( state ); } @SuppressWarnings( { "unchecked", "rawtypes" } ) @@ -119,7 +120,7 @@ protected void writeStateID( final PacketBuffer buffer, final int key ) { - final IBlockState state = Block.getStateById( key ); + final IBlockState state = ModUtil.getStateById( key ); final Block blk = state.getBlock(); String sname = "air?"; diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/serialization/CrossWorldBlobSerializerLegacy.java b/src/main/java/mod/chiselsandbits/chiseledblock/serialization/CrossWorldBlobSerializerLegacy.java index a4894e9b..f7e0077e 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/serialization/CrossWorldBlobSerializerLegacy.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/serialization/CrossWorldBlobSerializerLegacy.java @@ -2,6 +2,7 @@ import mod.chiselsandbits.chiseledblock.data.VoxelBlob; import mod.chiselsandbits.helpers.DeprecationHelper; +import mod.chiselsandbits.helpers.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.network.PacketBuffer; @@ -42,7 +43,7 @@ protected int readStateID( return 0; } - return Block.getStateId( state ); + return ModUtil.getStateId( state ); } @Override @@ -50,7 +51,7 @@ protected void writeStateID( final PacketBuffer buffer, final int key ) { - final IBlockState state = Block.getStateById( key ); + final IBlockState state = ModUtil.getStateById( key ); final Block blk = state.getBlock(); final String name = Block.REGISTRY.getNameForObject( blk ).toString(); diff --git a/src/main/java/mod/chiselsandbits/client/BlockColorChisled.java b/src/main/java/mod/chiselsandbits/client/BlockColorChisled.java index b1ade1bc..8183959e 100644 --- a/src/main/java/mod/chiselsandbits/client/BlockColorChisled.java +++ b/src/main/java/mod/chiselsandbits/client/BlockColorChisled.java @@ -1,6 +1,6 @@ package mod.chiselsandbits.client; -import net.minecraft.block.Block; +import mod.chiselsandbits.helpers.ModUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.color.IBlockColor; @@ -17,7 +17,7 @@ public int colorMultiplier( final BlockPos pos, final int tint ) { - final IBlockState tstate = Block.getStateById( tint ); + final IBlockState tstate = ModUtil.getStateById( tint ); return Minecraft.getMinecraft().getBlockColors().colorMultiplier( tstate, worldIn, pos, 0 ); } diff --git a/src/main/java/mod/chiselsandbits/client/ItemColorBits.java b/src/main/java/mod/chiselsandbits/client/ItemColorBits.java index e74f8bf8..c88a6cef 100644 --- a/src/main/java/mod/chiselsandbits/client/ItemColorBits.java +++ b/src/main/java/mod/chiselsandbits/client/ItemColorBits.java @@ -2,6 +2,7 @@ import mod.chiselsandbits.chiseledblock.BlockBitInfo; import mod.chiselsandbits.core.ClientSide; +import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.items.ItemChiseledBit; import mod.chiselsandbits.render.helpers.ModelUtil; import net.minecraft.block.Block; @@ -20,7 +21,7 @@ public int getColorFromItemstack( { if ( ClientSide.instance.holdingShift() ) { - final IBlockState state = Block.getStateById( tint ); + final IBlockState state = ModUtil.getStateById( tint ); final Block blk = state.getBlock(); final Item i = Item.getItemFromBlock( blk ); @@ -32,7 +33,7 @@ public int getColorFromItemstack( return 0xffffff; } - final IBlockState state = Block.getStateById( ItemChiseledBit.getStackState( stack ) ); + final IBlockState state = ModUtil.getStateById( ItemChiseledBit.getStackState( stack ) ); return state == null ? 0xffffffff : BlockBitInfo.getColorFor( state, tint ); } diff --git a/src/main/java/mod/chiselsandbits/client/ItemColorChisled.java b/src/main/java/mod/chiselsandbits/client/ItemColorChisled.java index 20cd8340..cc1e12d2 100644 --- a/src/main/java/mod/chiselsandbits/client/ItemColorChisled.java +++ b/src/main/java/mod/chiselsandbits/client/ItemColorChisled.java @@ -1,5 +1,6 @@ package mod.chiselsandbits.client; +import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.render.helpers.ModelUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -15,7 +16,7 @@ public int getColorFromItemstack( final ItemStack stack, final int tint ) { - final IBlockState state = Block.getStateById( tint ); + final IBlockState state = ModUtil.getStateById( tint ); final Block blk = state.getBlock(); final Item i = Item.getItemFromBlock( blk ); diff --git a/src/main/java/mod/chiselsandbits/client/ItemColorPatterns.java b/src/main/java/mod/chiselsandbits/client/ItemColorPatterns.java index ef772b4b..1cf63a59 100644 --- a/src/main/java/mod/chiselsandbits/client/ItemColorPatterns.java +++ b/src/main/java/mod/chiselsandbits/client/ItemColorPatterns.java @@ -1,6 +1,7 @@ package mod.chiselsandbits.client; import mod.chiselsandbits.core.ClientSide; +import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.render.helpers.ModelUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -18,7 +19,7 @@ public int getColorFromItemstack( { if ( ClientSide.instance.holdingShift() ) { - final IBlockState state = Block.getStateById( tint ); + final IBlockState state = ModUtil.getStateById( tint ); final Block blk = state.getBlock(); final Item i = Item.getItemFromBlock( blk ); diff --git a/src/main/java/mod/chiselsandbits/client/culling/MCCullTest.java b/src/main/java/mod/chiselsandbits/client/culling/MCCullTest.java index c8191643..20931546 100644 --- a/src/main/java/mod/chiselsandbits/client/culling/MCCullTest.java +++ b/src/main/java/mod/chiselsandbits/client/culling/MCCullTest.java @@ -1,6 +1,7 @@ package mod.chiselsandbits.client.culling; import mod.chiselsandbits.chiseledblock.BlockBitInfo; +import mod.chiselsandbits.helpers.ModUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Biomes; import net.minecraft.init.Blocks; @@ -22,7 +23,6 @@ public class MCCullTest implements ICullTest, IBlockAccess private IBlockState a; private IBlockState b; - @SuppressWarnings( "deprecation" ) @Override public boolean isVisible( final int mySpot, @@ -33,12 +33,12 @@ public boolean isVisible( return false; } - a = net.minecraft.block.Block.BLOCK_STATE_IDS.getByValue( mySpot ); + a = ModUtil.getStateById( mySpot ); if ( a == null ) { a = Blocks.AIR.getDefaultState(); } - b = net.minecraft.block.Block.BLOCK_STATE_IDS.getByValue( secondSpot ); + b = ModUtil.getStateById( secondSpot ); if ( b == null ) { b = Blocks.AIR.getDefaultState(); diff --git a/src/main/java/mod/chiselsandbits/client/culling/TransparentCullTest.java b/src/main/java/mod/chiselsandbits/client/culling/TransparentCullTest.java index a85bb9e6..fc0c5001 100644 --- a/src/main/java/mod/chiselsandbits/client/culling/TransparentCullTest.java +++ b/src/main/java/mod/chiselsandbits/client/culling/TransparentCullTest.java @@ -2,7 +2,7 @@ import mod.chiselsandbits.chiseledblock.BlockBitInfo; import mod.chiselsandbits.chiseledblock.data.VoxelType; -import net.minecraft.block.Block; +import mod.chiselsandbits.helpers.ModUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.util.BlockRenderLayer; @@ -23,7 +23,7 @@ public boolean isVisible( final VoxelType myType = BlockBitInfo.getTypeFromStateID( mySpot ); final VoxelType secondType = BlockBitInfo.getTypeFromStateID( secondSpot ); - final IBlockState state = Block.getStateById( secondSpot ); + final IBlockState state = ModUtil.getStateById( secondSpot ); final boolean isTranslusent = state.getBlock().canRenderInLayer( state, BlockRenderLayer.TRANSLUCENT ) || state.getBlock().canRenderInLayer( state, BlockRenderLayer.CUTOUT ) || state.getBlock().canRenderInLayer( state, BlockRenderLayer.CUTOUT_MIPPED ); diff --git a/src/main/java/mod/chiselsandbits/core/ClientSide.java b/src/main/java/mod/chiselsandbits/core/ClientSide.java index c8aef9f9..dfef4ed6 100644 --- a/src/main/java/mod/chiselsandbits/core/ClientSide.java +++ b/src/main/java/mod/chiselsandbits/core/ClientSide.java @@ -1256,7 +1256,7 @@ private void showGhost( else if ( cacheRef instanceof IBlockState ) { blob = new VoxelBlob(); - blob.fill( Block.getStateId( (IBlockState) cacheRef ) ); + blob.fill( ModUtil.getStateId( (IBlockState) cacheRef ) ); } else { @@ -1391,7 +1391,7 @@ public boolean addHitEffects( } - final Particle fx = effectRenderer.spawnEffectParticle( EnumParticleTypes.BLOCK_DUST.getParticleID(), x, y, z, 0.0D, 0.0D, 0.0D, new int[] { Block.getStateId( state ) } ); + final Particle fx = effectRenderer.spawnEffectParticle( EnumParticleTypes.BLOCK_DUST.getParticleID(), x, y, z, 0.0D, 0.0D, 0.0D, new int[] { ModUtil.getStateId( state ) } ); if ( fx != null ) { @@ -1426,7 +1426,7 @@ public static void placeSound( final BlockPos pos, final int stateID ) { - final IBlockState state = Block.getStateById( stateID ); + final IBlockState state = ModUtil.getStateById( stateID ); final Block block = state.getBlock(); world.playSound( pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, block.getSoundType().getPlaceSound(), SoundCategory.BLOCKS, ( block.getSoundType().getVolume() + 1.0F ) / 16.0F, block.getSoundType().getPitch() * 0.9F, false ); } @@ -1436,7 +1436,7 @@ public static void breakSound( final BlockPos pos, final int extractedState ) { - final IBlockState state = Block.getStateById( extractedState ); + final IBlockState state = ModUtil.getStateById( extractedState ); final Block block = state.getBlock(); world.playSound( pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, block.getSoundType().getBreakSound(), SoundCategory.BLOCKS, ( block.getSoundType().getVolume() + 1.0F ) / 16.0F, block.getSoundType().getPitch() * 0.9F, false ); } @@ -1492,7 +1492,7 @@ public boolean addBlockDestroyEffects( if ( !state.getBlock().isAir( state, world, pos ) ) { state = state.getBlock().getActualState( state, world, pos ); - final int StateID = Block.getStateId( state ); + final int StateID = ModUtil.getStateId( state ); final int i = 4; diff --git a/src/main/java/mod/chiselsandbits/core/api/BitAccess.java b/src/main/java/mod/chiselsandbits/core/api/BitAccess.java index bcebfaf0..7f8756bc 100644 --- a/src/main/java/mod/chiselsandbits/core/api/BitAccess.java +++ b/src/main/java/mod/chiselsandbits/core/api/BitAccess.java @@ -19,7 +19,6 @@ import mod.chiselsandbits.client.UndoTracker; import mod.chiselsandbits.core.ChiselsAndBits; import mod.chiselsandbits.helpers.ModUtil; -import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -160,7 +159,7 @@ public ItemStack getBitsAsItem( if ( type == ItemType.CHISLED_BLOCK ) { - final IBlockState state = Block.getStateById( cb.mostCommonState ); + final IBlockState state = ModUtil.getStateById( cb.mostCommonState ); final BlockChiseled blk = ChiselsAndBits.getBlocks().getConversion( state ); if ( blk == null ) diff --git a/src/main/java/mod/chiselsandbits/core/api/BitBrush.java b/src/main/java/mod/chiselsandbits/core/api/BitBrush.java index 6b859b1c..1013648e 100644 --- a/src/main/java/mod/chiselsandbits/core/api/BitBrush.java +++ b/src/main/java/mod/chiselsandbits/core/api/BitBrush.java @@ -1,8 +1,8 @@ package mod.chiselsandbits.core.api; import mod.chiselsandbits.api.IBitBrush; +import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.items.ItemChiseledBit; -import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; @@ -43,7 +43,7 @@ public IBlockState getState() return null; } - return Block.getStateById( stateID ); + return ModUtil.getStateById( stateID ); } @Override diff --git a/src/main/java/mod/chiselsandbits/core/api/ChiselAndBitsAPI.java b/src/main/java/mod/chiselsandbits/core/api/ChiselAndBitsAPI.java index 6aa7f93a..ff046aa7 100644 --- a/src/main/java/mod/chiselsandbits/core/api/ChiselAndBitsAPI.java +++ b/src/main/java/mod/chiselsandbits/core/api/ChiselAndBitsAPI.java @@ -26,7 +26,6 @@ import mod.chiselsandbits.items.ItemNegativePrint; import mod.chiselsandbits.items.ItemPositivePrint; import mod.chiselsandbits.items.ItemWrench; -import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; @@ -93,7 +92,7 @@ public IBitAccess getBitAccess( if ( BlockBitInfo.supportsBlock( state ) ) { final VoxelBlob blob = new VoxelBlob(); - blob.fill( Block.getStateId( state ) ); + blob.fill( ModUtil.getStateId( state ) ); return new BitAccess( world, pos, blob, VoxelBlob.NULL_BLOB ); } @@ -127,7 +126,7 @@ public IBitBrush createBrush( if ( bitItem.getItem() == null || getItemType( bitItem ) == ItemType.CHISLED_BIT ) { final int stateID = ItemChiseledBit.getStackState( bitItem ); - final IBlockState state = Block.getStateById( stateID ); + final IBlockState state = ModUtil.getStateById( stateID ); if ( state != null && BlockBitInfo.supportsBlock( state ) ) { @@ -226,7 +225,7 @@ public IBitAccess createBitItem( if ( BlockBitInfo.supportsBlock( state ) ) { final VoxelBlob blob = new VoxelBlob(); - blob.fill( Block.getStateId( state ) ); + blob.fill( ModUtil.getStateId( state ) ); return new BitAccess( null, null, blob, VoxelBlob.NULL_BLOB ); } } @@ -248,7 +247,7 @@ public IBitBrush createBrushFromState( throw new InvalidBitItem(); } - return new BitBrush( Block.getStateId( state ) ); + return new BitBrush( ModUtil.getStateId( state ) ); } @Override @@ -260,7 +259,7 @@ public ItemStack getBitItem( throw new InvalidBitItem(); } - return ItemChiseledBit.createStack( Block.getStateId( state ), 1, true ); + return ItemChiseledBit.createStack( ModUtil.getStateId( state ), 1, true ); } @Override diff --git a/src/main/java/mod/chiselsandbits/crafting/MirrorTransferCrafting.java b/src/main/java/mod/chiselsandbits/crafting/MirrorTransferCrafting.java index 50c27242..acd9dd4c 100644 --- a/src/main/java/mod/chiselsandbits/crafting/MirrorTransferCrafting.java +++ b/src/main/java/mod/chiselsandbits/crafting/MirrorTransferCrafting.java @@ -3,7 +3,7 @@ import mod.chiselsandbits.chiseledblock.NBTBlobConverter; import mod.chiselsandbits.chiseledblock.data.VoxelBlob; import mod.chiselsandbits.core.ChiselsAndBits; -import net.minecraft.block.Block; +import mod.chiselsandbits.helpers.ModUtil; import net.minecraft.init.Blocks; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; @@ -111,7 +111,7 @@ else if ( f.getItem() == ChiselsAndBits.getItems().itemPositiveprint ) if ( isNegative ) { - bestBlob.binaryReplacement( 0, Block.getStateId( Blocks.STONE.getDefaultState() ) ); + bestBlob.binaryReplacement( 0, ModUtil.getStateId( Blocks.STONE.getDefaultState() ) ); } tmp.setBlob( bestBlob ); diff --git a/src/main/java/mod/chiselsandbits/crafting/NegativeInversionCrafting.java b/src/main/java/mod/chiselsandbits/crafting/NegativeInversionCrafting.java index 7da4a866..e9e558bf 100644 --- a/src/main/java/mod/chiselsandbits/crafting/NegativeInversionCrafting.java +++ b/src/main/java/mod/chiselsandbits/crafting/NegativeInversionCrafting.java @@ -3,7 +3,7 @@ import mod.chiselsandbits.chiseledblock.NBTBlobConverter; import mod.chiselsandbits.chiseledblock.data.VoxelBlob; import mod.chiselsandbits.core.ChiselsAndBits; -import net.minecraft.block.Block; +import mod.chiselsandbits.helpers.ModUtil; import net.minecraft.init.Blocks; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; @@ -75,11 +75,11 @@ public ItemStack analzyeCraftingInventory( tmp.readChisleData( targetA.getTagCompound() ); final VoxelBlob bestBlob = tmp.getBlob(); - bestBlob.binaryReplacement( Block.getStateId( Blocks.STONE.getDefaultState() ), 0 ); + bestBlob.binaryReplacement( ModUtil.getStateId( Blocks.STONE.getDefaultState() ), 0 ); tmp.setBlob( bestBlob ); - final NBTTagCompound comp = (NBTTagCompound) targetA.getTagCompound().copy(); + final NBTTagCompound comp = targetA.getTagCompound().copy(); tmp.writeChisleData( comp, false ); final ItemStack outputPattern = new ItemStack( targetA.getItem() ); diff --git a/src/main/java/mod/chiselsandbits/debug/DebugAction.java b/src/main/java/mod/chiselsandbits/debug/DebugAction.java index 90cbf723..f1ecfbb2 100644 --- a/src/main/java/mod/chiselsandbits/debug/DebugAction.java +++ b/src/main/java/mod/chiselsandbits/debug/DebugAction.java @@ -13,6 +13,7 @@ import mod.chiselsandbits.chiseledblock.data.VoxelBlob; import mod.chiselsandbits.core.ChiselsAndBits; import mod.chiselsandbits.core.Log; +import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.integration.mcmultipart.MCMultipartProxy; import mod.chiselsandbits.items.ItemChiseledBit; import net.minecraft.block.Block; @@ -104,7 +105,7 @@ public void run( apiAssert( "NEGATIVE_DESIGN 1", player, api.getItemType( new ItemStack( ChiselsAndBits.getItems().itemNegativeprint ) ) == ItemType.NEGATIVE_DESIGN ); apiAssert( "POSITIVE_DESIGN 1", player, api.getItemType( new ItemStack( ChiselsAndBits.getItems().itemPositiveprint ) ) == ItemType.POSITIVE_DESIGN ); apiAssert( "WRENCH", player, api.getItemType( new ItemStack( ChiselsAndBits.getItems().itemWrench ) ) == ItemType.WRENCH ); - apiAssert( "CHISLED_BIT-cobblestone", player, api.getItemType( ItemChiseledBit.createStack( Block.getStateId( Blocks.COBBLESTONE.getDefaultState() ), 1, true ) ) == ItemType.CHISLED_BIT ); + apiAssert( "CHISLED_BIT-cobblestone", player, api.getItemType( ItemChiseledBit.createStack( ModUtil.getStateId( Blocks.COBBLESTONE.getDefaultState() ), 1, true ) ) == ItemType.CHISLED_BIT ); apiAssert( "CHISLED_BLOCK", player, api.getItemType( access.getBitsAsItem( null, ItemType.CHISLED_BLOCK, false ) ) == null ); apiAssert( "MIRROR_DESIGN 2", player, api.getItemType( access.getBitsAsItem( null, ItemType.MIRROR_DESIGN, false ) ) == null ); apiAssert( "NEGATIVE_DESIGN 2", player, api.getItemType( access.getBitsAsItem( null, ItemType.NEGATIVE_DESIGN, false ) ) == null ); diff --git a/src/main/java/mod/chiselsandbits/helpers/ModUtil.java b/src/main/java/mod/chiselsandbits/helpers/ModUtil.java index 370b5f4b..26bc333d 100644 --- a/src/main/java/mod/chiselsandbits/helpers/ModUtil.java +++ b/src/main/java/mod/chiselsandbits/helpers/ModUtil.java @@ -12,6 +12,8 @@ import mod.chiselsandbits.chiseledblock.TileEntityBlockChiseled; import mod.chiselsandbits.chiseledblock.data.IntegerBox; import mod.chiselsandbits.chiseledblock.data.VoxelBlob; +import mod.chiselsandbits.core.ChiselsAndBits; +import mod.chiselsandbits.helpers.StateLookup.CachedStateLookup; import mod.chiselsandbits.integration.mcmultipart.MCMultipartProxy; import mod.chiselsandbits.items.ItemBitBag; import mod.chiselsandbits.items.ItemBitBag.BagPos; @@ -654,4 +656,27 @@ public static void setSide( } } + private static StateLookup IDRelay = new StateLookup(); + + public static IBlockState getStateById( + final int blockStateID ) + { + return IDRelay.getStateById( blockStateID ); + } + + public static int getStateId( + final IBlockState state ) + { + return IDRelay.getStateId( state ); + } + + public static void cacheFastStates() + { + if ( !ChiselsAndBits.getConfig().lowMemoryMode ) + { + // cache id -> state table as an array for faster rendering lookups. + IDRelay = new CachedStateLookup(); + } + } + } diff --git a/src/main/java/mod/chiselsandbits/helpers/StateLookup.java b/src/main/java/mod/chiselsandbits/helpers/StateLookup.java new file mode 100644 index 00000000..554e563f --- /dev/null +++ b/src/main/java/mod/chiselsandbits/helpers/StateLookup.java @@ -0,0 +1,61 @@ +package mod.chiselsandbits.helpers; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; + +public class StateLookup +{ + + public static class CachedStateLookup extends StateLookup + { + + private final IBlockState[] states; + + public CachedStateLookup() + { + final ArrayList list = new ArrayList(); + + for ( final Block blk : Block.REGISTRY ) + { + for ( final IBlockState state : blk.getBlockState().getValidStates() ) + { + final int id = ModUtil.getStateId( state ); + + list.ensureCapacity( id ); + while ( list.size() <= id ) + { + list.add( null ); + } + + list.set( id, state ); + } + } + + states = list.toArray( new IBlockState[list.size()] ); + } + + @Override + public IBlockState getStateById( + final int blockStateID ) + { + return blockStateID >= 0 && blockStateID < states.length ? states[blockStateID] == null ? Blocks.AIR.getDefaultState() : states[blockStateID] : Blocks.AIR.getDefaultState(); + } + + } + + public int getStateId( + final IBlockState state ) + { + return Block.getStateId( state ); + } + + public IBlockState getStateById( + final int blockStateID ) + { + return Block.getStateById( blockStateID ); + } + +} diff --git a/src/main/java/mod/chiselsandbits/items/ItemChisel.java b/src/main/java/mod/chiselsandbits/items/ItemChisel.java index dbfda43f..9befe838 100644 --- a/src/main/java/mod/chiselsandbits/items/ItemChisel.java +++ b/src/main/java/mod/chiselsandbits/items/ItemChisel.java @@ -310,7 +310,7 @@ static public ItemStack chiselBlock( return output; } - if ( !canMine( selected, Block.getStateById( blk ), player.getPlayer(), world, pos ) ) + if ( !canMine( selected, ModUtil.getStateById( blk ), player.getPlayer(), world, pos ) ) { return output; } @@ -362,7 +362,7 @@ public static boolean canMine( final World world, final BlockPos pos ) { - final int targetState = Block.getStateId( state ); + final int targetState = ModUtil.getStateId( state ); ItemStackSlot chiselSlot = chiselInv.getItem( targetState ); ItemStack chisel = chiselSlot.getStack(); diff --git a/src/main/java/mod/chiselsandbits/items/ItemChiseledBit.java b/src/main/java/mod/chiselsandbits/items/ItemChiseledBit.java index 285a8290..6cc2c76d 100644 --- a/src/main/java/mod/chiselsandbits/items/ItemChiseledBit.java +++ b/src/main/java/mod/chiselsandbits/items/ItemChiseledBit.java @@ -189,7 +189,7 @@ public static String getBitStateName( public static String getBitTypeName( final ItemStack stack ) { - return getBitStateName( Block.getStateById( ItemChiseledBit.getStackState( stack ) ) ); + return getBitStateName( ModUtil.getStateById( ItemChiseledBit.getStackState( stack ) ) ); } @Override @@ -336,8 +336,8 @@ public void getSubItems( final IBlockState state = DeprecationHelper.getStateFromItem( out ); if ( state != null && BlockBitInfo.supportsBlock( state ) ) { - used.set( Block.getStateId( state ) ); - bits.add( ItemChiseledBit.createStack( Block.getStateId( state ), 1, false ) ); + used.set( ModUtil.getStateId( state ) ); + bits.add( ItemChiseledBit.createStack( ModUtil.getStateId( state ), 1, false ) ); } } diff --git a/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java b/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java index 443501fe..7051b813 100644 --- a/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java +++ b/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java @@ -22,7 +22,6 @@ import mod.chiselsandbits.network.NetworkRouter; import mod.chiselsandbits.network.packets.PacketRotateVoxelBlob; import mod.chiselsandbits.render.helpers.SimpleInstanceCache; -import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -208,7 +207,7 @@ protected NBTTagCompound getCompoundFromBlock( tmp.readChisleData( comp ); final VoxelBlob bestBlob = tmp.getBlob(); - bestBlob.binaryReplacement( 0, Block.getStateId( Blocks.STONE.getDefaultState() ) ); + bestBlob.binaryReplacement( 0, ModUtil.getStateId( Blocks.STONE.getDefaultState() ) ); tmp.setBlob( bestBlob ); tmp.writeChisleData( comp ); @@ -242,7 +241,7 @@ public ItemStack getPatternedItem( final BlobStats stats = conv.getBlob().getVoxelStats(); if ( stats.isFullBlock ) { - final IBlockState state = Block.getStateById( stats.mostCommonState ); + final IBlockState state = ModUtil.getStateById( stats.mostCommonState ); final ItemStack is = ModUtil.getItemFromBlock( state ); if ( is != null ) diff --git a/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiseledBlockBaked.java b/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiseledBlockBaked.java index 30f6d293..d8a2d4be 100644 --- a/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiseledBlockBaked.java +++ b/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiseledBlockBaked.java @@ -5,7 +5,18 @@ import java.util.Collections; import java.util.List; -import net.minecraft.block.Block; +import org.lwjgl.util.vector.Vector3f; + +import mod.chiselsandbits.chiseledblock.data.VoxelBlob; +import mod.chiselsandbits.chiseledblock.data.VoxelBlob.VisibleFace; +import mod.chiselsandbits.chiseledblock.data.VoxelBlobStateReference; +import mod.chiselsandbits.client.culling.ICullTest; +import mod.chiselsandbits.core.ChiselsAndBits; +import mod.chiselsandbits.core.ClientSide; +import mod.chiselsandbits.helpers.ModUtil; +import mod.chiselsandbits.render.BaseBakedBlockModel; +import mod.chiselsandbits.render.helpers.ModelQuadLayer; +import mod.chiselsandbits.render.helpers.ModelUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.BakedQuad; @@ -21,17 +32,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.Vec3i; -import mod.chiselsandbits.chiseledblock.data.VoxelBlob; -import mod.chiselsandbits.chiseledblock.data.VoxelBlob.VisibleFace; -import mod.chiselsandbits.chiseledblock.data.VoxelBlobStateReference; -import mod.chiselsandbits.client.culling.ICullTest; -import mod.chiselsandbits.core.ChiselsAndBits; -import mod.chiselsandbits.core.ClientSide; -import mod.chiselsandbits.render.BaseBakedBlockModel; -import mod.chiselsandbits.render.helpers.ModelQuadLayer; -import mod.chiselsandbits.render.helpers.ModelUtil; -import org.lwjgl.util.vector.Vector3f; - public class ChiseledBlockBaked extends BaseBakedBlockModel { public static final float PIXELS_PER_BLOCK = 16.0f; @@ -179,7 +179,7 @@ public ChiseledBlockBaked( { myLayer = layer; this.format = format; - final IBlockState state = Block.getStateById( blockReference ); + final IBlockState state = ModUtil.getStateById( blockReference ); IBakedModel originalModel = null; @@ -214,8 +214,8 @@ public static ChiseledBlockBaked breakingParticleModel( { final ChiseledBlockBaked out = new ChiseledBlockBaked(); - final IBlockState state = Block.getStateById( blockStateID ); - final IBakedModel model = ModelUtil.solveModel( state, 0, Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState( Block.getStateById( blockStateID ) ) ); + final IBlockState state = ModUtil.getStateById( blockStateID ); + final IBakedModel model = ModelUtil.solveModel( state, 0, Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState( ModUtil.getStateById( blockStateID ) ) ); if ( model != null ) { out.sprite = ModelUtil.findTexture( blockStateID, model, EnumFacing.UP, layer.layer ); @@ -699,7 +699,9 @@ float v( static private void offsetVec( final int[] result, - final int toX, final int toY, final int toZ, + final int toX, + final int toY, + final int toZ, final EnumFacing f, final int d ) { @@ -714,32 +716,32 @@ static private void offsetVec( switch ( f ) { - case DOWN: - leftX = 1; - upZ = 1; - break; - case EAST: - leftZ = 1; - upY = 1; - break; - case NORTH: - leftX = 1; - upY = 1; - break; - case SOUTH: - leftX = 1; - upY = 1; - break; - case UP: - leftX = 1; - upZ = 1; - break; - case WEST: - leftZ = 1; - upY = 1; - break; - default: - break; + case DOWN: + leftX = 1; + upZ = 1; + break; + case EAST: + leftZ = 1; + upY = 1; + break; + case NORTH: + leftX = 1; + upY = 1; + break; + case SOUTH: + leftX = 1; + upY = 1; + break; + case UP: + leftX = 1; + upZ = 1; + break; + case WEST: + leftZ = 1; + upY = 1; + break; + default: + break; } result[0] = ( toX + leftX * d + upX * d ) / 2; diff --git a/src/main/java/mod/chiselsandbits/render/helpers/ModelUtil.java b/src/main/java/mod/chiselsandbits/render/helpers/ModelUtil.java index 17f9e7fd..0c4478bd 100644 --- a/src/main/java/mod/chiselsandbits/render/helpers/ModelUtil.java +++ b/src/main/java/mod/chiselsandbits/render/helpers/ModelUtil.java @@ -14,7 +14,6 @@ import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.interfaces.ICacheClearable; import mod.chiselsandbits.render.helpers.ModelQuadLayer.ModelQuadLayerBuilder; -import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; @@ -73,7 +72,7 @@ public static ModelQuadLayer[] getCachedFace( return mpc; } - final IBlockState state = Block.getStateById( stateID ); + final IBlockState state = ModUtil.getStateById( stateID ); final IBakedModel model = ModelUtil.solveModel( state, weight, Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState( state ) ); final Fluid fluid = BlockBitInfo.getFluidFromBlock( state.getBlock() ); @@ -370,7 +369,7 @@ public static TextureAtlasSprite findTexture( } TextureAtlasSprite texture = null; - final IBlockState state = Block.getStateById( BlockRef ); + final IBlockState state = ModUtil.getStateById( BlockRef ); if ( model != null ) {