package com.bioxx.tfc2.blocks; import java.util.Arrays; import java.util.List; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.model.b3d.B3DLoader; import net.minecraftforge.common.property.ExtendedBlockState; import net.minecraftforge.common.property.IExtendedBlockState; import net.minecraftforge.common.property.IUnlistedProperty; import com.bioxx.tfc2.TFCBlocks; import com.bioxx.tfc2.api.types.WoodType; public class BlockLeaves2 extends BlockLeaves { public static PropertyEnum META_PROPERTY = PropertyEnum.create("wood", WoodType.class, Arrays.copyOfRange(WoodType.values(), 16, 19)); private boolean isTransparent = true; public BlockLeaves2() { super(); this.META_PROP = META_PROPERTY; } /******************************************************************************* * 1. Content *******************************************************************************/ @Override public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn) { if(worldIn.getBlockState(pos).getValue(META_PROPERTY) == WoodType.Palm && worldIn.getBlockState(pos.down()).getBlock() != TFCBlocks.LogNatural2) { worldIn.setBlockToAir(pos); } else super.neighborChanged(state, worldIn, pos, blockIn); } @Override public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) { for(int l = 16; l < 19; l++) list.add(new ItemStack(itemIn, 1, l)); } @Override public int quantityDropped(IBlockState state, int i, Random random) { if(state.getValue(META_PROPERTY) == WoodType.Palm) return 0; return 1; } @Override public float getBlockHardness(IBlockState state, World worldIn, BlockPos pos) { if(worldIn.getBlockState(pos).getValue(META_PROPERTY) == WoodType.Palm) return -1.0f; return this.blockHardness; } @Override protected IProperty getMetaProperty() { return META_PROPERTY; } /******************************************************************************* * 2. Rendering *******************************************************************************/ /******************************************************************************* * 3. Blockstate *******************************************************************************/ @Override protected BlockStateContainer createBlockState() { return new ExtendedBlockState(this, new IProperty[]{META_PROPERTY, BlockLeaves.FANCY}, new IUnlistedProperty[]{ B3DLoader.B3DFrameProperty.INSTANCE }); } @Override public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { boolean fancy = true; if(!isTransparent) fancy = false; if(state.getValue(META_PROPERTY) == WoodType.Palm) fancy = false; return state.withProperty(BlockLeaves.FANCY, fancy); } @Override public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) { if(state.getValue(META_PROPERTY) == WoodType.Palm) { B3DLoader.B3DState newState = new B3DLoader.B3DState(null, 1); return ((IExtendedBlockState) state).withProperty(B3DLoader.B3DFrameProperty.INSTANCE, newState); } return state; } @Override public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(META_PROPERTY, WoodType.getTypeFromMeta((meta & 15) + 16)); } @Override public int getMetaFromState(IBlockState state) { return ((WoodType)state.getValue(META_PROPERTY)).getMeta() & 15; } @Override public int damageDropped(IBlockState state) { return ((WoodType)state.getValue(META_PROPERTY)).getMeta() + 16; } }