package electroblob.wizardry.item; import electroblob.wizardry.util.MagicDamage; import electroblob.wizardry.util.MagicDamage.DamageType; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemAxe; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemFlamingAxe extends ItemAxe implements IConjuredItem { public ItemFlamingAxe(ToolMaterial material){ super(material, 8, -3); this.setMaxDamage(getBaseDuration()); this.setNoRepair(); this.setCreativeTab(null); } @Override public int getBaseDuration(){ return 600; } @Override public int getMaxDamage(ItemStack stack){ return this.getMaxDamageFromNBT(stack); } @Override // This method allows the code for the item's timer to be greatly simplified by damaging it directly from // onUpdate() and removing the workaround that involved WizardData and all sorts of crazy stuff. public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged){ if(!oldStack.isEmpty() || !newStack.isEmpty()){ // We only care about the situation where we specifically want the animation NOT to play. if(oldStack.getItem() == newStack.getItem() && !slotChanged) return false; } return super.shouldCauseReequipAnimation(oldStack, newStack, slotChanged); } @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean selected){ int damage = stack.getItemDamage(); if(damage > stack.getMaxDamage()) entity.replaceItemInInventory(slot, ItemStack.EMPTY); stack.setItemDamage(damage + 1); } @Override public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase wielder){ if(!MagicDamage.isEntityImmune(DamageType.FIRE, target)) target.setFire(8); return false; } @Override @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack stack){ return true; } @Override public boolean getIsRepairable(ItemStack stack, ItemStack par2ItemStack){ return false; } @Override public int getItemEnchantability(){ return 0; } // Cannot be dropped @Override public boolean onDroppedByPlayer(ItemStack item, EntityPlayer player){ return false; } @Override @SideOnly(Side.CLIENT) // Why does this method pass in an item as an argument? It is always the same item the method is invoked on. public void getSubItems(Item item, CreativeTabs tab, NonNullList items){ items.add(new ItemStack(this, 1)); } }