package erebus.blocks; import java.util.ArrayList; import java.util.List; import java.util.Random; import erebus.Erebus; import erebus.ModTabs; import net.minecraft.block.BlockLeaves; import net.minecraft.block.BlockPlanks.EnumType; import net.minecraft.block.SoundType; import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.statemap.StateMap; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class BlockLeavesErebus extends BlockLeaves { private final EnumWood wood; public BlockLeavesErebus(EnumWood wood) { this.wood = wood; setHardness(0.2F); setLightOpacity(1); setCreativeTab(ModTabs.BLOCKS); setSoundType(SoundType.PLANT); Blocks.FIRE.setFireInfo(this, 30, 60); setDefaultState(blockState.getBaseState().withProperty(CHECK_DECAY, true).withProperty(DECAYABLE, true)); Erebus.proxy.setCustomStateMap(this, new StateMap.Builder().ignore(new IProperty[] { CHECK_DECAY, DECAYABLE }).build()); } @Override public Item getItemDropped(IBlockState state, Random rand, int fortune) { return Item.getItemFromBlock(wood.getSapling()); } @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List<ItemStack> list) { list.add(new ItemStack(item)); } @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) { return !Minecraft.getMinecraft().gameSettings.fancyGraphics && blockAccess.getBlockState(pos.offset(side)).getBlock() == this ? false : true; } @Override public boolean isOpaqueCube(IBlockState state) { return !Minecraft.getMinecraft().gameSettings.fancyGraphics; } @Override @SideOnly(Side.CLIENT) public BlockRenderLayer getBlockLayer() { return Blocks.LEAVES.getBlockLayer(); } @Override public ArrayList<ItemStack> onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) { ArrayList<ItemStack> ret = new ArrayList<ItemStack>(); ret.add(new ItemStack(this)); return ret; } @Override public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { List<ItemStack> ret = new java.util.ArrayList<ItemStack>(); Random rand = world instanceof World ? ((World) world).rand : RANDOM; int count = quantityDropped(state, fortune, rand); for (int i = 0; i < count; i++) { Item item = getItemDropped(state, rand, fortune); if (item != null) ret.add(new ItemStack(item, 1, damageDropped(state))); } return ret; } @Override public IBlockState getStateFromMeta(int meta) { return getDefaultState().withProperty(DECAYABLE, Boolean.valueOf((meta & 4) == 0)).withProperty(CHECK_DECAY, Boolean.valueOf((meta & 8) > 0)); } @Override public int getMetaFromState(IBlockState state) { int i = 0; if (!state.getValue(DECAYABLE).booleanValue()) i |= 4; if (state.getValue(CHECK_DECAY).booleanValue()) i |= 8; return i; } @Override protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[] { CHECK_DECAY, DECAYABLE }); } @Override public EnumType getWoodType(int meta) { return EnumType.OAK; } }