package pneumaticCraft.common.item; import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import pneumaticCraft.api.block.IPneumaticWrenchable; import pneumaticCraft.common.network.NetworkHandler; import pneumaticCraft.common.network.PacketPlaySound; import pneumaticCraft.common.thirdparty.ModInteractionUtils; import pneumaticCraft.lib.ModIds; import pneumaticCraft.lib.PneumaticValues; import pneumaticCraft.lib.Sounds; import buildcraft.api.tools.IToolWrench; import cpw.mods.fml.common.Optional; @Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = ModIds.BUILDCRAFT) public class ItemPneumaticWrench extends ItemPressurizable implements IToolWrench{ public ItemPneumaticWrench(String textureLocation, int maxAir, int volume){ super(textureLocation, maxAir, volume); } /** * Callback for item usage. If the item does something special on right clicking, he will have one of those. Return * True if something happen and false if it don't. This is for ITEMS, not BLOCKS */ @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitVecX, float hitVecY, float hitVecZ){ if(!world.isRemote) { Block block = world.getBlock(x, y, z); IPneumaticWrenchable wrenchable = null; if(block instanceof IPneumaticWrenchable) { wrenchable = (IPneumaticWrenchable)block; } else { wrenchable = ModInteractionUtils.getInstance().getWrenchable(world.getTileEntity(x, y, z)); } if(wrenchable != null && ((ItemPneumaticWrench)Itemss.pneumaticWrench).getPressure(stack) > 0) { if(wrenchable.rotateBlock(world, player, x, y, z, ForgeDirection.getOrientation(side))) { if(!player.capabilities.isCreativeMode) ((ItemPneumaticWrench)Itemss.pneumaticWrench).addAir(stack, -PneumaticValues.USAGE_PNEUMATIC_WRENCH); NetworkHandler.sendToAllAround(new PacketPlaySound(Sounds.PNEUMATIC_WRENCH, x, y, z, 1.0F, 1.0F, false), world); return true; } } else if(block != null) { //rotating normal blocks doesn't cost energy. if(block.rotateBlock(world, x, y, z, ForgeDirection.getOrientation(side))) { NetworkHandler.sendToAllAround(new PacketPlaySound(Sounds.PNEUMATIC_WRENCH, x, y, z, 1.0F, 1.0F, false), world); return true; } } return false; } else { return false; } } @Override public boolean itemInteractionForEntity(ItemStack iStack, EntityPlayer player, EntityLivingBase entity){ if(!player.worldObj.isRemote) { if(entity.isEntityAlive() && entity instanceof IPneumaticWrenchable && ((ItemPneumaticWrench)Itemss.pneumaticWrench).getPressure(iStack) > 0) { if(((IPneumaticWrenchable)entity).rotateBlock(entity.worldObj, player, 0, 0, 0, ForgeDirection.UNKNOWN)) { if(!player.capabilities.isCreativeMode) ((ItemPneumaticWrench)Itemss.pneumaticWrench).addAir(iStack, -PneumaticValues.USAGE_PNEUMATIC_WRENCH); NetworkHandler.sendToAllAround(new PacketPlaySound(Sounds.PNEUMATIC_WRENCH, entity.posX, entity.posY, entity.posZ, 1.0F, 1.0F, false), entity.worldObj); return true; } } } return false; } @Override public boolean canWrench(EntityPlayer player, int x, int y, int z){ return true; } @Override public void wrenchUsed(EntityPlayer player, int x, int y, int z){} }