package minefantasy.mf2.item.tool.crafting; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import minefantasy.mf2.MineFantasyII; import minefantasy.mf2.api.heating.Heatable; import minefantasy.mf2.api.heating.TongsHelper; import minefantasy.mf2.api.helpers.CustomToolHelper; import minefantasy.mf2.api.helpers.GuiHelper; import minefantasy.mf2.api.helpers.ToolHelper; import minefantasy.mf2.api.material.CustomMaterial; import minefantasy.mf2.api.tier.IToolMaterial; import minefantasy.mf2.api.tool.ISmithTongs; import minefantasy.mf2.item.list.CreativeTabMF; import minefantasy.mf2.item.list.ToolListMF; import minefantasy.mf2.item.tool.ToolMaterialMF; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraft.util.IIcon; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** * @author Anonymous Productions */ public class ItemTongs extends ItemTool implements IToolMaterial, ISmithTongs { private ToolMaterial material; private float baseDamage; private String name; public ItemTongs(String name, ToolMaterial material, int rarity) { super(0F, material, Sets.newHashSet(new Block[] {})); this.material = material; itemRarity = rarity; this.name = name; setCreativeTab(CreativeTabMF.tabOldTools); setTextureName("minefantasy2:Tool/Crafting/"+name); this.setMaxDamage(getMaxDamage()/5); GameRegistry.registerItem(this, name, MineFantasyII.MODID); this.setUnlocalizedName(name); } @Override public Multimap getItemAttributeModifiers() { Multimap map = HashMultimap.create(); map.clear(); return map; } @Override public ToolMaterial getMaterial() { return toolMaterial; } @Override public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) { MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, true); if (movingobjectposition == null) { return item; } else { if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { int i = movingobjectposition.blockX; int j = movingobjectposition.blockY; int k = movingobjectposition.blockZ; if (!world.canMineBlock(player, i, j, k)) { return item; } if (!player.canPlayerEdit(i, j, k, movingobjectposition.sideHit, item)) { return item; } float water = TongsHelper.getWaterSource(world, i, j, k); if (TongsHelper.getHeldItem(item) != null && water >= 0) { ItemStack drop = TongsHelper.getHeldItem(item).copy(), cooled = drop; if (TongsHelper.isCoolableItem(drop)) { cooled = Heatable.getQuenchedItem(drop, water); cooled.stackSize = drop.stackSize; player.playSound("random.splash", 1F, 1F); player.playSound("random.fizz", 2F, 0.5F); for (int a = 0; a < 5; a++) { world.spawnParticle("largesmoke", i + 0.5F, j + 1, k + 0.5F, 0, 0.065F, 0); } } if (cooled != null && !world.isRemote) { if(world.isAirBlock(i, j+1, k)) { EntityItem entity = new EntityItem(world, i+0.5, j+1, k+0.5, cooled); entity.delayBeforeCanPickup = 20; entity.motionX = entity.motionY = entity.motionZ = 0F; world.spawnEntityInWorld(entity); } else { player.entityDropItem(cooled, 0); } } return TongsHelper.clearHeldItem(item, player); } } return item; } } @Override @SideOnly(Side.CLIENT) public boolean requiresMultipleRenderPasses() { return true; } //===================================================== CUSTOM START =============================================================\\ private boolean isCustom = false; public ItemTongs setCustom(String s) { canRepair = false; setTextureName("minefantasy2:custom/tool/"+s+"/"+name); isCustom = true; return this; } public ItemTongs setBaseDamage(float baseDamage) { this.baseDamage = baseDamage; return this; } private float efficiencyMod = 1.0F; public ItemTongs setEfficiencyMod(float efficiencyMod) { this.efficiencyMod = efficiencyMod; return this; } @Override public Multimap getAttributeModifiers(ItemStack item) { Multimap map = HashMultimap.create(); map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", getMeleeDamage(item), 0)); return map; } /** * Gets a stack-sensitive value for the melee dmg */ protected float getMeleeDamage(ItemStack item) { return baseDamage + CustomToolHelper.getMeleeDamage(item, toolMaterial.getDamageVsEntity()); } protected float getWeightModifier(ItemStack stack) { return CustomToolHelper.getWeightModifier(stack, 1.0F); } private IIcon detailTex = null; @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister reg) { if(isCustom) { detailTex = reg.registerIcon(this.getIconString()+"_detail"); } super.registerIcons(reg); } @Override public IIcon getIcon(ItemStack stack, int pass) { ItemStack item = TongsHelper.getHeldItem(stack); boolean hasHeld = item != null; int baseLayer = hasHeld ? 1 : 0; if (hasHeld && pass == 0) { return item.getItem().getIcon(item, pass); } if(!isCustom || pass == baseLayer && detailTex != null) { return super.getIcon(stack, pass); } return detailTex != null ? detailTex : super.getIcon(stack, pass); } @Override public int getRenderPasses(int metadata) { return 3; } /*@Override @SideOnly(Side.CLIENT) public IIcon getIcon(ItemStack stack, int renderPass) { ItemStack item = TongsHelper.getHeldItem(stack); if (renderPass == 0 && item != null) { return item.getItem().getIcon(item, renderPass); } return itemIcon; } */ @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack item, int layer) { ItemStack held = TongsHelper.getHeldItem(item); boolean hasHeld = held != null; int baseLayer = hasHeld ? 1 : 0; if (hasHeld) //Bottom Layer { if( layer == 0) { return held.getItem().getColorFromItemStack(held, 0); } return CustomToolHelper.getColourFromItemStack(item, layer-1, super.getColorFromItemStack(item, layer)); } return CustomToolHelper.getColourFromItemStack(item, layer, super.getColorFromItemStack(item, layer)); } @Override public int getMaxDamage(ItemStack stack) { return CustomToolHelper.getMaxDamage(stack, super.getMaxDamage(stack)); } public ItemStack construct(String main) { return CustomToolHelper.construct(this, main, null); } protected int itemRarity; @Override public EnumRarity getRarity(ItemStack item) { return CustomToolHelper.getRarity(item, itemRarity); } @Override public float getDigSpeed(ItemStack stack, Block block, int meta) { if (!ForgeHooks.isToolEffective(stack, block, meta)) { return this.func_150893_a(stack, block); } return CustomToolHelper.getEfficiency(stack, super.getDigSpeed(stack, block, meta), efficiencyMod); } public float func_150893_a(ItemStack stack, Block block) { float base = super.func_150893_a(stack, block); return base <= 1.0F ? base : CustomToolHelper.getEfficiency(stack, this.efficiencyOnProperMaterial, efficiencyMod); } @Override public int getHarvestLevel(ItemStack stack, String toolClass) { return CustomToolHelper.getHarvestLevel(stack, super.getHarvestLevel(stack, toolClass)); } @Override public void getSubItems(Item item, CreativeTabs tab, List list) { if(isCustom) { ArrayList<CustomMaterial> metal = CustomMaterial.getList("metal"); Iterator iteratorMetal = metal.iterator(); while(iteratorMetal.hasNext()) { CustomMaterial customMat = (CustomMaterial) iteratorMetal.next(); if(MineFantasyII.isDebug() || customMat.getItem() != null) { list.add(this.construct(customMat.name)); } } } else { super.getSubItems(item, tab, list); } } @Override public void addInformation(ItemStack item, EntityPlayer user, List list, boolean extra) { if(isCustom) { CustomToolHelper.addInformation(item, list); }else{ ItemStack held = TongsHelper.getHeldItem(item); if (held != null) { list.add(""); list.add(held.getItem().getItemStackDisplayName(held)); held.getItem().addInformation(held, user, list, extra); } } super.addInformation(item, user, list, extra); } @Override @SideOnly(Side.CLIENT) public String getItemStackDisplayName(ItemStack item) { String unlocalName = this.getUnlocalizedNameInefficiently(item) + ".name"; return CustomToolHelper.getLocalisedName(item, unlocalName); } @Override public boolean hitEntity(ItemStack item, EntityLivingBase target, EntityLivingBase user) { return true; } //====================================================== CUSTOM END ==============================================================\\ }