package cyano.basemetals.items; import cyano.basemetals.init.Materials; import cyano.basemetals.material.IMetalObject; import cyano.basemetals.material.MetalMaterial; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemHoe; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; import java.util.HashSet; import java.util.List; import java.util.Set; public class ItemMetalHoe extends ItemHoe implements IMetalObject { protected final MetalMaterial metal; protected final Set<String> toolTypes; protected final String repairOreDictName; protected final boolean regenerates; protected final long regenInterval = 200; public ItemMetalHoe(MetalMaterial metal) { super(Materials.getToolMaterialFor(metal)); this.metal = metal; this.setMaxDamage(metal.getToolDurability()); this.toolTypes = new HashSet<>(); toolTypes.add("hoe"); repairOreDictName = "ingot"+metal.getCapitalizedName(); if(metal.equals(Materials.starsteel)){ regenerates = true; } else { regenerates = false; } } @Override public MetalMaterial getMetalMaterial(){ return metal; } @Override public boolean getIsRepairable(final ItemStack intputItem, final ItemStack repairMaterial) { List<ItemStack> acceptableItems = OreDictionary.getOres(repairOreDictName); for(ItemStack i : acceptableItems ){ if(ItemStack.areItemsEqual(i, repairMaterial)) return true; } return false; } @Override public int getHarvestLevel(final ItemStack item, final String typeRequested) { if (typeRequested != null && toolTypes.contains(typeRequested)) { return metal.getToolHarvestLevel(); } return -1; } @Override public Set<String> getToolClasses(final ItemStack item) { return toolTypes; } @Override public float getStrVsBlock(final ItemStack tool, final IBlockState target){ if(this.canHarvestBlock(target,tool)){ return Math.max(1.0f,metal.getToolEfficiency()); } else { return 1.0f; } } @Override public boolean hitEntity(final ItemStack item, final EntityLivingBase target, final EntityLivingBase attacker) { super.hitEntity(item, target, attacker); MetalToolEffects.extraEffectsOnAttack(metal,item, target, attacker); return true; } @Override public void onCreated(final ItemStack item, final World world, final EntityPlayer crafter) { super.onCreated(item, world, crafter); MetalToolEffects.extraEffectsOnCrafting(metal,item, world, crafter); } @Override public void onUpdate(final ItemStack item, final World world, final Entity player, final int inventoryIndex, final boolean isHeld) { if(regenerates && !world.isRemote && isHeld && item.getItemDamage() > 0 && world.getTotalWorldTime() % regenInterval == 0){ item.setItemDamage(item.getItemDamage() - 1); } } @Override public boolean canHarvestBlock(final IBlockState target) { if(this.toolTypes.contains(target.getBlock().getHarvestTool(target))){ return metal.getToolHarvestLevel() >= target.getBlock().getHarvestLevel(target); } return false; } public String getMaterialName() { return metal.getName(); } }