FINALLY changed it so farm animals do not drop demon will

Did work on the armour's unique effects.
This commit is contained in:
WayofTime 2016-03-29 18:39:52 -04:00
parent 3fc5a76d53
commit 7977fa351f
4 changed files with 124 additions and 4 deletions

View file

@ -8,6 +8,8 @@ Version 2.0.0-27
- Fixed item binding. Yusssss.
- Added Sword, Armour, and Bow texture changes when you have different demonic will in your inventory.
- Finalized sentient sword effects
- Did work on the unique demon will effects for armour
- FINALLY changed it so farm animals do not drop demon will.
------------------------------------------------------
Version 2.0.0-23

View file

@ -3,6 +3,10 @@ package WayofTime.bloodmagic.item.armour;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
@ -10,13 +14,17 @@ import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
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.init.MobEffects;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.common.ISpecialArmor;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@ -37,6 +45,8 @@ public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMes
public static double[] consumptionPerHit = new double[] { 0.1, 0.12, 0.15, 0.2, 0.3, 0.35, 0.4, 0.5 };
public static double[] extraProtectionLevel = new double[] { 0, 0.25, 0.5, 0.6, 0.7, 0.75, 0.85, 0.9 };
public static double[] healthBonus = new double[] { 3, 6, 9, 12, 15, 20, 25 };
public ItemSentientArmour(EntityEquipmentSlot armorType)
{
super(ItemArmor.ArmorMaterial.IRON, 0, armorType);
@ -88,6 +98,51 @@ public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMes
}
}
@Override
public void onArmorTick(World world, EntityPlayer player, ItemStack stack)
{
if (this.armorType == EntityEquipmentSlot.CHEST)
{
EnumDemonWillType type = this.getCurrentType(stack);
switch (type)
{
case CORROSIVE:
if (player.isPotionActive(MobEffects.poison))
{
player.removeActivePotionEffect(MobEffects.poison);
}
if (player.isPotionActive(MobEffects.wither))
{
player.removeActivePotionEffect(MobEffects.wither);
}
break;
default:
}
}
}
public void onPlayerAttacked(ItemStack stack, DamageSource source, EntityPlayer attackedPlayer)
{
if (source.getEntity() instanceof EntityLivingBase)
{
EntityLivingBase attacker = (EntityLivingBase) source.getEntity();
EnumDemonWillType type = this.getCurrentType(stack);
switch (type)
{
case CORROSIVE:
break;
case DEFAULT:
break;
case DESTRUCTIVE:
break;
case STEADFAST:
break;
case VENGEFUL:
break;
}
}
}
@Override
public ArmorProperties getProperties(EntityLivingBase player, ItemStack stack, DamageSource source, double damage, int slot)
{
@ -301,6 +356,17 @@ public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMes
return ret;
}
@Override
public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack)
{
Multimap<String, AttributeModifier> multimap = HashMultimap.<String, AttributeModifier>create();
if (slot == EntityEquipmentSlot.CHEST)
{
multimap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 318145), "Armor modifier", this.getHealthBonus(stack), 0));
}
return multimap;
}
public static void revertAllArmour(EntityPlayer player)
{
ItemStack[] armourInventory = player.inventory.armorInventory;
@ -416,11 +482,36 @@ public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMes
if (willBracket >= 0)
{
double recurringCost = consumptionPerHit[willBracket];
double protection = extraProtectionLevel[willBracket];
this.setCostModifier(armourStack, recurringCost);
this.setArmourModifier(armourStack, protection);
this.setCurrentType(type, armourStack);
if (this.armorType == EntityEquipmentSlot.CHEST)
{
this.setArmourModifier(armourStack, getArmourModifier(type, willBracket));
this.setHealthBonus(armourStack, this.getHealthModifier(type, willBracket));
}
}
}
public double getArmourModifier(EnumDemonWillType type, int willBracket)
{
switch (type)
{
case STEADFAST:
default:
return extraProtectionLevel[willBracket];
}
}
public double getHealthModifier(EnumDemonWillType type, int willBracket)
{
switch (type)
{
case STEADFAST:
return healthBonus[willBracket];
default:
return 0;
}
}
@ -443,4 +534,21 @@ public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMes
return bracket;
}
public double getHealthBonus(ItemStack stack)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH);
}
public void setHealthBonus(ItemStack stack, double hp)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
tag.setDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp);
}
}

View file

@ -317,7 +317,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM
{
if (i == 0 || attackingEntity.worldObj.rand.nextDouble() < 0.4)
{
ItemStack soulStack = soul.createWill(0, this.getDropOfActivatedSword(stack) * attackingEntity.worldObj.rand.nextDouble() + this.getStaticDropOfActivatedSword(stack));
ItemStack soulStack = soul.createWill(0, (this.getDropOfActivatedSword(stack) * attackingEntity.worldObj.rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d);
soulList.add(soulStack);
}
}

View file

@ -12,6 +12,7 @@ import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
@ -79,6 +80,7 @@ import WayofTime.bloodmagic.item.ItemAltarMaker;
import WayofTime.bloodmagic.item.ItemInscriptionTool;
import WayofTime.bloodmagic.item.ItemUpgradeTome;
import WayofTime.bloodmagic.item.armour.ItemLivingArmour;
import WayofTime.bloodmagic.item.armour.ItemSentientArmour;
import WayofTime.bloodmagic.item.gear.ItemPackSacrifice;
import WayofTime.bloodmagic.livingArmour.LivingArmour;
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerArrowShot;
@ -578,6 +580,14 @@ public class EventHandler
StatTrackerPhysicalProtect.incrementCounter(armour, amount);
}
}
} else
{
ItemStack chestStack = attackedPlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
if (chestStack != null && chestStack.getItem() instanceof ItemSentientArmour)
{
ItemSentientArmour armour = (ItemSentientArmour) chestStack.getItem();
armour.onPlayerAttacked(chestStack, source, attackedPlayer);
}
}
}
@ -694,7 +704,7 @@ public class EventHandler
DamageSource source = event.getSource();
Entity entity = source.getEntity();
if (attackedEntity.isPotionActive(ModPotions.soulSnare))
if (attackedEntity.isPotionActive(ModPotions.soulSnare) && attackedEntity instanceof EntityMob)
{
PotionEffect eff = attackedEntity.getActivePotionEffect(ModPotions.soulSnare);
int lvl = eff.getAmplifier();