From 4d835257ab511d128e447959c89731393a1f4914 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sat, 9 Jan 2016 13:01:05 -0500 Subject: [PATCH] Added Sentient Armour - not fully implemented. --- .../item/armour/ItemSentientArmour.java | 265 ++++++++++++++++++ .../bloodmagic/registry/ModItems.java | 16 ++ .../assets/bloodmagic/lang/en_US.lang | 2 +- .../models/armor/sentientArmour_layer_1.png | Bin 0 -> 3830 bytes .../models/armor/sentientArmour_layer_2.png | Bin 0 -> 3178 bytes .../models/item/ItemSentientArmour0.json | 8 + .../models/item/ItemSentientArmour1.json | 9 + .../models/item/ItemSentientArmour2.json | 8 + .../models/item/ItemSentientArmour3.json | 8 + .../textures/items/SentientBoots.png | Bin 0 -> 255 bytes .../textures/items/SentientHelmet.png | Bin 0 -> 253 bytes .../textures/items/SentientLeggings.png | Bin 0 -> 231 bytes .../textures/items/SentientPlate.png | Bin 0 -> 282 bytes 13 files changed, 315 insertions(+), 1 deletion(-) create mode 100644 src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java create mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientArmour_layer_1.png create mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientArmour_layer_2.png create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSentientArmour0.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSentientArmour1.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSentientArmour2.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSentientArmour3.json create mode 100644 src/main/resources/assets/bloodmagic/textures/items/SentientBoots.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/SentientHelmet.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/SentientLeggings.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/SentientPlate.png diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java new file mode 100644 index 00000000..7b7acf18 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java @@ -0,0 +1,265 @@ +package WayofTime.bloodmagic.item.armour; + +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.registry.ModItems; + +public class ItemSentientArmour extends ItemArmor implements ISpecialArmor +{ + public static String[] names = { "helmet", "chest", "legs", "boots" }; + + public ItemSentientArmour(int armorType) + { + super(ItemArmor.ArmorMaterial.IRON, 0, armorType); + setUnlocalizedName(Constants.Mod.MODID + ".sentientArmour."); + setMaxDamage(250); + setCreativeTab(BloodMagic.tabBloodMagic); + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack stack, DamageSource source, double damage, int slot) + { + double armourReduction = 0.0; + double damageAmount = 0.25; + + if (this == ModItems.sentientArmourBoots || this == ModItems.sentientArmourHelmet) + { + damageAmount = 3d / 20d * 0.6; + } else if (this == ModItems.sentientArmourLegs) + { + damageAmount = 6d / 20d * 0.6; + } else if (this == ModItems.sentientArmourChest) + { + damageAmount = 0.64; + } + + double armourPenetrationReduction = 0; + + int maxAbsorption = 100000; + + if (source.equals(DamageSource.drown)) + { + return new ArmorProperties(-1, 0, 0); + } + + if (source.equals(DamageSource.outOfWorld)) + { + return new ArmorProperties(-1, 0, 0); + } + + if (this == ModItems.sentientArmourChest) + { + armourReduction = 0.24 / 0.64; // This values puts it at iron level + + ItemStack helmet = player.getEquipmentInSlot(4); + ItemStack leggings = player.getEquipmentInSlot(2); + ItemStack boots = player.getEquipmentInSlot(1); + + if (helmet == null || leggings == null || boots == null) + { + damageAmount *= (armourReduction); + + return new ArmorProperties(-1, damageAmount, maxAbsorption); + } + + if (helmet.getItem() instanceof ItemSentientArmour && leggings.getItem() instanceof ItemSentientArmour && boots.getItem() instanceof ItemSentientArmour) + { + double remainder = 1; // Multiply this number by the armour upgrades for protection + + armourReduction = armourReduction + (1 - remainder) * (1 - armourReduction); + damageAmount *= (armourReduction); + + if (source.isUnblockable()) + { + return new ArmorProperties(-1, damageAmount * armourPenetrationReduction, maxAbsorption); + } + + return new ArmorProperties(-1, damageAmount, maxAbsorption); + } + } else + { + if (source.isUnblockable()) + { + return new ArmorProperties(-1, damageAmount * armourPenetrationReduction, maxAbsorption); + } + + return new ArmorProperties(-1, damageAmount, maxAbsorption); + } + + return new ArmorProperties(-1, 0, 0); + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) + { + if (armor.getItem() == ModItems.sentientArmourHelmet) + { + return 3; + } + + if (armor.getItem() == ModItems.sentientArmourChest) + { + return 8; + } + + if (armor.getItem() == ModItems.sentientArmourLegs) + { + return 6; + } + + if (armor.getItem() == ModItems.sentientArmourBoots) + { + return 3; + } + + return 5; + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) + { + return; // Armour shouldn't get damaged... for now + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) + { + + super.addInformation(stack, player, tooltip, advanced); + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) + { + if (this == ModItems.sentientArmourChest || this == ModItems.sentientArmourHelmet || this == ModItems.sentientArmourBoots) + { + return "bloodmagic:models/armor/sentientArmour_layer_1.png"; + } + + if (this == ModItems.sentientArmourLegs) + { + return "bloodmagic:models/armor/sentientArmour_layer_2.png"; + } else + { + return null; + } + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack stack) + { + super.onArmorTick(world, player, stack); + + if (world.isRemote) + { + return; + } + + //TODO: Consume will - if the will drops to 0, return the contained item + } + + @Override + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName(stack) + names[armorType]; + } + + public void revertArmour(EntityPlayer player, ItemStack itemStack) + { + ItemStack stack = this.getContainedArmourStack(itemStack); + player.inventory.armorInventory[3 - this.armorType] = stack; + } + + public static void revertAllArmour(EntityPlayer player) + { + ItemStack[] armourInventory = player.inventory.armorInventory; + for (ItemStack stack : armourInventory) + { + if (stack != null && stack.getItem() instanceof ItemSentientArmour) + { + ((ItemSentientArmour) stack.getItem()).revertArmour(player, stack); + } + } + } + + public void setContainedArmourStack(ItemStack newArmour, ItemStack previousArmour) + { + if (newArmour == null || previousArmour == null) + { + return; + } + + NBTTagCompound tag = new NBTTagCompound(); + previousArmour.writeToNBT(tag); + + NBTTagCompound omegaTag = newArmour.getTagCompound(); + if (omegaTag == null) + { + omegaTag = new NBTTagCompound(); + newArmour.setTagCompound(omegaTag); + } + + omegaTag.setTag("armour", tag); + } + + public ItemStack getContainedArmourStack(ItemStack newArmour) + { + NBTTagCompound omegaTag = newArmour.getTagCompound(); + if (omegaTag == null) + { + return null; + } + + NBTTagCompound tag = omegaTag.getCompoundTag("armour"); + ItemStack armourStack = ItemStack.loadItemStackFromNBT(tag); + + return armourStack; + } + + public static boolean convertPlayerArmour(EntityPlayer player) + { + ItemStack[] armours = player.inventory.armorInventory; + + ItemStack helmetStack = armours[3]; + ItemStack chestStack = armours[2]; + ItemStack leggingsStack = armours[1]; + ItemStack bootsStack = armours[0]; + + { + ItemStack omegaHelmetStack = ((ItemSentientArmour) ModItems.sentientArmourHelmet).getSubstituteStack(helmetStack); + ItemStack omegaChestStack = ((ItemSentientArmour) ModItems.sentientArmourChest).getSubstituteStack(chestStack); + ItemStack omegaLeggingsStack = ((ItemSentientArmour) ModItems.sentientArmourLegs).getSubstituteStack(leggingsStack); + ItemStack omegaBootsStack = ((ItemSentientArmour) ModItems.sentientArmourBoots).getSubstituteStack(bootsStack); + + armours[3] = omegaHelmetStack; + armours[2] = omegaChestStack; + armours[1] = omegaLeggingsStack; + armours[0] = omegaBootsStack; + + return true; + } + } + + public ItemStack getSubstituteStack(ItemStack previousArmour) + { + ItemStack newArmour = new ItemStack(this); + + this.setContainedArmourStack(newArmour, previousArmour); + + return newArmour; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java index 38b3ff0e..0c48af42 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java @@ -27,6 +27,7 @@ import WayofTime.bloodmagic.item.ItemSacrificialDagger; import WayofTime.bloodmagic.item.ItemSlate; import WayofTime.bloodmagic.item.ItemTelepositionFocus; import WayofTime.bloodmagic.item.armour.ItemLivingArmour; +import WayofTime.bloodmagic.item.armour.ItemSentientArmour; import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; import WayofTime.bloodmagic.item.gear.ItemPackSelfSacrifice; import WayofTime.bloodmagic.item.sigil.ItemSigilAir; @@ -110,6 +111,11 @@ public class ModItems public static Item livingArmourLegs; public static Item livingArmourBoots; + public static Item sentientArmourHelmet; + public static Item sentientArmourChest; + public static Item sentientArmourLegs; + public static Item sentientArmourBoots; + public static Item altarMaker; public static Item arcaneAshes; @@ -188,6 +194,11 @@ public class ModItems livingArmourLegs = registerItem(new ItemLivingArmour(2), "ItemLivingArmourLegs"); livingArmourBoots = registerItem(new ItemLivingArmour(3), "ItemLivingArmourBoots"); + sentientArmourHelmet = registerItem(new ItemSentientArmour(0), "ItemSentientArmourHelmet"); + sentientArmourChest = registerItem(new ItemSentientArmour(1), "ItemSentientArmourChest"); + sentientArmourLegs = registerItem(new ItemSentientArmour(2), "ItemSentientArmourLegs"); + sentientArmourBoots = registerItem(new ItemSentientArmour(3), "ItemSentientArmourBoots"); + altarMaker = registerItem(new ItemAltarMaker()); arcaneAshes = registerItem(new ItemArcaneAshes()); @@ -292,6 +303,11 @@ public class ModItems renderHelper.itemRender(livingArmourLegs, "ItemLivingArmour2"); renderHelper.itemRender(livingArmourBoots, "ItemLivingArmour3"); + renderHelper.itemRender(sentientArmourHelmet, "ItemSentientArmour0"); + renderHelper.itemRender(sentientArmourChest, "ItemSentientArmour1"); + renderHelper.itemRender(sentientArmourLegs, "ItemSentientArmour2"); + renderHelper.itemRender(sentientArmourBoots, "ItemSentientArmour3"); + renderHelper.itemRender(altarMaker); renderHelper.itemRender(arcaneAshes); diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 1e4c22d2..07943271 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -283,7 +283,7 @@ chat.BloodMagic.livingArmour.upgrade.poisonRemove=You are starting to feel bette jei.BloodMagic.recipe.altar=Blood Altar jei.BloodMagic.recipe.binding=Binding Ritual jei.BloodMagic.recipe.alchemyArrayCrafting=Alchemy Array -jei.BloodMagic.recipe.soulForge=Soul Forge +jei.BloodMagic.recipe.soulForge=Hellfire Forge jei.BloodMagic.recipe.requiredLP=LP: %d jei.BloodMagic.recipe.requiredTier=Tier: %d jei.BloodMagic.recipe.minimumSouls=Minimum: %d Souls diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientArmour_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sentientArmour_layer_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d472d41df372757ba91ff3fbd3195e0038fec8d6 GIT binary patch literal 3830 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/items/SentientPlate.png b/src/main/resources/assets/bloodmagic/textures/items/SentientPlate.png new file mode 100644 index 0000000000000000000000000000000000000000..49702f68c49b07d97ed92df9d7eb16144f8e2565 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)2MYtQs`8o3XMsY?JzX3_EKV;C-pzMdL143TTaVA* zh8ovxb=CDPipk4+w(mS0D99z4siSyg?pa$44bF0dt8E@ylcct`Phw!uZg}!MHtE}1 z*7FQAemnV|*x+}{@_^4Nl{T@=kD+N-nN<}hRqc53vM=0yLe2d>J)8_>o$s4WwCqeS zavh34pAjl%JLO{ivjcuDnI#i0v3^|0zPRZ!kI$pBh5z2mT$v$l+~2mN`rz986{7MJ X=K62DVqth0=wt>@S3j3^P6