From 23ae02af78d0038c5c67c891aa4485e9fe52dbb1 Mon Sep 17 00:00:00 2001
From: Nicholas Ignoffo <nick@tehnut.info>
Date: Sat, 29 Sep 2018 16:49:05 -0700
Subject: [PATCH] Beginning of soul system

---
 .../core/RegistrarBloodMagicItems.java        |  30 ++++--
 .../bloodmagic/core/util/InventoryUtil.java   |  31 ++++++
 .../bloodmagic/core/util/ModifiableValue.java |  40 +++++++
 .../core/util/register/IModelLocator.java     |  16 +++
 .../DemonWill.java}                           |   6 +-
 .../bloodmagic/core/will/DemonWillHolder.java |  67 ++++++++++++
 .../core/will/DemonicWillEventHandler.java    | 100 ++++++++++++++++++
 .../core/will/ISentientEquipment.java         |  43 ++++++++
 .../bloodmagic/core/will/IWillContainer.java  |  38 +++++++
 .../bloodmagic/event/DemonicWillEvent.java    |  52 +++++++++
 .../bloodmagic/item/ItemMonsterSoul.java      |  56 ++++++++++
 .../bloodmagic/item/ItemSentientSword.java    |  50 +++++++++
 .../assets/bloodmagic/lang/en_US.lang         |   5 +
 .../models/item/soul/monster_soul.json        |  32 ++++++
 .../item/soul/monster_soul_corrosive.json     |   6 ++
 .../item/soul/monster_soul_destructive.json   |   6 ++
 .../models/item/soul/monster_soul_raw.json    |   6 ++
 .../item/soul/monster_soul_steadfast.json     |   6 ++
 .../item/soul/monster_soul_vengeful.json      |   6 ++
 .../models/item/soul/sentient_sword.json      |  70 ++++++++++++
 .../item/soul/sentient_sword_corrosive.json   |   6 ++
 .../soul/sentient_sword_corrosive_active.json |   6 ++
 .../item/soul/sentient_sword_destructive.json |   6 ++
 .../sentient_sword_destructive_active.json    |   6 ++
 .../item/soul/sentient_sword_raw_active.json  |   6 ++
 .../item/soul/sentient_sword_steadfast.json   |   6 ++
 .../soul/sentient_sword_steadfast_active.json |   6 ++
 .../item/soul/sentient_sword_vengeful.json    |   6 ++
 .../soul/sentient_sword_vengeful_active.json  |   6 ++
 .../items/soul/monster_soul_corrosive.png     | Bin 0 -> 932 bytes
 .../items/soul/monster_soul_destructive.png   | Bin 0 -> 938 bytes
 .../textures/items/soul/monster_soul_raw.png  | Bin 0 -> 939 bytes
 .../items/soul/monster_soul_steadfast.png     | Bin 0 -> 931 bytes
 .../items/soul/monster_soul_vengeful.png      | Bin 0 -> 938 bytes
 .../items/soul/sentient_sword_corrosive.png   | Bin 0 -> 862 bytes
 .../soul/sentient_sword_corrosive_active.png  | Bin 0 -> 873 bytes
 .../items/soul/sentient_sword_destructive.png | Bin 0 -> 847 bytes
 .../sentient_sword_destructive_active.png     | Bin 0 -> 866 bytes
 .../items/soul/sentient_sword_raw.png         | Bin 0 -> 15220 bytes
 .../items/soul/sentient_sword_raw_active.png  | Bin 0 -> 15261 bytes
 .../items/soul/sentient_sword_steadfast.png   | Bin 0 -> 867 bytes
 .../soul/sentient_sword_steadfast_active.png  | Bin 0 -> 873 bytes
 .../items/soul/sentient_sword_vengeful.png    | Bin 0 -> 866 bytes
 .../soul/sentient_sword_vengeful_active.png   | Bin 0 -> 876 bytes
 .../assets/bloodmagic_guide/lang/en_us.lang   |   3 +
 45 files changed, 713 insertions(+), 10 deletions(-)
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/InventoryUtil.java
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/ModifiableValue.java
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/register/IModelLocator.java
 rename src/main/java/com/wayoftime/bloodmagic/core/{type/DemonWillType.java => will/DemonWill.java} (61%)
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/will/DemonWillHolder.java
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/will/DemonicWillEventHandler.java
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/will/ISentientEquipment.java
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/will/IWillContainer.java
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/event/DemonicWillEvent.java
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemMonsterSoul.java
 create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemSentientSword.java
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/monster_soul.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_corrosive.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_destructive.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_raw.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_steadfast.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_vengeful.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_corrosive.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_corrosive_active.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_destructive.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_destructive_active.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_raw_active.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_steadfast.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_steadfast_active.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_vengeful.json
 create mode 100644 src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_vengeful_active.json
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_corrosive.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_destructive.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_raw.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_steadfast.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_vengeful.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_corrosive.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_corrosive_active.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_destructive.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_destructive_active.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_raw.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_raw_active.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_steadfast.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_steadfast_active.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_vengeful.png
 create mode 100644 src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_vengeful_active.png
 create mode 100644 src/main/resources/assets/bloodmagic_guide/lang/en_us.lang

diff --git a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicItems.java b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicItems.java
index 8fedb858..f66f7bc7 100644
--- a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicItems.java
+++ b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicItems.java
@@ -3,7 +3,8 @@ package com.wayoftime.bloodmagic.core;
 import com.google.common.collect.Lists;
 import com.wayoftime.bloodmagic.BloodMagic;
 import com.wayoftime.bloodmagic.core.network.BloodOrb;
-import com.wayoftime.bloodmagic.core.type.DemonWillType;
+import com.wayoftime.bloodmagic.core.util.register.IModelLocator;
+import com.wayoftime.bloodmagic.core.will.DemonWill;
 import com.wayoftime.bloodmagic.core.type.SlateType;
 import com.wayoftime.bloodmagic.core.util.register.IItemProvider;
 import com.wayoftime.bloodmagic.core.util.register.IVariantProvider;
@@ -62,6 +63,8 @@ public class RegistrarBloodMagicItems {
     public static final Item LIVING_ARMOR_FEET = Items.AIR;
     public static final Item LIVING_TOME = Items.AIR;
 
+    public static final Item SENTIENT_SWORD = Items.AIR;
+    public static final Item MONSTER_SOUL = Items.AIR;
     public static final Item DEMON_WILL_CRYSTAL_RAW = Items.AIR;
     public static final Item DEMON_WILL_CRYSTAL_CORROSIVE = Items.AIR;
     public static final Item DEMON_WILL_CRYSTAL_DESTRUCTIVE = Items.AIR;
@@ -100,13 +103,16 @@ public class RegistrarBloodMagicItems {
                 new ItemLivingArmor(EntityEquipmentSlot.CHEST),
                 new ItemLivingArmor(EntityEquipmentSlot.LEGS),
                 new ItemLivingArmor(EntityEquipmentSlot.FEET),
-                new ItemLivingTome(),
-                new ItemAltarBuilder()
+                new ItemAltarBuilder(),
+                new ItemSentientSword(),
+                new ItemMonsterSoul()
         ));
 
-        for (DemonWillType type : DemonWillType.VALUES)
+        for (DemonWill type : DemonWill.VALUES)
             items.add(new ItemMundane("demon_will_crystal_" + type.getName()));
 
+        items.add(new ItemLivingTome()); // Last so it's at the bottom of the creative tab
+
         registry.registerAll(items.toArray(new Item[0]));
     }
 
@@ -116,17 +122,27 @@ public class RegistrarBloodMagicItems {
         for (Item item : items) {
             boolean flag = handleModel(item);
 
-            if (!flag) // If we haven't registered a model by now, we don't need any special handling so we'll just use the default model.
-                ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), item instanceof ItemBlock ? "normal" : "inventory"));
+            if (!flag) { // If we haven't registered a model by now, we don't need any special handling so we'll just use the default model.
+                ResourceLocation modelPath = item.getRegistryName();
+                if (item instanceof IModelLocator)
+                    modelPath = ((IModelLocator) item).getModelPath();
+
+                ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(modelPath, item instanceof ItemBlock ? "normal" : "inventory"));
+            }
         }
     }
 
     static boolean handleModel(Item item) {
         if (item instanceof IVariantProvider) {
+            ResourceLocation modelPath = item.getRegistryName();
+            if (item instanceof IModelLocator)
+                modelPath = ((IModelLocator) item).getModelPath();
+
             Int2ObjectMap<String> variants = new Int2ObjectOpenHashMap<>();
             ((IVariantProvider) item).collectVariants(variants);
+
             for (Int2ObjectMap.Entry<String> entry : variants.int2ObjectEntrySet())
-                ModelLoader.setCustomModelResourceLocation(item, entry.getIntKey(), new ModelResourceLocation(item.getRegistryName(), entry.getValue()));
+                ModelLoader.setCustomModelResourceLocation(item, entry.getIntKey(), new ModelResourceLocation(modelPath, entry.getValue()));
 
             return true;
         }
diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/InventoryUtil.java b/src/main/java/com/wayoftime/bloodmagic/core/util/InventoryUtil.java
new file mode 100644
index 00000000..8f01b374
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/core/util/InventoryUtil.java
@@ -0,0 +1,31 @@
+package com.wayoftime.bloodmagic.core.util;
+
+import com.google.common.collect.Lists;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.items.IItemHandler;
+
+import javax.annotation.Nonnull;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Predicate;
+
+public class InventoryUtil {
+
+    public static final Predicate<ItemStack> NO_EMPTY = stack -> !stack.isEmpty();
+
+    @Nonnull
+    public static List<ItemStack> findMatchingItems(IItemHandler inventory, Predicate<ItemStack> filter) {
+        List<ItemStack> found = null;
+        for (int i = 0; i < inventory.getSlots(); i++) {
+            ItemStack stack = inventory.getStackInSlot(i);
+            if (filter.test(stack)) {
+                if (found == null)
+                    found = Lists.newArrayList();
+
+                found.add(stack);
+            }
+        }
+
+        return found == null ? Collections.emptyList() : found;
+    }
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/ModifiableValue.java b/src/main/java/com/wayoftime/bloodmagic/core/util/ModifiableValue.java
new file mode 100644
index 00000000..d22e288b
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/core/util/ModifiableValue.java
@@ -0,0 +1,40 @@
+package com.wayoftime.bloodmagic.core.util;
+
+import java.util.Objects;
+
+public class ModifiableValue<T> {
+
+    private T value;
+
+    public ModifiableValue(T value) {
+        this.value = value;
+    }
+
+    public T getValue() {
+        return value;
+    }
+
+    public void setValue(T value) {
+        this.value = value;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof ModifiableValue)) return false;
+
+        ModifiableValue<?> that = (ModifiableValue<?>) o;
+
+        return value != null ? value.equals(that.value) : that.value == null;
+    }
+
+    @Override
+    public int hashCode() {
+        return value != null ? value.hashCode() : 0;
+    }
+
+    @Override
+    public String toString() {
+        return Objects.toString(value);
+    }
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/register/IModelLocator.java b/src/main/java/com/wayoftime/bloodmagic/core/util/register/IModelLocator.java
new file mode 100644
index 00000000..c23d6f7e
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/core/util/register/IModelLocator.java
@@ -0,0 +1,16 @@
+package com.wayoftime.bloodmagic.core.util.register;
+
+import net.minecraft.util.ResourceLocation;
+
+import javax.annotation.Nonnull;
+
+public interface IModelLocator {
+
+    /**
+     * Allows an item to point to a custom model path instead of using the registry name.
+     *
+     * @return the path to the model.
+     */
+    @Nonnull
+    ResourceLocation getModelPath();
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/core/type/DemonWillType.java b/src/main/java/com/wayoftime/bloodmagic/core/will/DemonWill.java
similarity index 61%
rename from src/main/java/com/wayoftime/bloodmagic/core/type/DemonWillType.java
rename to src/main/java/com/wayoftime/bloodmagic/core/will/DemonWill.java
index e61c6e46..afca4f50 100644
--- a/src/main/java/com/wayoftime/bloodmagic/core/type/DemonWillType.java
+++ b/src/main/java/com/wayoftime/bloodmagic/core/will/DemonWill.java
@@ -1,10 +1,10 @@
-package com.wayoftime.bloodmagic.core.type;
+package com.wayoftime.bloodmagic.core.will;
 
 import net.minecraft.util.IStringSerializable;
 
 import java.util.Locale;
 
-public enum DemonWillType implements IStringSerializable {
+public enum DemonWill implements IStringSerializable {
 
     RAW,
     CORROSIVE,
@@ -13,7 +13,7 @@ public enum DemonWillType implements IStringSerializable {
     STEADFAST,
     ;
 
-    public static final DemonWillType[] VALUES = values();
+    public static final DemonWill[] VALUES = values();
 
     @Override
     public String getName() {
diff --git a/src/main/java/com/wayoftime/bloodmagic/core/will/DemonWillHolder.java b/src/main/java/com/wayoftime/bloodmagic/core/will/DemonWillHolder.java
new file mode 100644
index 00000000..8590afdf
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/core/will/DemonWillHolder.java
@@ -0,0 +1,67 @@
+package com.wayoftime.bloodmagic.core.will;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTBase;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.common.util.INBTSerializable;
+
+import javax.annotation.Nullable;
+
+public class DemonWillHolder implements INBTSerializable<NBTTagCompound> {
+
+    private DemonWill type;
+    private double amount;
+
+    public DemonWillHolder(DemonWill type, double amount) {
+        this.type = type;
+        this.amount = amount;
+    }
+
+    private DemonWillHolder() {
+        // No-op
+    }
+
+    public DemonWill getType() {
+        return type;
+    }
+
+    public double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(double amount) {
+        this.amount = amount;
+    }
+
+    public void modifyAmount(double change) {
+        this.amount += change;
+    }
+
+    @Override
+    public NBTTagCompound serializeNBT() {
+        NBTTagCompound tag = new NBTTagCompound();
+        tag.setInteger("type", type.ordinal());
+        tag.setDouble("amount", amount);
+        return tag;
+    }
+
+    @Override
+    public void deserializeNBT(NBTTagCompound nbt) {
+        this.type = DemonWill.VALUES[nbt.getInteger("type")];
+        this.amount = nbt.getDouble("amount");
+    }
+
+    @Nullable
+    public static DemonWillHolder fromStack(ItemStack stack) {
+        if (!stack.hasTagCompound()) // Definitely hasn't been bound yet.
+            return null;
+
+        NBTBase willTag = stack.getTagCompound().getTag("demonWill");
+        if (willTag.getId() != 10 || willTag.isEmpty()) // Make sure it's both a tag compound and that it has actual data.
+            return null;
+
+        DemonWillHolder holder = new DemonWillHolder();
+        holder.deserializeNBT((NBTTagCompound) willTag);
+        return holder;
+    }
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/core/will/DemonicWillEventHandler.java b/src/main/java/com/wayoftime/bloodmagic/core/will/DemonicWillEventHandler.java
new file mode 100644
index 00000000..b2252d9c
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/core/will/DemonicWillEventHandler.java
@@ -0,0 +1,100 @@
+package com.wayoftime.bloodmagic.core.will;
+
+import com.wayoftime.bloodmagic.BloodMagic;
+import com.wayoftime.bloodmagic.core.RegistrarBloodMagicItems;
+import com.wayoftime.bloodmagic.core.util.InventoryUtil;
+import com.wayoftime.bloodmagic.event.DemonicWillEvent;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.monster.IMob;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumHand;
+import net.minecraft.world.EnumDifficulty;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.util.FakePlayer;
+import net.minecraftforge.event.entity.living.LivingDropsEvent;
+import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.items.CapabilityItemHandler;
+import net.minecraftforge.items.IItemHandler;
+
+import java.util.function.Predicate;
+
+@Mod.EventBusSubscriber(modid = BloodMagic.MODID)
+public class DemonicWillEventHandler {
+
+    @SubscribeEvent
+    public static void gatherDrops(LivingDropsEvent event) {
+        if (!(event.getEntityLiving() instanceof IMob) && event.getEntityLiving().getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL)
+            return;
+
+        Entity sourceEntity = event.getSource().getTrueSource();
+        if (!(sourceEntity instanceof EntityPlayer) || sourceEntity instanceof FakePlayer)
+            return;
+
+        EntityPlayer player = (EntityPlayer) sourceEntity;
+        ItemStack held = player.getHeldItem(EnumHand.MAIN_HAND);
+        if (held.isEmpty() || !(held.getItem() instanceof ISentientEquipment))
+            return;
+
+        DemonWillHolder willDrop = ((ISentientEquipment) held.getItem()).getWillDrop(player, event.getEntityLiving(), held, event.getLootingLevel());
+        if (willDrop == null)
+            return;
+
+        DemonicWillEvent.GatherWillDrops willDropEvent = new DemonicWillEvent.GatherWillDrops(player, event.getEntityLiving(), held, event.getLootingLevel(), willDrop.getAmount());
+        if (MinecraftForge.EVENT_BUS.post(willDropEvent))
+            return;
+
+        willDrop.setAmount(willDropEvent.getDroppedWill());
+        IItemHandler inventory = player.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
+        if (inventory == null)
+            return; // shut up intellij this is never going to happen
+
+        InventoryUtil.findMatchingItems(inventory, InventoryUtil.NO_EMPTY.and(new WillContainerFilter(willDrop.getType()))).forEach(stack -> {
+            if (willDrop.getAmount() <= 0)
+                return;
+
+            IWillContainer container = (IWillContainer) stack.getItem();
+            DemonWillHolder holder = container.getDemonWill(stack);
+            if (holder == null)
+                holder = new DemonWillHolder(willDrop.getType(), 0);
+
+            holder.modifyAmount(Math.min(willDrop.getAmount(), container.getMaxContained(stack)));
+            willDrop.modifyAmount(-holder.getAmount());
+        });
+
+        if (willDrop.getAmount() >= 0) {
+            ItemStack drop = new ItemStack(RegistrarBloodMagicItems.MONSTER_SOUL);
+            ((IWillContainer) drop.getItem()).applyDemonWill(drop, willDrop);
+            event.getDrops().add(new EntityItem(player.getEntityWorld(), event.getEntity().posX, event.getEntity().posY, event.getEntity().posZ, drop));
+        }
+    }
+
+    private static class WillContainerFilter implements Predicate<ItemStack> {
+
+        private final DemonWill type;
+
+        public WillContainerFilter(DemonWill type) {
+            this.type = type;
+        }
+
+        @Override
+        public boolean test(ItemStack stack) {
+            if (stack.getItem() instanceof IWillContainer) {
+                IWillContainer container = (IWillContainer) stack.getItem();
+                double max = container.getMaxContained(stack);
+                DemonWillHolder holder = container.getDemonWill(stack);
+                if (holder == null)
+                    return true;
+
+                if (holder.getType() != type)
+                    return false;
+
+                return holder.getAmount() < max;
+            }
+
+            return false;
+        }
+    }
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/core/will/ISentientEquipment.java b/src/main/java/com/wayoftime/bloodmagic/core/will/ISentientEquipment.java
new file mode 100644
index 00000000..adcfe479
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/core/will/ISentientEquipment.java
@@ -0,0 +1,43 @@
+package com.wayoftime.bloodmagic.core.will;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.monster.EntitySlime;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+import javax.annotation.Nullable;
+
+public interface ISentientEquipment {
+
+    @Nullable
+    default DemonWillHolder getWillDrop(EntityPlayer player, EntityLivingBase attacked, ItemStack stack, int looting) {
+        double willModifier = attacked instanceof EntitySlime ? 0.67 : 1;
+        DemonWill type = getDemonWill(stack);
+        DemonWillHolder ret = null;
+        for (int i = 0; i <= looting; i++) {
+            if (i == 0 || player.getEntityWorld().rand.nextDouble() <= 0.4) {
+                if (ret == null)
+                    ret = new DemonWillHolder(type, 0);
+
+                ret.modifyAmount(willModifier * (getWillDropAmount(stack) * player.getEntityWorld().rand.nextDouble() * (attacked.getMaxHealth() / 20D)));
+            }
+        }
+
+        return ret;
+    }
+
+    double getWillDropAmount(ItemStack stack);
+
+    default boolean isActivated(ItemStack stack) {
+        return stack.hasTagCompound() && stack.getTagCompound().getBoolean("sentientActivated");
+    }
+
+    default DemonWill getDemonWill(ItemStack stack) {
+        NBTTagCompound tagCompound = stack.getTagCompound();
+        if (tagCompound == null || !tagCompound.hasKey("willType"))
+            return DemonWill.RAW;
+
+        return DemonWill.valueOf(tagCompound.getString("willType"));
+    }
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/core/will/IWillContainer.java b/src/main/java/com/wayoftime/bloodmagic/core/will/IWillContainer.java
new file mode 100644
index 00000000..c4058151
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/core/will/IWillContainer.java
@@ -0,0 +1,38 @@
+package com.wayoftime.bloodmagic.core.will;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+import javax.annotation.Nullable;
+import java.util.List;
+
+public interface IWillContainer {
+
+    double getMaxContained(ItemStack stack);
+
+    @Nullable
+    default DemonWillHolder getDemonWill(ItemStack stack) {
+        return DemonWillHolder.fromStack(stack);
+    }
+
+    default void applyDemonWill(ItemStack stack, DemonWillHolder holder) {
+        NBTTagCompound tag = stack.getTagCompound();
+        if (tag == null)
+            stack.setTagCompound(tag = new NBTTagCompound());
+
+        tag.setTag("demonWill", holder.serializeNBT());
+    }
+
+    static void appendTooltip(ItemStack stack, List<String> tooltip) {
+        if (!(stack.getItem() instanceof IWillContainer))
+            return;
+
+        DemonWillHolder holder = ((IWillContainer) stack.getItem()).getDemonWill(stack);
+        if (holder == null)
+            return;
+
+        // TODO - Localize
+        tooltip.add("Will: " + holder.getType());
+        tooltip.add("Amount: " + holder.getAmount());
+    }
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/event/DemonicWillEvent.java b/src/main/java/com/wayoftime/bloodmagic/event/DemonicWillEvent.java
new file mode 100644
index 00000000..f8c80fee
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/event/DemonicWillEvent.java
@@ -0,0 +1,52 @@
+package com.wayoftime.bloodmagic.event;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fml.common.eventhandler.Cancelable;
+import net.minecraftforge.fml.common.eventhandler.Event;
+
+public class DemonicWillEvent extends Event  {
+
+    @Cancelable
+    public static class GatherWillDrops extends DemonicWillEvent {
+
+        private final EntityPlayer player;
+        private final EntityLivingBase attacked;
+        private final ItemStack stack;
+        private final int looting;
+        private double droppedWill;
+
+        public GatherWillDrops(EntityPlayer player, EntityLivingBase attacked, ItemStack stack, int looting, double droppedWill) {
+            this.player = player;
+            this.attacked = attacked;
+            this.stack = stack;
+            this.looting = looting;
+            this.droppedWill = droppedWill;
+        }
+
+        public EntityPlayer getPlayer() {
+            return player;
+        }
+
+        public EntityLivingBase getAttacked() {
+            return attacked;
+        }
+
+        public ItemStack getStack() {
+            return stack;
+        }
+
+        public int getLooting() {
+            return looting;
+        }
+
+        public double getDroppedWill() {
+            return droppedWill;
+        }
+
+        public void setDroppedWill(double droppedWill) {
+            this.droppedWill = droppedWill;
+        }
+    }
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemMonsterSoul.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemMonsterSoul.java
new file mode 100644
index 00000000..cdbd3224
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemMonsterSoul.java
@@ -0,0 +1,56 @@
+package com.wayoftime.bloodmagic.item;
+
+import com.wayoftime.bloodmagic.BloodMagic;
+import com.wayoftime.bloodmagic.core.util.register.IModelLocator;
+import com.wayoftime.bloodmagic.core.will.DemonWill;
+import com.wayoftime.bloodmagic.core.will.DemonWillHolder;
+import com.wayoftime.bloodmagic.core.will.IWillContainer;
+import net.minecraft.client.util.ITooltipFlag;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.NonNullList;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.world.World;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.List;
+
+public class ItemMonsterSoul extends ItemMundane implements IWillContainer, IModelLocator {
+
+    public ItemMonsterSoul() {
+        super("monster_soul");
+
+        setMaxStackSize(1);
+        addPropertyOverride(new ResourceLocation(BloodMagic.MODID, "will"), (stack, worldIn, entityIn) -> {
+            DemonWillHolder holder = getDemonWill(stack);
+            return holder == null || holder.getType() == DemonWill.RAW ? 0F : Float.parseFloat("0." + holder.getType().ordinal());
+        });
+    }
+
+    @Override
+    public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
+        for (DemonWill will : DemonWill.VALUES) {
+            ItemStack stack = new ItemStack(this);
+            applyDemonWill(stack, new DemonWillHolder(will, 0));
+            items.add(stack);
+        }
+    }
+
+    @Override
+    public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
+        IWillContainer.appendTooltip(stack, tooltip);
+    }
+
+    @Override
+    public double getMaxContained(ItemStack stack) {
+        DemonWillHolder holder = getDemonWill(stack);
+        return holder == null ? Double.MAX_VALUE : holder.getAmount();
+    }
+
+    @Nonnull
+    @Override
+    public ResourceLocation getModelPath() {
+        return new ResourceLocation(BloodMagic.MODID, "soul/monster_soul");
+    }
+}
diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemSentientSword.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemSentientSword.java
new file mode 100644
index 00000000..9c351f71
--- /dev/null
+++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemSentientSword.java
@@ -0,0 +1,50 @@
+package com.wayoftime.bloodmagic.item;
+
+import com.wayoftime.bloodmagic.BloodMagic;
+import com.wayoftime.bloodmagic.core.util.register.IModelLocator;
+import com.wayoftime.bloodmagic.core.will.DemonWill;
+import com.wayoftime.bloodmagic.core.will.ISentientEquipment;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.ItemSword;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.NonNullList;
+import net.minecraft.util.ResourceLocation;
+
+import javax.annotation.Nonnull;
+
+public class ItemSentientSword extends ItemSword implements ISentientEquipment, IModelLocator {
+
+    public ItemSentientSword() {
+        super(ToolMaterial.IRON);
+
+        setRegistryName("sentient_sword");
+        setTranslationKey(BloodMagic.MODID + ":sentient_sword");
+        setCreativeTab(BloodMagic.TAB_BM);
+
+        addPropertyOverride(new ResourceLocation(BloodMagic.MODID, "will"), (stack, worldIn, entityIn) -> Float.parseFloat("0." + getDemonWill(stack).ordinal()));
+        addPropertyOverride(new ResourceLocation(BloodMagic.MODID, "active"), (stack, worldIn, entityIn) -> isActivated(stack) ? 1.0F : 0.0F);
+    }
+
+    @Override
+    public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
+        for (DemonWill will : DemonWill.VALUES) {
+            ItemStack stack = new ItemStack(this);
+            NBTTagCompound tag = new NBTTagCompound();
+            tag.setString("willType", will.name());
+            stack.setTagCompound(tag);
+            items.add(stack);
+        }
+    }
+
+    @Override
+    public double getWillDropAmount(ItemStack stack) {
+        return 1;
+    }
+
+    @Nonnull
+    @Override
+    public ResourceLocation getModelPath() {
+        return new ResourceLocation(BloodMagic.MODID, "soul/sentient_sword");
+    }
+}
diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang
index e470cfe6..c65b4d7a 100644
--- a/src/main/resources/assets/bloodmagic/lang/en_US.lang
+++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang
@@ -57,6 +57,8 @@ item.bloodmagic:demon_will_crystal_corrosive.name=Corrosive Demon Will Crystal
 item.bloodmagic:demon_will_crystal_destructive.name=Destructive Demon Will Crystal
 item.bloodmagic:demon_will_crystal_vengeful.name=Vengeful Demon Will Crystal
 item.bloodmagic:demon_will_crystal_steadfast.name=Steadfast Demon Will Crystal
+item.bloodmagic:sentient_sword.name=Sentient Sword
+item.bloodmagic:monster_soul.name=Monster Soul
 
 # Death
 
@@ -68,6 +70,9 @@ fluid.bloodmagic:life_essence=Life Essence
 
 # Living Upgrades
 
+upgrade.bloodmagic:arrow_protect.name=Arrow Protect
+upgrade.bloodmagic:arrow_shot.name=Arrow Shot
+upgrade.bloodmagic:critical_strike.name=Critical Strike
 upgrade.bloodmagic:jump.name=Jump Boost
 
 # Chat
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul.json b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul.json
new file mode 100644
index 00000000..d41f788f
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul.json
@@ -0,0 +1,32 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/monster_soul_raw"
+  },
+  "overrides": [
+    {
+      "predicate": {
+        "bloodmagic:will": 0.1
+      },
+      "model": "bloodmagic:item/soul/monster_soul_corrosive"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.2
+      },
+      "model": "bloodmagic:item/soul/monster_soul_destructive"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.3
+      },
+      "model": "bloodmagic:item/soul/monster_soul_vengeful"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.4
+      },
+      "model": "bloodmagic:item/soul/monster_soul_steadfast"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_corrosive.json b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_corrosive.json
new file mode 100644
index 00000000..27b7461b
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_corrosive.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/monster_soul_corrosive"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_destructive.json b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_destructive.json
new file mode 100644
index 00000000..e1224220
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_destructive.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/monster_soul_destructive"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_raw.json b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_raw.json
new file mode 100644
index 00000000..2a9f7797
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_raw.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/monster_soul_raw"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_steadfast.json b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_steadfast.json
new file mode 100644
index 00000000..714f481e
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_steadfast.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/monster_soul_steadfast"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_vengeful.json b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_vengeful.json
new file mode 100644
index 00000000..bf62db7e
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/monster_soul_vengeful.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/monster_soul_vengeful"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword.json
new file mode 100644
index 00000000..41be86f5
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword.json
@@ -0,0 +1,70 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_raw"
+  },
+  "overrides": [
+    {
+      "predicate": {
+        "bloodmagic:active": 1.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_raw_active"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.1,
+        "bloodmagic:active": 0.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_corrosive"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.1,
+        "bloodmagic:active": 1.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_corrosive_active"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.2,
+        "bloodmagic:active": 0.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_destructive"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.2,
+        "bloodmagic:active": 1.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_destructive_active"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.3,
+        "bloodmagic:active": 0.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_vengeful"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.3,
+        "bloodmagic:active": 1.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_vengeful_active"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.4,
+        "bloodmagic:active": 0.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_steadfast"
+    },
+    {
+      "predicate": {
+        "bloodmagic:will": 0.4,
+        "bloodmagic:active": 1.0
+      },
+      "model": "bloodmagic:item/soul/sentient_sword_steadfast_active"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_corrosive.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_corrosive.json
new file mode 100644
index 00000000..7fffc02f
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_corrosive.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_corrosive"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_corrosive_active.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_corrosive_active.json
new file mode 100644
index 00000000..8a82d0ed
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_corrosive_active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_corrosive_active"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_destructive.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_destructive.json
new file mode 100644
index 00000000..eb1f96c1
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_destructive.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_destructive"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_destructive_active.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_destructive_active.json
new file mode 100644
index 00000000..e20babf3
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_destructive_active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_destructive_active"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_raw_active.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_raw_active.json
new file mode 100644
index 00000000..888581e1
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_raw_active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_raw_active"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_steadfast.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_steadfast.json
new file mode 100644
index 00000000..e41cdbbc
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_steadfast.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_steadfast"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_steadfast_active.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_steadfast_active.json
new file mode 100644
index 00000000..8eac4d16
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_steadfast_active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_steadfast_active"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_vengeful.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_vengeful.json
new file mode 100644
index 00000000..c06e6227
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_vengeful.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_vengeful"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_vengeful_active.json b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_vengeful_active.json
new file mode 100644
index 00000000..45418c5d
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic/models/item/soul/sentient_sword_vengeful_active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "item/generated",
+  "textures": {
+    "layer0": "bloodmagic:items/soul/sentient_sword_vengeful_active"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_corrosive.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fa94bb5c3d700340c184979fd146d14c61c094b
GIT binary patch
literal 932
zcmV;V16%xwP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru;0p^D0|(cm9*_V403B&m
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00Rg~L_t(I%YBn?Xw-E8
z#y{WhZ@=yC=We@k|GMUl8)lnsUEDEEx5TEGF)=M+9LdlKR|H127rl`JUnG)b3Q-M7
zBgjc&p)Yc#kqteOO?_d`8SGET+RoiM?$36+KihqK5fe1)dG)+_czED>9(V*@GrQGi
z3;R^(zzzklVXd3$Ck@tz8~|+D=E7k!J<yjdl3?HomR^5Oo!okcGF?ZPlF;2YHPjvv
zJNw#Iwl)d;B%;G^kVPQ-ut7uj%c{5IA}#A$u-Yt?7EAec?|C|JcB<~sQIw{!yC<Z2
zn!+NN%l$h+@##F-**Tm}JB_RBd1ZMEb^hgi+0o5`Lmv^DPH=GhA>Qk6Qy)9V1VC%E
z6ZyikHr^O+SC`-HV@;q5%>+N3IzwFDXM@j2&+#J!t2ffRawQVbW=gPIax^qF5Kq}C
ziRJA$X4B{k1zc52_~Z8>*1y!sh1<8dpNaGQQ;kg0N3*>d4T((Z0K{T3giuJmRHw>r
zMFRO$mbOisFv`rNlW7LSgE%UzG}-)|`|B6p-TMy5y3X?9$R1Tzreii~NT)T<g_f%#
zaAX}fZeAxgF-4(JVDQoqUayyZhri%TtRJ7Nmda8Sx`ZTCIBb<HF=mlJ{}!d%?P7(q
z22Im&dMxz!4&V>^Fk8$RhQZ*-I1}j@2lgMPtEZDsmYx%l$OO0Vq>%u@D;{;C<0SPf
z>QKoAG)<?F$YAJZjB<m4YyG$@oXpN-h~~$b%Vda8CjbzOHGWgvqmJ$DrPf=+=vagr
zZw<?Q^=K94BvLbk!(mpv=pp*nHF0Wu>cI}=B6(eYF18(fhLPb>UOT#$KZi$|92z4Z
zoyJyf5b*n{YqWz94^3Y@`h`y?Usbk^cSPd+Ds}pU%a{!lfz?e^xE-AM{w({y4YE~!
zCH~W3d$o%#W((gXlkB>;OU+LeIsX2S<mcx}&qF~%*VoH<+j>bn)&L;nagjse&T14X
zviV-S%BAvH%vBWh<o_pFgr};KHRb=@_G)^L@kHvey1xNPMH)dtXx;h%0000<MNUMn
GLSTZz8nBB1

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_destructive.png
new file mode 100644
index 0000000000000000000000000000000000000000..6b2973edd60d612944df78ee0c67682b5910a053
GIT binary patch
literal 938
zcmV;b16BNqP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru;0p^D0u3&0#?Jr%03B&m
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00Rz5L_t(I%YBnwY*Tdr
z#ees<ckS)k(XL;1OGnW-n4{D!<!i(bU}A_UN-`G=YGN1<0uqhkLHD3Bx(Cd%B^nvH
zgs5cdV#sD9n_$8~i*q0eOgF*`%OrK_YF%$XR=Vx}eK1=xf}W@IaPrG}I0x=h=JH-K
zfBju?>6;e>z?O|Z%F8S~*60Rc$4)P9r+G1NTrl;u_i?6ky?EwO4~kJi)@82uZWqrt
zPe=n_G>8?B6kGUCnvD8D)`2_#(gI-URFi1?^emxJ2&dhKE{f>?wx6#$n`mr0j=^N0
z>z$_wAB;$2V`FHVwzNTIS%GYJ29L|dy6`G0!*$dIA7syK9khMiOkz@FS92>v?`;?E
z7sn-l&2=8+$3sq{eGOvYo9C$whA|tVySoQb_=`|okP}^PlvUMJy|xMjWb#H_wmVc;
zSCi137^ey@ve`8A=~)~~F~iqJdGe{v3=a*H%Ot1_J_N}DoXa<XkV)kg0H&s<kR*Yu
z6e+k$?Vy7;ooCzDZJ3HwQd*kG;O~?;?3DUziH)4)?ZXFoqrI1rV+VxEq@bD&$R2xw
zO|M*(+FKvt%CDD+#p2A)&T{UjQ38Pgtu04M-24Sk;C@VI6Y@NejpKGMqu7!~{(fMR
za-SEEwE}~|fZt)G?}tm&Ke`56v5LiFVeCeXOft^<E$wu*HnC#=X=!32#&08OWPl5A
z`Nf|7UsAPlC8^Xr2BX4sB8Q@=Sc@$T{yc=O)JrCpqmUeDCYK|ToL;&Ez2|^<silvA
zzk=~UCI|#7SW~--5|0&aCPO3=;fYE=CpreD?%VOjCCZCt=SR|!-9e%^Z*lz9jYMzU
zV)W`blhGtr*+R|3HLP~IK$4bBU%LAXf3`m-`a4FXt%uf%!^eKaqMBK^A&hUio3Bsz
z^4YWX$oq~;{|VSt?q!E+<76tuna^Jq@xOIm|L_!Z`W$mA$SQQMe*pUj=cIcA02=*X
z?jZ2x4e026a->0MnF4Bw10|pO{{{>4JC?D*`tNNorf0Z4t=%*C4@?#yuvHb^QUCw|
M07*qoM6N<$f}bm^UH||9

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_raw.png b/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_raw.png
new file mode 100644
index 0000000000000000000000000000000000000000..63ebca42c3a001dfa6d829e45da1e979f3254e1a
GIT binary patch
literal 939
zcmV;c162HpP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI30
z09v@2#2Ekp010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~<sAEI7@n|AYVl03B&m
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00R$6L_t(I%XO1oXp?ss
z#ee_z&D*?9Ta%ivMVs1M-J-2FwpLcPRJ%H5N}V#1S#h9)4M7C)LZ%FQGsfKLC?Y80
zb}=uUURY$%6(_D;+c~u;igB)`Y1LVi^dnzy8x!;2#i*!r=juFgp2LCXIq(WT9!tp2
zQ&R5ey)FS7YCX)IW1)V#6M#*d-8k*~bG>PXG*-QV<+sPO{evbn&4glt4Y%*h$IV;B
z)=S-TVnG@8xWwq72b3%@{jx#nv5WH3?wzcvtE0d^8%;<$TMn}O+8ud%#}-u8%*L}p
z`FnMpNTpK$P4INVn@lAW*xfD`Ew7<&VHpek%Q*SbhqN4RB{C7EwW*nRZ*<6@-6sIn
zu5_WSskF20?x5`2w~Oi;KO$GB{rq{xvaoD%1#PEJ(@<2z5}yx{Xo)zEf)wTD<wRn3
zOyQ>v^kkBBCPuz3hkJK!v9|F&Zru$KHVpjpOX&t`T}~85kTVelARG=OghbJDG;9tB
zAeo9!ux@=Lx^5;OjS}eV#cH+UcRKjx!6Wt^In2cahiMA_CCz4yTwO(R*&<wRs1>Wf
zIYWPcKjFV0k<O&K*L8)Gk`j)!wQ>DPh!T$*T~k0jBSadf-AbM%iK+9~QC6>9L2;1{
zRaGhQy13ENK~>{=;)w(ni-qCfFlNofw_kk8o*#eUyE#jRk(wql9!CLi^>oOy&F}Np
zA|ILP7@ANq;t_PSh9y6bYkyqDX|-V_3`V96rVN9~_#^;g=8Svgu<YFVDaEDp7#SL-
zxO6_grPbuka+8=$($~|2cS8;OCkMp2hoR?xpv;itVxFk@`Vd0{gVdh-ilKq~1Oqo2
z9~~fXmWF?M6^;ro2=UVED=!WgJoTco^$71&ZxgGIwh#ye=<T}9lLvn?yU<McXD2Bf
z`ANRGBVH}j*12vr<rZ)z8l^IHQ)WY>wC_JeCX<C{I!H5R-|yjyZKHUt0l;>zn-mhy
zv`UsNYUpQ~j>fQA@`-5~PKXuae-q5WTWIC&{C{iP7oXzcWbC!Ne*m9-9HJipK|cTh
N002ovPDHLkV1nVztb_mn

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_steadfast.png b/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_steadfast.png
new file mode 100644
index 0000000000000000000000000000000000000000..729f4fb83fb8a58e722bec472a3c8bc77d7f23f7
GIT binary patch
literal 931
zcmV;U16=%xP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru;0p^D12AtMyPp6603B&m
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00Rd}L_t(I%XO1oXxn8N
z#eeVn&p&C>W@&6bnudgot+Qp_NB6<3vuu-XrEV$~Aw`N#ab7sRQ08{g3l&7Pg`v`+
z(#<PHL8a57L~&48?5ORmikc3s%d)vPNmu(%(zHpFyk1DhHs`rI51i+4;CT+*f`KQq
zD)Mqk^*l1B0Pbz^;jgo?BkTrX|ASuKH5J$Ore(5wQ!PgWQ|gV+9zg0kNJ(G&1=aso
zhj{VfA>}t#Lbz5;Px?TXfyJ8*+BTn7?|sun>-JWpy#~x>zWAz}*AM=z`uf9|HH|~}
zC)8`dZxQ)?{=W%U71l7gFpqS3sA$~Ew)<8i>zg_8ZWj-|(u<Kac>h=jPq&Y%BQduC
z*mbuD)6NYwbgubcojCgx8@Fr%DoCCBgllV$(zLmWhT|t`Y_V`*WQj9C)|AC%&*Ss0
zWhPz5lq$Gb$jp;jDq*g4lAQR3+Ffl-j7KTX<fz-Ql5?kFYr7XAp{N@Gq*5t_P)OaZ
zb4Rrc1^m63#=Cbf%4(sQF(~~ujKkqz-3~XypI&C?v)x2Kf1bmgX=SnKSSvK7r+S8$
zMq0!Zt#9(f`EgY8Dl9FLnHWS1h4``WEq*$apswDFW;atpQb>Zk#zCcR9{KgR)A)T}
zDuW(0O+(lN%#KA^v3@tgYR6);k+^h;Ybk@Xy{~fM;D_`?{30H|%CFH365xPuM7{k{
z7Y%ndqDlrPU4z^lSaq;fp+-k=d8(PuWl6^hEaY;`%+3KImd|+nnX)<+d6Zx<L_8iN
z6bw<{upX*bKsHT$c$i>d52NFci;u4)um6EuCWrc@*t4#eKQB(w*3!=(7bl6uCSZ0N
zY*hrCn-Q)i5aOoSmp2Ya27ID@<1t+4o5j9+dWc4&41PDnV&XD5os122vu)p$x^YL`
zTBZ)am;F{d9~cImk0sPxImwp;&rvECu~Ni}Wc#X<yf9cTZfgJ#4tU9<@GWYTDYH5}
zrBoq}bXvjCIsA?k|C?YL0jGnzs{XC*xy%Ar=F+#-{R0G^8pyayNdf=>002ovPDHLk
FV1iugt5^U4

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/soul/monster_soul_vengeful.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4f1683b8cab0ce49cc1c07073e30f292dfc57d9
GIT binary patch
literal 938
zcmV;b16BNqP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru;0p^D0xFAVbEE(O03B&m
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00Rz5L_t(I%XO1oOq+EW
z#ee_z?Mrz(p=@obZBtei>K0rWWgECoadX5AnID*l^JB8i7%xb?Fka||F-DDMw-~p9
zb1u<nz?hhk>DUBjB2gq5ah9O91%WJU87=*Qx0L?9AT--D&((R7^PJ~goCj_};pnrn
z@Xp(E>Zw)<aNvFy9=C<&b_W2hk2`VLN{f22K@JA)WWe7j9~=4!P18`MMwj2iBk`oT
z*tAR9Rweth=S3#$VS0LwSS$vBX~W>7+GhFu$S*t)4C1hCqF^eabKo-LFTWt4K6M6F
zl?)y_DtG;LQ5c3%Oi(naSz9Huyo}pgL9=fwo&zoHbGv!&)6Y2h+N&fI*J<nN=GT@Z
z(jJWpfc<+bF+Eggqi<`2JUlW<pnebfn&kAQA9$;7CpArtd=c1*tgC0sm5KFBD+cy5
z1DC6o_)-B=EN3U3PP4XZVvEJeczBAoy}JpIj*>|%P`&*=xOyJ_U<*ivl)4@|7K<T-
zMA1q#Dy`*!Lej|dWbi?B&CKFTh6|AybcX{y7$njEEgy7raBR4r$@X`p*{q?LswkBe
zacX}Hi8BE=<6~n)6G?LUJpGY>@w?r8*z*aQ%fnREY(vw_P%y!@MI1IOn=BcW3&U6O
zxSUx04XCP0b%~X}KPP#j`fjXdGZu@5f97W~=I3~`r<*TddIjJ2r^L+6JXb;~6o4OH
z_407<Ikw-sjRj#sEzyXr6fkRM%Jot%O@uI4c}ZteFg49`HcR|^;^rb1I*-dE-}U0F
z@)4bh;;X8n;T|uWb-|*MVt90vLpDDrLPMf=_FAzAN|AKEF1o#Y2uC8E4LnRZGR?%?
z0<%j6teTbGwL54iy9<Q4srt%|gFe_LPWu`;`^Pup<c@uWLLml!9^>zXfxX;C=kH(h
z)uZpr8+XL5&(!8|(yEv7c{0hsi*Lx)g%lk_=g8-C<VmB59DTND5aY+iZ4Ch0y-o}y
zt`(I61wL+nPZCdo+YZ?r%86s*e-muLyV*+99qVs9l3Hdqv2<JAe}aD^Q3k6Fg#Z8m
M07*qoM6N<$f*87|PXGV_

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_corrosive.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0bd985f61ed278c36c652e2ec8c0aded535e033
GIT binary patch
literal 862
zcmV-k1EKthP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~${E2nMX%A>sf40_#ac
zK~y-)m6K0sTy+q~Kl6LLv;}J*X%}MOTHJl<Zrw_nbk&9)dJy}^)~M8jP_5WnVv?=@
z@FwU*NU0>3L|Zf^6$+))3SvM!cn}Lxgeq1OSQTttBb&`jtnOyJFYo=vLz|7_$$`1d
zFvHAuJ|n8i|FPHg7zTsIl2b*ZC<4G3!*VkbK}4EGBElYB&o=uMYtL=am@xp<AHOcK
ze->J6F}IVC8W*`8Q&l?c0a`C6b@yXA0M1T)!8&7!Ei5b$1OblYpsGAKG^ky}?J_#B
zpK#48RvY2ekfrrvQhRo8<Y!Z&NC|*!+#zPI#c>?MFy#3YFKX9tyL@xR;oFI?xWB#1
z$=~+Taz3dKK9r=g<_15R8Ro|W?tY;vkH{D?V+>&!a`@GwN@5iji?+<@sY5%Zd|J8l
z{080Co248rPz+1Vf6$<3;7{pX9D^8`wzf7Bi3A!&OdNlMD=*Jz_sCt6KLa;DbamJM
zEWa=LT%P|P|LjeYeSgW;`a4aL&GH4rai}i-(G;}xLQ?njZsA%m$JhQe^-05y!J71j
zW2h>}*QQn)SZjH2{1X{`?QO>1e2MCa)ra?PrXDr;k?Yhy6*l(OWb4gQtc5*ytmCp)
z0f?>K9i$c^2Chy|Q(W9at))TbOr1nuP4+fMu_#Zrv@^v#g8Y}V(xQ^?^7O(F?`!_>
z4$buBbR;M+5)??M)9QI1leU1WHoZw<xm+fj&+5VcXVmNN(9eH8r$<i~G}DvQR4S#z
zjX@@D0oQfab=@XlvP@!TTSgz)zMV^#zU11~UnF&JT9=lV*!{{AhzOqzeMArhh=`~v
zrP3{!$mX-^b$95~1BdjU&Xhjee+&S}aS#zY?%SlE=c(`e_`Z+py11@O6h*gINaxb}
zv42`O<ue+O$N%+AB0~R(agMz8E|p4!xw$!JXJ^Ufaw{u%-5pAx7-J}YSCn`>P8f!W
o2-e!BMyXT^5ot~~H8lmm-!YwH!#phE7XSbN07*qoM6N<$f{R&`wg3PC

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_corrosive_active.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_corrosive_active.png
new file mode 100644
index 0000000000000000000000000000000000000000..21d5375d4d98f35bdb884f330fbce700aaf7b436
GIT binary patch
literal 873
zcmV-v1D5=WP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~${E86TTzsxklo0`^Hn
zK~y-)U6W62R8<tlf9JlL2#M09g(j6Z5NBSQfzd$As5C5C7%2#%Mi(Xs29T7tga6{r
zL^mc?NV{njqBUhfLI`4FY|^-JK_oG3gn*W01R`Zb+v#foXF8qNdH1*|Gl(ZSi+fJa
z&G&uhJEE%8LRArw`rBHIh&)vLP!FrYV6miCkuVGaFvd{(?Ega|!ZuyOM*F%xc4{RN
zV*n_>JVE5YgVtKi{pO3tMef&BmG$;jZ9E&J^QANZCr8e)+*l&Bv$F(2fa5r*D*O6+
zwXMH}!JeH`UHS-1jBvcqYU9}$9a~m&-Q>xU2Ot%7h*)cJ9EWPP%3DX?*0%l@E*@~?
z(#X#|-BRS(pF6bSbc|=8i&0p5muu!WGs6L^4iy=z42h{x*#G`Pwbo*>Xu~Z%zIO|w
z6EEnp(<|A!D@AEZK(3l+dU&3Wo_p-542r5^nwpwuZf-`ykdaS6;+J=C(?0MxnG@*U
zZ(O$SO!3!(&xM&^@lVbZ>-vWc<<F%ibfmTcaU6<scj|&Ro{7=9YaQ3-|K{?Y9OW^?
z=H4Q0l_3dL`D|H&q3{N#rv8`1-%IZYM;ZF~9f|{%=eMt=99H<93Cd%_>aG$S<_E=E
z*!JjhE@%;85y2uHkWz>kxN`L>xw$7PHB=~^DAU|kVtZv!EXr#QEsQgR@W3ba$j>Q>
zHc!v|_LXM#Z`Nc-S_gux4g^_EBogX*9-}s^s!A>EE}Wd4B$Y|&?(RM6wYTbzw@&H7
zV_8jhq%|IoYk#FzM{QPJ*Hzbb>jsnB8j~B7`pl+HoIn2)H?RC5@pTDZSXiL*y;l$s
ze(3v_AP5i<QC0H!MKh7gq||F~)i-+f>J#hZ`eyfG0363bL}-0#je4G^zVGAvKCbKH
zx-MZDE>cLO6Z)P1wXVq|H5!dRbW9>b_mN=^eDVc_LV@Y&X{M&8NT<^eD0uCyN}w2H
z$X(7!G#aH^ts){=YwH@t<8ef!j%<8<9DsiT{0Vd7VsSBt00000NkvXXu0mjf*O8U0

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_destructive.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1f84dc5e93b0cc78748c25d5482e3ce7b9cd94a
GIT binary patch
literal 847
zcmV-V1F-ywP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~${E2P<xzVORhF0^CVN
zK~y-)m6Km+n^hRbfA9A-wHCBan3@p~zQnd$9PQdF2~&q4uHtr6=MV<6&RN=6k@ZIK
zN^q=F6bE5Vk-|_^5MeTg2)cP8O-pwp?oX-%VPVnQKP=9!wM~=rcoCaUyz;=gIfv(P
zp6B_!CW-&E^waBr2ROLosB_K%;CUV!kC_=}Ruh>S-P+1mGcWPQWLQ4cyPoFjR(Ge+
zIfv(Y0POc7*gt2II5+bGXD^2J;_gQP7(I6p)}XFfEK(|!@O>Xi93Sr0$-bziQ~N02
zeHRU$vF)(q>~vVq?A!+W4b}?PujL!67JT2QTrM*_a#Sb#qPBm;=hf3wJQlu9_`Byh
zGxd<VcRomCeGy9YWX>C@_${;NGI$#nhK7!)nujB3`dMQy?;-r*Ud~KDpq?jVG&Zcl
z?dxQ|tuWBEWQC_jH}WwgaqwWbJ{dc~vA5qMJ<x1GRh$f<yvVKJukz`SO{C&~+OK;u
z07M$Aec*W>zHj`ov{DQ7%c-z>cDGVlo8#tej?XUNM{3K8%|4w$67Sv<Y*qwtV_Ed}
z?$vBQtM}d+R3-Ph+?9`2nS4X1-hWf>>lB3*absER;C{MnE0U<&>>ZYuje5$=T$^Ea
z>0ui0b)3r9^V+VW6%u3M#DS(TIc{Rue<>@hh+S<_{gO@V$l)#}k}Yx<`f(TfiAJM}
z#bUVeK_u07jl#LPIl4MqHPC-Z9qlnK<W6fWeN>5Li-I7KJKu*JA0!fqC=!X(0JDu6
zJ3CsGNIuTQ_Y+*cnztR>1Ff&GGj!}(%rj05e?zHM!puw(g+di3>*{QktCUG36J#f{
zv_G-WKFXx=eIMr>kH%yAYgJ57Pa8m6TU!;ve7=f(e0x;uKYXCBj%I~Ip??jNnK3Xj
z&MU`9Sy)(LadDCP`FY~;_@;%9_LxegY7UpKT(eLpM7dnX%(!z>gCM}n@O>XMBbUno
Z@HY`hWy1|i?wSAq002ovPDHLkV1iQjjiLYm

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_destructive_active.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_destructive_active.png
new file mode 100644
index 0000000000000000000000000000000000000000..f522b9057f3f6f4c4eea571f665d788d94017fe9
GIT binary patch
literal 866
zcmV-o1D*VdP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~${E84YOA+j;;10`Eyg
zK~y-)Rg+C<oK+NtpYwg07y}wLG&*5G_-1U<j3sFjWrq4gL2SWx6BR^3np$HLQ^jn=
zl?$tp;7?^pCP<*@LJ%QRiVE6xA^9QQh;5x{QE2FB%nywrO`1$*?(1SYllH(_+;h2y
zbKdv4CW%r=!pzEN=Nx8sTTQ<o6L^4w3yuos8~~o@-PYvRM`p$W?clqa7xc|!7@y)@
z$IdHMc%DaT3g=w8(IGE_-K<IC^vtt5bw14VdmjQ|`1E<$go@?mWpcS3zV9Q6;{%;K
z(G?}td(iTC-a(aT)E{;_H67-u-Swb<U^81BZMLeog75p}^LYjakLpBMltY8Qy?Szr
zN5a<$pL<4QQx9-p_x)5?E<<jC^ckZ!zQP;((&m*`=<h$Gq8^T*<`0d${3PMe_iJpj
zj*iD;R99`l^(&-*D$rB2O7@9ilZ01WTT5MC9fgAU<lXl<mj08^UW@VlJ7{d7o{nSy
zH~wX1?pKD#E9q%k;qMoRtR%Eoa=`bE|5n$_f_^&{rekj-h0S@c&1LxN;yv`<yUyIc
zv`ON_y8=>GH!T9Vx+Xe1_iJu;LLa@?r$Xjyxl3QFF!`p2K7L#7hhAmZ#nm;@#C^2e
z4kS@g^4Sd5){IK>%v_#fWA#C*?{*ALRPy?sWwMD8!-?l=!eqFHvCT<2vg=|`b5ws#
zq;%wPyAsI;xwGAJXS)@RMiq<2aHD;aL@CP@&d<-&-qxs|?w8cs64PSlq()Lll}I)y
z2m-k?U2>y+ibNucL?UIttYl+bYl9NWM;ZTloQuEBTGOsTTU%T7zx6cc86OP%NG_Md
z%uEv5Y!N1FZ)=n*<VhqGOpH&^^4LN9BAvqbeVlVV9FOV7hM1n7Hh|{l<|2f%vqkLV
zyQ13q<x{n{?o=ogVq4T=_6&~l%JE?q7Z+JtT4G^gfp|Q=y+UhCOu1Z9hYOc3TPPGF
spU-1v-1<|4Ai&J<eIGL;lgR+^KRhFKlZb`nl>h($07*qoM6N<$f(2oovj6}9

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_raw.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_raw.png
new file mode 100644
index 0000000000000000000000000000000000000000..0bcaf3d9994f275fd3087d2ec6f7c8ae81780617
GIT binary patch
literal 15220
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

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_raw_active.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_raw_active.png
new file mode 100644
index 0000000000000000000000000000000000000000..02b5bd57e5564cd4f54199d028e47fd22eb535ab
GIT binary patch
literal 15261
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

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_steadfast.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_steadfast.png
new file mode 100644
index 0000000000000000000000000000000000000000..ade2c703399956000b07f4ce375aa695d240424e
GIT binary patch
literal 867
zcmV-p1DyPcP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~${E2p`C>i6Q_10`N&h
zK~y-)m6Kg;(`6LKf9HMM_(A5>#StO_)>a@ZxVe=%y%4;zSZ55;7-B-ghuOf5_;G16
zZ%mXS3yKlYC1i_H8E6a|6K=RLOs!rR%GL!XG3~m{bqgJArS9MV-s45>z<A}GoSQc}
zC+Ga0=Mh!q|Ge`(iWpD_X;lKwIRK0?RELQOBC^~hBE<CpUOo6Hqia4>6$`++>~j*h
zz0o;`F$RDRvl{v5PgUvZo@BJ)jBal00N~QOA#OTDpin5_c^=kURF!vjzp3%?NjY}l
z8T`BM;7%iqmHN5da8?@{pP-ZuAQP4CW^J%?g0&Xk_vzc$tMTwj`C$GHUOx3BTUISF
z`oiy|)}GdN>$f2jE3lK6ac_W{g)Zs(PzV@f@O_`x_Z-xE?m-<qG(E2;c5RjE+9O<l
z@U(7fPEee3lqZ(Bx;Owg4oIS}!pGFr)lpwx&yp%#gZ+GWb)RmJd@Qfsdz9;|&uTOl
zXMWOWE;UEyuTQC&@06W~Z$UOy1*`}+iVMp?Q)|!Y!;dE@W_{+y3KYz@NbwbU_PqeA
z%DXk8szQRQGEr1|cf6#X$NTuc{|h$1xEF5$ia$AWi=R_l?3Bcz0IKlRiaPEV%P%fZ
z;Fj)C6c1I)mGLoFj+eN<bRW6WC#)=X%9DpI&MD8=t|HAf1o^MaayOMn!c98()vvlI
zwo@P55YwS<kD+dla5$`yNQA@P6<<_Kstl&4rbujkTDP>el1%<g?}=gl`0_l%7Y3Ow
zU*oOq<C2#k?|;2U0m){wmCdV8Y~9eJ?QLybyg0(;%$PKWHfp(CW`9Qyh;a0qBY2*N
zh={6^%jGH%V;fu5`Af97Kg!6+4>ZTO$>8y0SZi_4u_@B1C0!($ObS3#QxgE0Or~P{
zXgI3Fr)D&^zD0w<;J?BoBJA%QVDH->F*7s6?CdQ0e4c1Dx||Vdi8QN+k1>YSZz%}|
tgZRFWh;VySL!l5Ng0&VAA)QVG@HZX5V&O>|T>bz6002ovPDHLkV1jf_mcal3

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_steadfast_active.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_steadfast_active.png
new file mode 100644
index 0000000000000000000000000000000000000000..465921dc84be418c81d8149a4c8cb7801ca81e1f
GIT binary patch
literal 873
zcmV-v1D5=WP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~${E87sQoUWWhx0`^Hn
zK~y-)Rg+(AlVudff9HGK2$BV5afC>KwH3%JZf<2xF9feF))`|UhM1TLm;r9YKbI!+
z#zZ%8L6->V60*gp3^YcG2{&FCrdBQpWo-pbOuH_VZlRN{6uy3Yj~DeTaFTOzPI6A3
z^E}THRmBfgMMUbgwH6V%r+2PTRUA+Y8C3$-S^yl!xo64ULn1<4AL7kJ|LEkpFHtc7
zY{<Vzz;PUW6xQ1MqHbp`@_$cN>Fb@=$>!5+>FfsJ()VNBv<`t%sf6pg7-LXXK6ve2
zjfYP#eDHbkmfy!RM@UzO^m6kVnp>Wxk_jMFHFR?(SUbTOgXeh+?(5fh_ynIUyd$rl
z{FSY17Ma}jr>54QV#CJm$kYnVv?1$`(6G3l^brxqKjG~?htyh&T6pBzf*yZ$8)tX^
zp_d*$MYJserR7womdM^3fg1-&3>Z;WoW{mRnwpweQf2?>5I_F4j~$WEc<X_q`tRB^
zL}PIlrak6U^W<)QLBm21yAO-_L_59$MuZ#X#X6y>^{094sRZS`$9%d($vKOZ-{6HK
z0Z~;xYzQ&D3`9gwRi?^H|4XlE&#^&%9{QRsFYm=&gz|5e!tJkES?(b*5D-;(c10ui
zi{XMT67Y2vfwH)$8m?s1tj<<gRe6v?<#Se-dw6ERh_%Yjm21dw9pR2o>QT6<JRWY<
z(Qhy6p4e`Ea#KvldR-msbu}CgYa|lkaIaNW#ZU1$n3<U&vF$nC+R;HW`8)l`$NBr4
zbBzBq%C+is-rJF-C_z5{ZXJN+^Z6QbU&fA2?b_AZ$@%jWT+XGXCA3+q)hY+N`#^-F
zKYWDix`>FVDuqI!X7kwQ4z=DAU0qKwG4Ts+@$E8tY#3t<)><Bov}i?dlT0QBptZFX
zfLtzDvwbui)$x<F8r#^e!C;U(q}KAl;0Sx)|CHI;S?1>EC>D!EqtW`0NPDDBT|6Ae
zA$2t+!C(;2^AHj4{?t$?got2_K}5)8G64Jsshw{P?O>9u00000NkvXXu0mjf_uiTn

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_vengeful.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb85742dca9e8581dae8b1ac5d35900502d8f5d4
GIT binary patch
literal 866
zcmV-o1D*VdP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~${E1|7IP#ee_+0`Eyg
zK~y-)m6J_uRCN@^fA{}pLJKr3iUr#@MrR%!+X*p3YhXoSLrFz6n&86tQ5O{`5fv9A
z@gu>Yt&*4+(*#S5Vj5Hu68VU-F+hTi8-h9&B_xiIPHbleacn#D=Dq)QF?P_n@+Nn4
zZ_drhIroUF@_$PA?gnGPTC~!EL{S8QF@}X>B7%rCKq5k)-o~jHA7y-HhdQRd+jcE4
zv3~-swHRXn*lJwl@0qId#S0H}Jdx0cwsZk7cH}(9HX)@_i697Y90yh9;GU=SosN{`
z<^#g!MKl?q-CB+(61r)<OS4~w%RXb3D!XQz#8_)_9EUIr8{n-4hfD8Wr1|Jc+O6f&
zc2_s`wzFuejQM_wBh`Rs{#YvV?rX%1F@#~r^MeE0wivLMRh6qc`uGOvU$%l{D`Wa#
zUz#X?gW9F*d|0ir^Y<m<55G(TFs-evw6(PnMasz78|?9~>LJ&Y(<|WfJ7fAlUnjL+
zixkdgIa;YOcyozdAKBj!*(^BVI6|dbY6$vSM?$yVpCQN<nECn&C&jR<yjZ5+-jAyC
zW=rzc0c$P8<EQ1>fe{Xj?&VO$YX9amcD{oB*5?euV7W!6hF`&2=v%s+3H=j**e%~-
zwkC)QlRr-~_d_==H*0({H_u?%k^EaPfmI$^b~{;02=d=A^XHU%J5&1O*-;(X*rV%L
zr!^SbM=-RHR4S#O=V6ClM^zgw3mW9}dHOeQ(B9s)OnfuJsbjBl;^T9C^wl|jo2@aq
zWxK?si91dlRzPyOT%GyCC$8;E>$-LKapC+0zPt8|bbCpy)oMJqeKR7$!SOE%f&dW_
zRmJ!HI_;kByLC<4)16N~ruTSv=@UD41K>CgBEstQD)l^1i^U?vViDJMab1@vit3JK
zyp-NJb69)2IyD}T|0_%)!j9n&c>2Km%*@PCC={5Uo+gvYG%_M<(w+vkuEXUkKS?|u
sCk#VG1Z!<0smWv#5os{XX0rhN1qx$eP0-^W_W%F@07*qoM6N<$f)25fXaE2J

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_vengeful_active.png b/src/main/resources/assets/bloodmagic/textures/items/soul/sentient_sword_vengeful_active.png
new file mode 100644
index 0000000000000000000000000000000000000000..0bd8bf57c126dbe81143038a60121e40ee9aab52
GIT binary patch
literal 876
zcmV-y1C#uTP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0OtVe
z0Nd8X{+a*)010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~${E7(2dkf1&^Y0{KZq
zK~y-)U6W62RAm&!fA@PcVG1-Xss-COMrR%!+X*p3YhXoSLrFz6n&86tr!Fc`6craD
z@lS$5T4kd#O|Zl$ra>hkkv~y321vAVLr|xpgv4>^#CB#7$F?(X-uteLaR%`w-{QMB
z=jP;`dqh=fl&T^k&A+u45xJ$Odv+<tfVF6)6A8l*0Amb|W&a0>2>p6Hr(S+cCsuUg
znEGt%)jW~^0<E<eV*uD<T;$)Ls`BMakLdAuoQF4e12BH%JjTY5QmKUR`#6q+s&ZiW
z)B0{_lI(&nLCYdyM(D6skH_O|T<6k~E5oH6<CQ8q=VBOZEso<51VIzLrQpcL_rIm(
z=t(-P)z3OyHuiO}Xu6E~ahfAlpJ)GC%5w+bkccscAP9JIXi(c11J<&#az)3UST6(1
zmg}(<5gzJK5$3N`yLgR{s#SLUxrE%vtD>rywzf9f+uI34Wpw;4cIU2e$n`kA9R1?1
z2oLsmQTx3};cSMZl?p>QmT+x!pEQIv4F?=Ys8mZ$K|k+|v-N>Aezw5uH<vjnhMncb
z%)GNtRF$_|6TBCrzQ9_`$i!)ResGliV|zGMu?%cVVHYac?{l0%7%I0iJ@T4Z3;j!P
zV^aSHAac`pn5zk*!ql%*%>UFw>x~+p&Mz=jcE}%mMX<`F%kCgU3E}3QG%Gi++}D-V
zpU;lz;D%mZw<@Ln@Lu(Y_i8ekRL}FU!*8mp(s<I)AfL}OuwlLS^{rv@yGc$Rdz}-X
zoa5uK&+*4xjj7Gsh)Rq*PaFo2Y&KhG-nhgy-6>tW_I@s$zrYVyf0G_Bp|x6#7q)Fe
zL^v?<6~6ByBBH9~a=AL~-ky7Ob;{EnPd%>pdUxxS+jjxrI1VDhs?<vLJWq?oBE@16
z*L87SmoN<Lj-|b%UO#hKd%L?d8jao(CJ|x#$cH?${{v=cXDJj4%*@P?PN$n0k<}?r
zeOuSz(&b+y8jTVJ0V0C6wwcsKB7ulBnPoB=0R92=k7_I>y<$ZG0000<MNUMnLSTY(
C`<iP2

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/bloodmagic_guide/lang/en_us.lang b/src/main/resources/assets/bloodmagic_guide/lang/en_us.lang
new file mode 100644
index 00000000..ecb62b1c
--- /dev/null
+++ b/src/main/resources/assets/bloodmagic_guide/lang/en_us.lang
@@ -0,0 +1,3 @@
+# simple descriptions as we go so there's *something* for everything
+guide.bloodmagic:living_armor_upgrade_jump=Increases jump height. Decreases fall damage. Above level 2, it will also increase forward momentum while jumping.
+guide.bloodmagic:living_armor_upgrade_arrow_protect=Decreases damage taken from projectiles.
\ No newline at end of file