package com.hbm.items.armor; import java.util.ArrayList; import java.util.List; import com.google.common.collect.Multimap; import com.hbm.extprop.HbmLivingProps; import com.hbm.handler.ArmorModHandler; import com.hbm.items.ModItems; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.event.entity.living.LivingHurtEvent; public class ItemModInsert extends ItemArmorMod { float damageMod; float projectileMod; float explosionMod; float speed; public ItemModInsert(int durability, float damageMod, float projectileMod, float explosionMod, float speed) { super(ArmorModHandler.kevlar, false, true, false, false); this.damageMod = damageMod; this.projectileMod = projectileMod; this.explosionMod = explosionMod; this.speed = speed; this.setMaxDamage(durability); } @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { if(damageMod != 1F) list.add(EnumChatFormatting.RED + (damageMod < 1 ? "-" : "+") + Math.abs(Math.round((1F - damageMod) * 100)) + "% damage"); if(projectileMod != 1F) list.add(EnumChatFormatting.YELLOW + "-" + Math.round((1F - projectileMod) * 100) + "% projectile damage"); if(explosionMod != 1F) list.add(EnumChatFormatting.YELLOW + "-" + Math.round((1F - explosionMod) * 100) + "% explosion damage"); if(speed != 1F) list.add(EnumChatFormatting.BLUE + "-" + Math.round((1F - speed) * 100) + "% speed"); if(this == ModItems.insert_polonium) list.add(EnumChatFormatting.DARK_RED + "+100 RAD/s"); list.add((stack.getMaxDamage() - stack.getItemDamage()) + "/" + stack.getMaxDamage() + "HP"); list.add(""); super.addInformation(stack, player, list, bool); } @Override public void addDesc(List list, ItemStack stack, ItemStack armor) { List desc = new ArrayList(); if(damageMod != 1F) desc.add((damageMod < 1 ? "-" : "+") + Math.abs(Math.round((1F - damageMod) * 100)) + "% dmg"); if(projectileMod != 1F) desc.add("-" + Math.round((1F - projectileMod) * 100) + "% proj"); if(explosionMod != 1F) desc.add("-" + Math.round((1F - explosionMod) * 100) + "% exp"); if(explosionMod != 1F) desc.add("-" + Math.round((1F - speed) * 100) + "% speed"); if(this == ModItems.insert_polonium) desc.add("+100 RAD/s"); String join = String.join(" / ", desc); list.add(EnumChatFormatting.DARK_PURPLE + " " + stack.getDisplayName() + " (" + join + " / " + (stack.getMaxDamage() - stack.getItemDamage()) + "HP)"); } @Override public void modDamage(LivingHurtEvent event, ItemStack armor) { event.ammount *= damageMod; if(event.source.isProjectile()) event.ammount *= projectileMod; if(event.source.isExplosion()) event.ammount *= explosionMod; ItemStack insert = ArmorModHandler.pryMods(armor)[ArmorModHandler.kevlar]; if(insert == null) return; insert.setItemDamage(insert.getItemDamage() + 1); if(!event.entity.worldObj.isRemote && this == ModItems.insert_era) { event.entity.worldObj.newExplosion(event.entity, event.entity.posX, event.entity.posY - event.entity.yOffset + event.entity.height * 0.5, event.entity.posZ, 0.05F, false, false); } if(insert.getItemDamage() >= insert.getMaxDamage()) { ArmorModHandler.removeMod(armor, ArmorModHandler.kevlar); } else { ArmorModHandler.applyMod(armor, insert); } } @Override public void modUpdate(EntityLivingBase entity, ItemStack armor) { if(!entity.worldObj.isRemote && this == ModItems.insert_polonium) { HbmLivingProps.incrementRadiation(entity, 100F); } } @Override public Multimap getModifiers(ItemStack armor) { if(speed == 1) return null; Multimap multimap = super.getAttributeModifiers(armor); multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(ArmorModHandler.UUIDs[((ItemArmor)armor.getItem()).armorType], "NTM Armor Mod Speed", -1F + speed, 2)); return multimap; } }