package tconstruct.items.tools; import cpw.mods.fml.relauncher.*; import net.minecraft.block.Block; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.*; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.*; import net.minecraft.util.MovingObjectPosition.MovingObjectType; import net.minecraft.world.World; import tconstruct.TConstruct; import tconstruct.library.crafting.Detailing.DetailInput; import tconstruct.library.tools.*; import tconstruct.tools.TinkerTools; public class Chisel extends ToolCore { public Chisel() { super(0); this.setUnlocalizedName("InfiTool.Chisel"); this.setContainerItem(this); } @Override public ItemStack getContainerItem (ItemStack itemStack) { if (itemStack.hasTagCompound()) { int reinforced = 0; NBTTagCompound tags = itemStack.getTagCompound(); if (tags.getCompoundTag("InfiTool").hasKey("Unbreaking")) reinforced = tags.getCompoundTag("InfiTool").getInteger("Unbreaking"); if (random.nextInt(10) < 10 - reinforced) { AbilityHelper.damageTool(itemStack, 1, null, false); } } return itemStack; } @Override public boolean doesContainerItemLeaveCraftingGrid (ItemStack par1ItemStack) { return par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().getCompoundTag("InfiTool").getBoolean("Broken"); } boolean performDetailing (World world, int x, int y, int z, int blockID, int blockMeta) { boolean detailed = false; return detailed; } @Override public boolean onItemUse (ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float clickX, float clickY, float clickZ) { return false; } @Override public ItemStack onItemRightClick (ItemStack stack, World world, EntityPlayer entityplayer) { if (entityplayer.capabilities.isCreativeMode) { onEaten(stack, world, entityplayer); } else { NBTTagCompound tags = stack.getTagCompound().getCompoundTag("InfiTool"); if (!tags.getBoolean("Broken")) entityplayer.setItemInUse(stack, getMaxItemUseDuration(stack)); } return stack; } @Override public ItemStack onEaten (ItemStack itemstack, World world, EntityPlayer entityplayer) { if (!world.isRemote) { MovingObjectPosition movingobjectposition = getMovingObjectPositionFromPlayer(world, entityplayer, true); if (movingobjectposition == null) { return itemstack; } if (movingobjectposition.typeOfHit == MovingObjectType.BLOCK) { int x = movingobjectposition.blockX; int y = movingobjectposition.blockY; int z = movingobjectposition.blockZ; Block block = world.getBlock(x, y, z); int meta = world.getBlockMetadata(x, y, z); DetailInput details = TConstruct.chiselDetailing.getDetailing(block, meta); if (details != null) { world.setBlock(x, y, z, Block.getBlockFromItem(details.output.getItem()), details.outputMeta, 3); if (!(entityplayer.capabilities.isCreativeMode)) { int reinforced = 0; NBTTagCompound tags = itemstack.getTagCompound(); if (tags.getCompoundTag("InfiTool").hasKey("Unbreaking")) reinforced = tags.getCompoundTag("InfiTool").getInteger("Unbreaking"); if (random.nextInt(10) < 10 - reinforced) { AbilityHelper.damageTool(itemstack, 1, null, false); } } world.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block) + (meta << 12)); entityplayer.swingItem(); } } } return itemstack; } @Override @SideOnly(Side.CLIENT) public void onUpdate (ItemStack stack, World world, Entity entity, int par4, boolean par5) { super.onUpdate(stack, world, entity, par4, par5); if (entity instanceof EntityPlayerSP) { EntityPlayerSP player = (EntityPlayerSP) entity; ItemStack usingItem = player.getItemInUse(); if (usingItem != null && usingItem.getItem() == this) { player.movementInput.moveForward *= 2.0; player.movementInput.moveStrafe *= 2.0; } } } @Override public int getMaxItemUseDuration (ItemStack itemstack) { if (!itemstack.hasTagCompound()) return 20; int speed = itemstack.getTagCompound().getCompoundTag("InfiTool").getInteger("MiningSpeed") / 100; int truespeed = 20 - speed; if (truespeed < 0) truespeed = 0; return truespeed; } @Override public EnumAction getItemUseAction (ItemStack itemstack) { return EnumAction.eat; } @SideOnly(Side.CLIENT) @Override public int getRenderPasses (int metadata) { return 8; } @Override public int getPartAmount () { return 2; } @Override public void registerPartPaths (int index, String[] location) { headStrings.put(index, location[0]); brokenPartStrings.put(index, location[1]); handleStrings.put(index, location[2]); } @Override public String getIconSuffix (int partType) { switch (partType) { case 0: return "_chisel_head"; case 1: return "_chisel_head_broken"; case 2: return "_chisel_handle"; default: return ""; } } @Override public String getEffectSuffix () { return "_chisel_effect"; } @Override public String getDefaultFolder () { return "chisel"; } @Override public Item getHeadItem () { return TinkerTools.chiselHead; } @Override public Item getAccessoryItem () { return null; } @Override public String[] getTraits () { return new String[] { "utility" }; } }