FINALLY changed it so farm animals do not drop demon will
Did work on the armour's unique effects.
This commit is contained in:
parent
3fc5a76d53
commit
7977fa351f
|
@ -8,6 +8,8 @@ Version 2.0.0-27
|
||||||
- Fixed item binding. Yusssss.
|
- Fixed item binding. Yusssss.
|
||||||
- Added Sword, Armour, and Bow texture changes when you have different demonic will in your inventory.
|
- Added Sword, Armour, and Bow texture changes when you have different demonic will in your inventory.
|
||||||
- Finalized sentient sword effects
|
- 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
|
Version 2.0.0-23
|
||||||
|
|
|
@ -3,6 +3,10 @@ package WayofTime.bloodmagic.item.armour;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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.ItemMeshDefinition;
|
||||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
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.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
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.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.init.MobEffects;
|
||||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||||
import net.minecraft.item.ItemArmor;
|
import net.minecraft.item.ItemArmor;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.DamageSource;
|
import net.minecraft.util.DamageSource;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.ISpecialArmor;
|
import net.minecraftforge.common.ISpecialArmor;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
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[] 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[] 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)
|
public ItemSentientArmour(EntityEquipmentSlot armorType)
|
||||||
{
|
{
|
||||||
super(ItemArmor.ArmorMaterial.IRON, 0, 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
|
@Override
|
||||||
public ArmorProperties getProperties(EntityLivingBase player, ItemStack stack, DamageSource source, double damage, int slot)
|
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;
|
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)
|
public static void revertAllArmour(EntityPlayer player)
|
||||||
{
|
{
|
||||||
ItemStack[] armourInventory = player.inventory.armorInventory;
|
ItemStack[] armourInventory = player.inventory.armorInventory;
|
||||||
|
@ -416,11 +482,36 @@ public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMes
|
||||||
if (willBracket >= 0)
|
if (willBracket >= 0)
|
||||||
{
|
{
|
||||||
double recurringCost = consumptionPerHit[willBracket];
|
double recurringCost = consumptionPerHit[willBracket];
|
||||||
double protection = extraProtectionLevel[willBracket];
|
|
||||||
|
|
||||||
this.setCostModifier(armourStack, recurringCost);
|
this.setCostModifier(armourStack, recurringCost);
|
||||||
this.setArmourModifier(armourStack, protection);
|
|
||||||
this.setCurrentType(type, armourStack);
|
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;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -317,7 +317,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM
|
||||||
{
|
{
|
||||||
if (i == 0 || attackingEntity.worldObj.rand.nextDouble() < 0.4)
|
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);
|
soulList.add(soulStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import net.minecraft.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.item.EntityItem;
|
import net.minecraft.entity.item.EntityItem;
|
||||||
|
import net.minecraft.entity.monster.EntityMob;
|
||||||
import net.minecraft.entity.passive.EntityAnimal;
|
import net.minecraft.entity.passive.EntityAnimal;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
@ -79,6 +80,7 @@ import WayofTime.bloodmagic.item.ItemAltarMaker;
|
||||||
import WayofTime.bloodmagic.item.ItemInscriptionTool;
|
import WayofTime.bloodmagic.item.ItemInscriptionTool;
|
||||||
import WayofTime.bloodmagic.item.ItemUpgradeTome;
|
import WayofTime.bloodmagic.item.ItemUpgradeTome;
|
||||||
import WayofTime.bloodmagic.item.armour.ItemLivingArmour;
|
import WayofTime.bloodmagic.item.armour.ItemLivingArmour;
|
||||||
|
import WayofTime.bloodmagic.item.armour.ItemSentientArmour;
|
||||||
import WayofTime.bloodmagic.item.gear.ItemPackSacrifice;
|
import WayofTime.bloodmagic.item.gear.ItemPackSacrifice;
|
||||||
import WayofTime.bloodmagic.livingArmour.LivingArmour;
|
import WayofTime.bloodmagic.livingArmour.LivingArmour;
|
||||||
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerArrowShot;
|
import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerArrowShot;
|
||||||
|
@ -578,6 +580,14 @@ public class EventHandler
|
||||||
StatTrackerPhysicalProtect.incrementCounter(armour, amount);
|
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();
|
DamageSource source = event.getSource();
|
||||||
Entity entity = source.getEntity();
|
Entity entity = source.getEntity();
|
||||||
|
|
||||||
if (attackedEntity.isPotionActive(ModPotions.soulSnare))
|
if (attackedEntity.isPotionActive(ModPotions.soulSnare) && attackedEntity instanceof EntityMob)
|
||||||
{
|
{
|
||||||
PotionEffect eff = attackedEntity.getActivePotionEffect(ModPotions.soulSnare);
|
PotionEffect eff = attackedEntity.getActivePotionEffect(ModPotions.soulSnare);
|
||||||
int lvl = eff.getAmplifier();
|
int lvl = eff.getAmplifier();
|
||||||
|
|
Loading…
Reference in a new issue