package com.flansmod.common.teams; import java.util.Collections; import java.util.List; import java.util.UUID; import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.Entity; 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.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.common.ISpecialArmor; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.flansmod.common.FlansMod; import com.flansmod.common.types.IFlanItem; import com.flansmod.common.types.InfoType; import com.google.common.collect.Multimap; public class ItemTeamArmour extends ItemArmor implements ISpecialArmor, IFlanItem { public ArmourType type; protected static final UUID[] uuid = new UUID[] { UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID() }; public ItemTeamArmour(ArmourType t) { super(ItemArmor.ArmorMaterial.LEATHER, 0, t.type); type = t; type.item = this; setCreativeTab(FlansMod.tabFlanTeams); GameRegistry.registerItem(this, type.shortName, FlansMod.MODID); } public ItemTeamArmour(ItemArmor.ArmorMaterial armorMaterial, int renderIndex, int armourType) { super(armorMaterial, renderIndex, armourType); } @Override public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) { return new ArmorProperties(1, type.defence, Integer.MAX_VALUE); } @Override public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { return (int)(type.defence * 20); } @Override public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { //Do nothing to the armour. It should not break as that would leave the player's team ambiguous } @Override public String getArmorTexture(ItemStack itemstack, Entity entity, int slot, String s) { return "flansmod:armor/" + type.armourTextureName + "_" + (type.type == 2 ? "2" : "1") + ".png"; } @Override public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean b) { if(type.description != null) { Collections.addAll(lines, type.description.split("_")); } if(Math.abs(type.jumpModifier - 1F) > 0.01F) lines.add("\u00a73+" + (int)((type.jumpModifier - 1F) * 100F) + "% Jump Height"); if(type.smokeProtection) lines.add("\u00a72+Smoke Protection"); if(type.nightVision) lines.add("\u00a72+Night Vision"); if(type.negateFallDamage) lines.add("\u00a72+Negates Fall Damage"); } @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack par1ItemStack, int par2) { return type.colour; } @Override public Multimap getAttributeModifiers(ItemStack stack) { Multimap map = super.getAttributeModifiers(stack); map.put(SharedMonsterAttributes.knockbackResistance.getAttributeUnlocalizedName(), new AttributeModifier(uuid[type.type], "KnockbackResist", type.knockbackModifier, 0)); map.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(uuid[type.type], "MovementSpeed", type.moveSpeedModifier - 1F, 2)); return map; } @Override @SideOnly(Side.CLIENT) public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { return type.model; } @Override public InfoType getInfoType() { return type; } @Override public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { if(type.nightVision && FlansMod.ticker % 25 == 0) player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 250)); if(type.jumpModifier > 1.01F && FlansMod.ticker % 25 == 0) player.addPotionEffect(new PotionEffect(Potion.jump.id, 250, (int)((type.jumpModifier - 1F) * 2F), true, false)); if(type.negateFallDamage) player.fallDistance = 0F; } }