diff --git a/src/main/java/vazkii/botania/common/core/handler/PixieHandler.java b/src/main/java/vazkii/botania/common/core/handler/PixieHandler.java index 29a356184..e98206ef4 100644 --- a/src/main/java/vazkii/botania/common/core/handler/PixieHandler.java +++ b/src/main/java/vazkii/botania/common/core/handler/PixieHandler.java @@ -4,10 +4,13 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraftforge.event.entity.living.LivingHurtEvent; import vazkii.botania.api.item.IPixieSpawner; import vazkii.botania.common.entity.EntityPixie; import vazkii.botania.common.item.ModItems; +import vazkii.botania.common.item.equipment.armor.elementium.ItemElementiumHelm; import baubles.common.container.InventoryBaubles; import baubles.common.lib.PlayerHandler; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -31,6 +34,16 @@ public class PixieHandler { if(Math.random() < chance) { EntityPixie pixie = new EntityPixie(player.worldObj); pixie.setPosition(player.posX, player.posY + 2, player.posZ); + + if(((ItemElementiumHelm) ModItems.elementiumHelm).hasArmorSet(player)) { + int[] potions = new int[] { + Potion.blindness.id, + Potion.wither.id, + Potion.moveSlowdown.id, + Potion.weakness.id + }; + pixie.setApplyPotionEffect(new PotionEffect(potions[event.entity.worldObj.rand.nextInt(potions.length)], 40, 0)); + } float dmg = 4; if(stack != null && stack.getItem() == ModItems.elementiumSword) diff --git a/src/main/java/vazkii/botania/common/entity/EntityPixie.java b/src/main/java/vazkii/botania/common/entity/EntityPixie.java index fa584f55a..37cead61f 100644 --- a/src/main/java/vazkii/botania/common/entity/EntityPixie.java +++ b/src/main/java/vazkii/botania/common/entity/EntityPixie.java @@ -13,6 +13,7 @@ package vazkii.botania.common.entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import vazkii.botania.common.Botania; @@ -21,6 +22,7 @@ public class EntityPixie extends EntityFlyingCreature { EntityLivingBase summoner = null; float damage = 0; + PotionEffect effect = null; public EntityPixie(World world) { super(world); @@ -53,6 +55,10 @@ public class EntityPixie extends EntityFlyingCreature { this.damage = damage; setType(type); } + + public void setApplyPotionEffect(PotionEffect effect) { + this.effect = effect; + } @Override protected void updateEntityActionState() { @@ -79,6 +85,8 @@ public class EntityPixie extends EntityFlyingCreature { target.attackEntityFrom(DamageSource.causeMobDamage(summoner), damage); } } else target.attackEntityFrom(DamageSource.causeMobDamage(this), damage); + if(effect != null) + target.addPotionEffect(effect); die(); } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/armor/elementium/ItemElementiumArmor.java b/src/main/java/vazkii/botania/common/item/equipment/armor/elementium/ItemElementiumArmor.java index b0badb455..36dae2c3b 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/armor/elementium/ItemElementiumArmor.java +++ b/src/main/java/vazkii/botania/common/item/equipment/armor/elementium/ItemElementiumArmor.java @@ -1,7 +1,11 @@ package vazkii.botania.common.item.equipment.armor.elementium; +import java.util.List; + import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.item.IPixieSpawner; import vazkii.botania.client.lib.LibResources; @@ -23,5 +27,43 @@ public abstract class ItemElementiumArmor extends ItemManasteelArmor implements public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { return par2ItemStack.getItem() == ModItems.manaResource && par2ItemStack.getItemDamage() == 7 ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); } + + static ItemStack[] armorset; + + public ItemStack[] getArmorSetStacks() { + if(armorset == null) + armorset = new ItemStack[] { + new ItemStack(ModItems.elementiumHelm), + new ItemStack(ModItems.elementiumChest), + new ItemStack(ModItems.elementiumLegs), + new ItemStack(ModItems.elementiumBoots) + }; + + return armorset; + } + + public boolean hasArmorSetItem(EntityPlayer player, int i) { + ItemStack stack = player.inventory.armorInventory[3 - i]; + if(stack == null) + return false; + + switch(i) { + case 0: return stack.getItem() == ModItems.elementiumHelm || stack.getItem() == ModItems.elementiumHelmRevealing; + case 1: return stack.getItem() == ModItems.elementiumChest; + case 2: return stack.getItem() == ModItems.elementiumLegs; + case 3: return stack.getItem() == ModItems.elementiumBoots; + } + + return false; + } + + public String getArmorSetName() { + return StatCollector.translateToLocal("botania.armorset.elementium.name"); + } + + public void addArmorSetDescription(List list) { + super.addArmorSetDescription(list); + addStringToTooltip(StatCollector.translateToLocal("botania.armorset.elementium.desc"), list); + } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/armor/elementium/ItemElementiumHelm.java b/src/main/java/vazkii/botania/common/item/equipment/armor/elementium/ItemElementiumHelm.java index 47c718aa1..ef1070409 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/armor/elementium/ItemElementiumHelm.java +++ b/src/main/java/vazkii/botania/common/item/equipment/armor/elementium/ItemElementiumHelm.java @@ -1,9 +1,11 @@ package vazkii.botania.common.item.equipment.armor.elementium; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import vazkii.botania.api.mana.IManaDiscountArmor; import vazkii.botania.common.lib.LibItemNames; -public class ItemElementiumHelm extends ItemElementiumArmor { +public class ItemElementiumHelm extends ItemElementiumArmor implements IManaDiscountArmor { public ItemElementiumHelm() { this(LibItemNames.ELEMENTIUM_HELM); @@ -17,5 +19,10 @@ public class ItemElementiumHelm extends ItemElementiumArmor { public float getPixieChance(ItemStack stack) { return 0.11F; } + + @Override + public float getDiscount(ItemStack stack, int slot, EntityPlayer player) { + return hasArmorSet(player) ? 0.1F : 0F; + } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelArmor.java b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelArmor.java index 82a68aec9..5254d305e 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelArmor.java +++ b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelArmor.java @@ -10,12 +10,15 @@ */ package vazkii.botania.common.item.equipment.armor.terrasteel; +import java.util.List; import java.util.UUID; import net.minecraft.entity.Entity; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.item.ModItems; @@ -30,17 +33,6 @@ public class ItemTerrasteelArmor extends ItemManasteelArmor { super(type, name, BotaniaAPI.terrasteelArmorMaterial); } - int getHealthBoost() { - return 0; - } - - @Override - public Multimap getItemAttributeModifiers() { - Multimap map = HashMultimap.create(); - map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(171328 /** Random number **/, armorType), "Armor modifier" + armorType, getHealthBoost(), 0)); - return map; - } - @Override public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { return slot == 2 ? LibResources.MODEL_TERRASTEEL_1 : LibResources.MODEL_TERRASTEEL_0; @@ -50,5 +42,43 @@ public class ItemTerrasteelArmor extends ItemManasteelArmor { public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { return par2ItemStack.getItem() == ModItems.manaResource && par2ItemStack.getItemDamage() == 4 ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); } + + static ItemStack[] armorset; + + public ItemStack[] getArmorSetStacks() { + if(armorset == null) + armorset = new ItemStack[] { + new ItemStack(ModItems.terrasteelHelm), + new ItemStack(ModItems.terrasteelChest), + new ItemStack(ModItems.terrasteelLegs), + new ItemStack(ModItems.terrasteelBoots) + }; + + return armorset; + } + + public boolean hasArmorSetItem(EntityPlayer player, int i) { + ItemStack stack = player.inventory.armorInventory[3 - i]; + if(stack == null) + return false; + + switch(i) { + case 0: return stack.getItem() == ModItems.terrasteelHelm || stack.getItem() == ModItems.terrasteelHelmRevealing; + case 1: return stack.getItem() == ModItems.terrasteelChest; + case 2: return stack.getItem() == ModItems.terrasteelLegs; + case 3: return stack.getItem() == ModItems.terrasteelBoots; + } + + return false; + } + + public String getArmorSetName() { + return StatCollector.translateToLocal("botania.armorset.terrasteel.name"); + } + + public void addArmorSetDescription(List list) { + addStringToTooltip(StatCollector.translateToLocal("botania.armorset.terrasteel.desc0"), list); + addStringToTooltip(StatCollector.translateToLocal("botania.armorset.terrasteel.desc1"), list); + } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelBoots.java b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelBoots.java index 8e953c1b2..5ff5aedda 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelBoots.java +++ b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelBoots.java @@ -18,9 +18,4 @@ public class ItemTerrasteelBoots extends ItemTerrasteelArmor { super(3, LibItemNames.TERRASTEEL_BOOTS); } - @Override - int getHealthBoost() { - return 3; - } - } diff --git a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelChest.java b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelChest.java index 9870392fb..4f4a7b6a3 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelChest.java +++ b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelChest.java @@ -18,9 +18,4 @@ public class ItemTerrasteelChest extends ItemTerrasteelArmor { super(1, LibItemNames.TERRASTEEL_CHEST); } - @Override - int getHealthBoost() { - return 7; - } - } diff --git a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelHelm.java b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelHelm.java index 943d76c4b..d61c3cae1 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelHelm.java +++ b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelHelm.java @@ -10,9 +10,13 @@ */ package vazkii.botania.common.item.equipment.armor.terrasteel; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import vazkii.botania.api.mana.IManaDiscountArmor; import vazkii.botania.common.lib.LibItemNames; -public class ItemTerrasteelHelm extends ItemTerrasteelArmor { +public class ItemTerrasteelHelm extends ItemTerrasteelArmor implements IManaDiscountArmor { public ItemTerrasteelHelm() { this(LibItemNames.TERRASTEEL_HELM); @@ -23,8 +27,18 @@ public class ItemTerrasteelHelm extends ItemTerrasteelArmor { } @Override - int getHealthBoost() { - return 4; + public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { + super.onArmorTick(world, player, stack); + if(!hasArmorSet(player)) { + int food = player.getFoodStats().getFoodLevel(); + if(food > 0 && food < 18 && player.shouldHeal() && player.ticksExisted % 80 == 0) + player.heal(1F); + } + } + + @Override + public float getDiscount(ItemStack stack, int slot, EntityPlayer player) { + return hasArmorSet(player) ? 0.2F : 0F; } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelLegs.java b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelLegs.java index d4073c7ee..536819909 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelLegs.java +++ b/src/main/java/vazkii/botania/common/item/equipment/armor/terrasteel/ItemTerrasteelLegs.java @@ -18,9 +18,4 @@ public class ItemTerrasteelLegs extends ItemTerrasteelArmor { super(2, LibItemNames.TERRASTEEL_LEGS); } - @Override - int getHealthBoost() { - return 6; - } - } diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 6d97d1453..768d28980 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -131,6 +131,11 @@ botania.wings7=Wings: Sylph # ARMOR SETS botania.armorset.manasteel.name=Mana Affinity botania.armorset.manasteel.desc=10% less Mana cost on Mana Tools +botania.armorset.elementium.name=Great Fairy's Blessing +botania.armorset.elementium.desc=Chance for pixies to apply potion effects +botania.armorset.terrasteel.name=Will of the Ancients +botania.armorset.terrasteel.desc0=20% less Mana cost on Mana Tools +botania.armorset.terrasteel.desc1=Regen even if hunger isn't topped off # ROMAN NUMERALS botania.roman0=