From 3cd9d5719c50d49414229fd9132f2bac60f40d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emmanuel=20Beno=C3=AEt?= Date: Sat, 25 Jun 2016 09:18:17 +0200 Subject: [PATCH] Alloy furnace - Now aware of redstone power It doesn't do anything with it yet. --- .../mmm/tech/base/TBAlloyFurnaceBlock.java | 67 +++++++++++++++---- .../tech/base/alloy_furnace/active.json | 12 ++-- .../tech/base/alloy_furnace/inactive.json | 12 ++-- 3 files changed, 71 insertions(+), 20 deletions(-) diff --git a/src/java/mmm/tech/base/TBAlloyFurnaceBlock.java b/src/java/mmm/tech/base/TBAlloyFurnaceBlock.java index 5662319..6d9a940 100644 --- a/src/java/mmm/tech/base/TBAlloyFurnaceBlock.java +++ b/src/java/mmm/tech/base/TBAlloyFurnaceBlock.java @@ -15,6 +15,7 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockHorizontal; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; @@ -55,6 +56,7 @@ public class TBAlloyFurnaceBlock private static final AxisAlignedBB AABB_TOP = UMaths.makeBlockAABB( 4 , 10 , 4 , 12 , 16 , 12 ); public static final PropertyDirection FACING = BlockHorizontal.FACING; + public static final PropertyBool POWERED = PropertyBool.create( "powered" ); private static boolean keepInventory = false; @@ -65,14 +67,22 @@ public class TBAlloyFurnaceBlock { super( Material.ROCK ); this.active = active; + this.setCreativeTab( CreativeTabs.DECORATIONS ); + this.setResistance( 17.5f ); this.setHardness( 3.5f ); this.setHarvestLevel( "pickaxe" , 0 ); + this.lightOpacity = 0; this.translucent = false; this.fullBlock = false; this.lightValue = active ? 13 : 0; + + this.setDefaultState( this.blockState.getBaseState( ) // + .withProperty( TBAlloyFurnaceBlock.FACING , EnumFacing.NORTH ) // + .withProperty( TBAlloyFurnaceBlock.POWERED , Boolean.valueOf( false ) ) ); + URegistry.setIdentifiers( this , "tech" , "base" , "alloy_furnace" , active ? "active" : "inactive" ); } @@ -173,7 +183,7 @@ public class TBAlloyFurnaceBlock } if ( rand.nextDouble( ) < .5 ) { - spawnFrontParticles( stateIn , worldIn , pos , rand ); + this.spawnFrontParticles( stateIn , worldIn , pos , rand ); } for ( int i = 0 ; i < 4 ; i++ ) { @@ -183,7 +193,8 @@ public class TBAlloyFurnaceBlock } - private void spawnTopParticles( IBlockState stateIn , World worldIn , BlockPos pos , Random rand ) + private void spawnTopParticles( final IBlockState stateIn , final World worldIn , final BlockPos pos , + final Random rand ) { final double spawnX = pos.getX( ) + .5 + ( rand.nextDouble( ) - .5 ) * 4.5 / 16.; final double spawnY = pos.getY( ) + ( 15. + 3. * rand.nextDouble( ) ) / 16.; @@ -265,7 +276,7 @@ public class TBAlloyFurnaceBlock protected BlockStateContainer createBlockState( ) { return new BlockStateContainer( this , new IProperty[] { - TBAlloyFurnaceBlock.FACING + TBAlloyFurnaceBlock.FACING , TBAlloyFurnaceBlock.POWERED } ); } @@ -273,20 +284,24 @@ public class TBAlloyFurnaceBlock @Override public IBlockState getStateFromMeta( final int meta ) { - EnumFacing enumfacing = EnumFacing.getFront( meta ); + final boolean powered = ( meta & 8 ) == 8; + EnumFacing enumfacing = EnumFacing.getFront( meta & 7 ); if ( enumfacing.getAxis( ) == EnumFacing.Axis.Y ) { enumfacing = EnumFacing.NORTH; } - return this.getDefaultState( ).withProperty( TBAlloyFurnaceBlock.FACING , enumfacing ); + return this.getDefaultState( ) // + .withProperty( TBAlloyFurnaceBlock.FACING , enumfacing ) // + .withProperty( TBAlloyFurnaceBlock.POWERED , powered ); } @Override public int getMetaFromState( final IBlockState state ) { - return state.getValue( TBAlloyFurnaceBlock.FACING ).getIndex( ); + return state.getValue( TBAlloyFurnaceBlock.FACING ).getIndex( ) // + | ( state.getValue( TBAlloyFurnaceBlock.POWERED ) ? 8 : 0 ); } @@ -294,8 +309,8 @@ public class TBAlloyFurnaceBlock public IBlockState onBlockPlaced( final World worldIn , final BlockPos pos , final EnumFacing facing , final float hitX , final float hitY , final float hitZ , final int meta , final EntityLivingBase placer ) { - return this.getDefaultState( ).withProperty( TBAlloyFurnaceBlock.FACING , - placer.getHorizontalFacing( ).getOpposite( ) ); + return this.getDefaultState( ).withProperty( // + TBAlloyFurnaceBlock.FACING , placer.getHorizontalFacing( ).getOpposite( ) ); } @@ -364,22 +379,50 @@ public class TBAlloyFurnaceBlock // ************************************************************************************************* - // COMPARATORS + // REDSTONE // ************************************************************************************************* - public boolean hasComparatorInputOverride( IBlockState state ) + @Override + public boolean hasComparatorInputOverride( final IBlockState state ) { return true; } - public int getComparatorInputOverride( IBlockState blockState , World worldIn , BlockPos pos ) + @Override + public int getComparatorInputOverride( final IBlockState blockState , final World worldIn , final BlockPos pos ) { - TileEntity te = worldIn.getTileEntity( pos ); + final TileEntity te = worldIn.getTileEntity( pos ); if ( ! ( te instanceof TBAlloyFurnaceTileEntity ) ) { return 0; } return Container.calcRedstoneFromInventory( ( (TBAlloyFurnaceTileEntity) te ).output ); } + + @Override + public void neighborChanged( final IBlockState state , final World worldIn , final BlockPos pos , + final Block blockIn ) + { + this.checkIfPowered( state , worldIn , pos ); + } + + + @Override + public void onBlockAdded( final World worldIn , final BlockPos pos , final IBlockState state ) + { + this.checkIfPowered( state , worldIn , pos ); + } + + + private void checkIfPowered( final IBlockState state , final World worldIn , final BlockPos pos ) + { + final boolean powered = worldIn.isBlockPowered( pos ); + if ( powered != state.getValue( TBAlloyFurnaceBlock.POWERED ).booleanValue( ) ) { + worldIn.setBlockState( pos , + state.withProperty( TBAlloyFurnaceBlock.POWERED , Boolean.valueOf( powered ) ) , 4 ); + System.err.println( pos + " POWERED? " + ( powered ? "yes" : "no" ) ); + } + } + } diff --git a/src/resources/assets/mmm/blockstates/tech/base/alloy_furnace/active.json b/src/resources/assets/mmm/blockstates/tech/base/alloy_furnace/active.json index 058068e..254d84d 100644 --- a/src/resources/assets/mmm/blockstates/tech/base/alloy_furnace/active.json +++ b/src/resources/assets/mmm/blockstates/tech/base/alloy_furnace/active.json @@ -1,8 +1,12 @@ { "variants": { - "facing=north": { "model": "mmm:tech/base/alloy_furnace/active" }, - "facing=east": { "model": "mmm:tech/base/alloy_furnace/active", "y": 90 }, - "facing=south": { "model": "mmm:tech/base/alloy_furnace/active", "y": 180 }, - "facing=west": { "model": "mmm:tech/base/alloy_furnace/active", "y": 270 } + "facing=north,powered=true": { "model": "mmm:tech/base/alloy_furnace/active" }, + "facing=north,powered=false": { "model": "mmm:tech/base/alloy_furnace/active" }, + "facing=east,powered=true": { "model": "mmm:tech/base/alloy_furnace/active", "y": 90 }, + "facing=east,powered=false": { "model": "mmm:tech/base/alloy_furnace/active", "y": 90 }, + "facing=south,powered=true": { "model": "mmm:tech/base/alloy_furnace/active", "y": 180 }, + "facing=south,powered=false": { "model": "mmm:tech/base/alloy_furnace/active", "y": 180 }, + "facing=west,powered=true": { "model": "mmm:tech/base/alloy_furnace/active", "y": 270 }, + "facing=west,powered=false": { "model": "mmm:tech/base/alloy_furnace/active", "y": 270 } } } \ No newline at end of file diff --git a/src/resources/assets/mmm/blockstates/tech/base/alloy_furnace/inactive.json b/src/resources/assets/mmm/blockstates/tech/base/alloy_furnace/inactive.json index 85abbcb..b31e151 100644 --- a/src/resources/assets/mmm/blockstates/tech/base/alloy_furnace/inactive.json +++ b/src/resources/assets/mmm/blockstates/tech/base/alloy_furnace/inactive.json @@ -1,8 +1,12 @@ { "variants": { - "facing=north": { "model": "mmm:tech/base/alloy_furnace/inactive" }, - "facing=east": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 90 }, - "facing=south": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 180 }, - "facing=west": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 270 } + "facing=north,powered=true": { "model": "mmm:tech/base/alloy_furnace/inactive" }, + "facing=north,powered=false": { "model": "mmm:tech/base/alloy_furnace/inactive" }, + "facing=east,powered=true": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 90 }, + "facing=east,powered=false": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 90 }, + "facing=south,powered=true": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 180 }, + "facing=south,powered=false": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 180 }, + "facing=west,powered=true": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 270 }, + "facing=west,powered=false": { "model": "mmm:tech/base/alloy_furnace/inactive", "y": 270 } } } \ No newline at end of file