package com.bioxx.tfc2.items; import java.util.LinkedList; import java.util.Set; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import com.bioxx.tfc2.Core; import com.bioxx.tfc2.TFCBlocks; import com.bioxx.tfc2.blocks.BlockSapling; import com.google.common.collect.Sets; public class ItemAxe extends ItemTerraTool { private static final Set EFFECTIVE_ON = Sets.newHashSet(new Block[] {Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, TFCBlocks.LogNatural, TFCBlocks.LogNatural2, TFCBlocks.LogNaturalPalm}); public ItemAxe(ToolMaterial mat) { super(mat, EFFECTIVE_ON); this.damageVsEntity = 1; this.attackSpeed = -3.2f; } @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if(worldIn.isRemote || !playerIn.capabilities.isCreativeMode) return EnumActionResult.FAIL; IBlockState state = worldIn.getBlockState(pos); if(state.getBlock() == TFCBlocks.Sapling) ((BlockSapling)state.getBlock()).grow(worldIn, worldIn.rand, pos, state); return EnumActionResult.SUCCESS; } @Override public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) { if(worldIn.isRemote || !Core.isNaturalLog(state)) return super.onBlockDestroyed(stack, worldIn, state, pos, entityLiving); LinkedList<BlockPos> queue = new LinkedList<BlockPos>(); queue.add(pos); BlockPos scanPos; IBlockState scanState; while(!queue.isEmpty()) { scanPos = queue.pop(); scanState = worldIn.getBlockState(scanPos); if(Core.isNaturalLog(scanState)) { scanState.getBlock().dropBlockAsItem(worldIn, scanPos, scanState, 0); worldIn.setBlockToAir(scanPos); Iterable<BlockPos> list = BlockPos.getAllInBox(scanPos.add(-1, 0, -1), scanPos.add(1, 1, 1)); for(BlockPos p : list) { queue.add(p); } } } return false; } }