From 6fb409f20f167be0d99f279627abf9b8ccbfcc68 Mon Sep 17 00:00:00 2001
From: WayofTime <wtime@live.ca>
Date: Thu, 31 Dec 2015 20:10:57 -0500
Subject: [PATCH] Fixed the Soul Network and made sure the majority of the
 items worked on it.

---
 .../bloodmagic/altar/BloodAltar.java          |  2 +-
 .../bloodmagic/api/network/SoulNetwork.java   | 39 +++++++++---------
 .../api/util/helper/NetworkHelper.java        | 40 ++++++++++---------
 .../bloodmagic/item/ItemBindable.java         | 34 ++++++++++++++--
 .../bloodmagic/item/ItemBloodOrb.java         |  4 +-
 .../bloodmagic/item/ItemLavaCrystal.java      | 28 +++++--------
 .../item/gear/ItemPackSelfSacrifice.java      |  2 +-
 .../item/sigil/ItemSigilDivination.java       |  2 +-
 .../bloodmagic/item/sigil/ItemSigilLava.java  |  3 --
 .../bloodmagic/item/sigil/ItemSigilSeer.java  |  2 +-
 .../bloodmagic/item/sigil/ItemSigilWater.java |  3 --
 .../ritual/RitualFeatheredKnife.java          |  2 +-
 .../bloodmagic/ritual/RitualGreenGrove.java   |  2 +-
 .../bloodmagic/ritual/RitualJumping.java      |  2 +-
 .../bloodmagic/ritual/RitualLava.java         |  2 +-
 .../bloodmagic/ritual/RitualWater.java        |  2 +-
 .../ritual/RitualWellOfSuffering.java         |  2 +-
 .../tile/TileImperfectRitualStone.java        |  2 +-
 .../tile/TileMasterRitualStone.java           |  6 +--
 19 files changed, 99 insertions(+), 80 deletions(-)

diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java
index 7208fd59..2b2df490 100644
--- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java
+++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java
@@ -431,7 +431,7 @@ public class BloodAltar
             {
                 int liquidDrained = Math.min((int) (altarTier.ordinal() >= 2 ? consumptionRate * (1 + consumptionMultiplier) : consumptionRate), fluid.amount);
 
-                int drain = NetworkHelper.getSoulNetwork(ownerUUID, world).addLifeEssence(liquidDrained, (int) (item.getMaxEssence(returnedItem.getMetadata()) * this.orbCapacityMultiplier));
+                int drain = NetworkHelper.getSoulNetwork(ownerUUID).addLifeEssence(liquidDrained, (int) (item.getMaxEssence(returnedItem.getMetadata()) * this.orbCapacityMultiplier));
 
                 fluid.amount = fluid.amount - drain;
 
diff --git a/src/main/java/WayofTime/bloodmagic/api/network/SoulNetwork.java b/src/main/java/WayofTime/bloodmagic/api/network/SoulNetwork.java
index d5f4dbe6..ad9651d2 100644
--- a/src/main/java/WayofTime/bloodmagic/api/network/SoulNetwork.java
+++ b/src/main/java/WayofTime/bloodmagic/api/network/SoulNetwork.java
@@ -90,6 +90,7 @@ public class SoulNetwork extends WorldSavedData
      */
     public int syphon(int syphon)
     {
+        System.out.println("Being syphoned");
         if (getCurrentEssence() >= syphon)
         {
             setCurrentEssence(getCurrentEssence() - syphon);
@@ -101,37 +102,40 @@ public class SoulNetwork extends WorldSavedData
     }
 
     /**
-     * If the player exists on the server, syphon the given amount of LP from
-     * the player's LP network and damage for any remaining LP required.
+     * Syphons from the network of the owner. If not enough LP is found, it will
+     * instead take away from the user's health.
      * 
      * Always returns false on the client side.
      * 
      * @return - Whether the action should be performed.
      */
-    public boolean syphonAndDamage(int toSyphon)
+    public boolean syphonAndDamage(EntityPlayer user, int toSyphon)
     {
-        if (getPlayer() != null)
+        BloodMagicAPI.getLogger().debug("The operation has requested a drain of " + toSyphon + " LP.");
+        if (user != null)
         {
-            if (getPlayer().worldObj.isRemote)
+            if (user.worldObj.isRemote)
                 return false;
 
             if (!Strings.isNullOrEmpty(mapName))
             {
-                SoulNetworkEvent.ItemDrainNetworkEvent event = new SoulNetworkEvent.ItemDrainNetworkEvent(player, mapName, getPlayer().getHeldItem(), toSyphon);
+                SoulNetworkEvent.ItemDrainNetworkEvent event = new SoulNetworkEvent.ItemDrainNetworkEvent(user, mapName, null, toSyphon);
 
                 if (MinecraftForge.EVENT_BUS.post(event))
                     return false;
 
                 int drainAmount = syphon(event.syphon);
 
-                if (drainAmount == 0 || event.shouldDamage)
-                    hurtPlayer(event.syphon);
+                if (drainAmount <= 0 || event.shouldDamage)
+                    hurtPlayer(user, event.syphon);
 
                 return event.getResult() != Event.Result.DENY;
             }
 
+            System.out.println("I got here?!?");
+
             int amount = syphon(toSyphon);
-            hurtPlayer(toSyphon - amount);
+            hurtPlayer(user, toSyphon - amount);
 
             return true;
         }
@@ -139,27 +143,26 @@ public class SoulNetwork extends WorldSavedData
         return false;
     }
 
-    public void hurtPlayer(float syphon)
+    public void hurtPlayer(EntityPlayer user, float syphon)
     {
-        System.out.println("Called");
-        if (getPlayer() != null)
+        if (user != null)
         {
             if (syphon < 100 && syphon > 0)
             {
-                if (!getPlayer().capabilities.isCreativeMode)
+                if (!user.capabilities.isCreativeMode)
                 {
-                    getPlayer().hurtResistantTime = 0;
-                    getPlayer().attackEntityFrom(BloodMagicAPI.getDamageSource(), 1.0F);
+                    user.hurtResistantTime = 0;
+                    user.attackEntityFrom(BloodMagicAPI.getDamageSource(), 1.0F);
                 }
 
             } else if (syphon >= 100)
             {
-                if (!getPlayer().capabilities.isCreativeMode)
+                if (!user.capabilities.isCreativeMode)
                 {
                     for (int i = 0; i < ((syphon + 99) / 100); i++)
                     {
-                        getPlayer().hurtResistantTime = 0;
-                        getPlayer().attackEntityFrom(BloodMagicAPI.getDamageSource(), 1.0F);
+                        user.hurtResistantTime = 0;
+                        user.attackEntityFrom(BloodMagicAPI.getDamageSource(), 1.0F);
                     }
                 }
             }
diff --git a/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java b/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java
index b3addcaf..f5e91672 100644
--- a/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java
+++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java
@@ -5,11 +5,14 @@ import WayofTime.bloodmagic.api.Constants;
 import WayofTime.bloodmagic.api.event.AddToNetworkEvent;
 import WayofTime.bloodmagic.api.event.SoulNetworkEvent;
 import WayofTime.bloodmagic.api.network.SoulNetwork;
+
 import com.google.common.base.Strings;
+
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.item.ItemStack;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.world.World;
+import net.minecraftforge.common.DimensionManager;
 import net.minecraftforge.common.MinecraftForge;
 import net.minecraftforge.fml.common.eventhandler.Event;
 
@@ -25,13 +28,12 @@ public class NetworkHelper
      * 
      * @param name
      *            - The username of the SoulNetwork owner
-     * @param world
-     *            - The world
      * 
      * @return - The SoulNetwork for the given name.
      */
-    public static SoulNetwork getSoulNetwork(String name, World world)
+    public static SoulNetwork getSoulNetwork(String name)
     {
+        World world = DimensionManager.getWorld(0);
         SoulNetwork network = (SoulNetwork) world.getMapStorage().loadData(SoulNetwork.class, name);
 
         if (network == null)
@@ -46,17 +48,17 @@ public class NetworkHelper
     /**
      * @see NetworkHelper#getSoulNetwork(String, World)
      */
-    public static SoulNetwork getSoulNetwork(UUID uuid, World world)
+    public static SoulNetwork getSoulNetwork(UUID uuid)
     {
-        return getSoulNetwork(PlayerHelper.getUsernameFromUUID(uuid), world);
+        return getSoulNetwork(PlayerHelper.getUsernameFromUUID(uuid));
     }
 
     /**
      * @see NetworkHelper#getSoulNetwork(String, World)
      */
-    public static SoulNetwork getSoulNetwork(EntityPlayer player, World world)
+    public static SoulNetwork getSoulNetwork(EntityPlayer player)
     {
-        return getSoulNetwork(PlayerHelper.getUUIDFromPlayer(player), world);
+        return getSoulNetwork(PlayerHelper.getUUIDFromPlayer(player));
     }
 
     /**
@@ -82,20 +84,23 @@ public class NetworkHelper
      * 
      * @param soulNetwork
      *            - SoulNetwork to syphon from
+     * @param user
+     *            - User of the item.
      * @param toSyphon
      *            - Amount of LP to syphon
      * 
      * @return - Whether the action should be performed.
      */
-    public static boolean syphonAndDamage(SoulNetwork soulNetwork, int toSyphon)
+    public static boolean syphonAndDamage(SoulNetwork soulNetwork, EntityPlayer user, int toSyphon)
     {
-        if (soulNetwork.getPlayer() == null)
-        {
-            soulNetwork.syphon(toSyphon);
-            return true;
-        }
 
-        return soulNetwork.syphonAndDamage(toSyphon);
+//        if (soulNetwork.getPlayer() == null)
+//        {
+//            soulNetwork.syphon(toSyphon);
+//            return true;
+//        }
+
+        return soulNetwork.syphonAndDamage(user, toSyphon);
     }
 
     /**
@@ -103,22 +108,21 @@ public class NetworkHelper
      * 
      * @param stack
      *            - ItemStack in the Container.
-     * @param world
-     *            - The world the Container is in
      * @param toSyphon
      *            - Amount of LP to syphon
      * 
      * @return - If the syphon was successful.
      */
-    public static boolean syphonFromContainer(ItemStack stack, World world, int toSyphon)
+    public static boolean syphonFromContainer(ItemStack stack, int toSyphon) //TODO: Change to a String, int?
     {
+        System.out.println("Test");
         stack = NBTHelper.checkNBT(stack);
         String ownerName = stack.getTagCompound().getString(Constants.NBT.OWNER_UUID);
 
         if (Strings.isNullOrEmpty(ownerName))
             return false;
 
-        SoulNetwork network = getSoulNetwork(ownerName, world);
+        SoulNetwork network = getSoulNetwork(ownerName);
 
         SoulNetworkEvent.ItemDrainInContainerEvent event = new SoulNetworkEvent.ItemDrainInContainerEvent(stack, ownerName, toSyphon);
 
diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java b/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java
index cdcefde7..8eccfdf3 100644
--- a/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java
+++ b/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java
@@ -4,12 +4,15 @@ import WayofTime.bloodmagic.BloodMagic;
 import WayofTime.bloodmagic.api.BloodMagicAPI;
 import WayofTime.bloodmagic.api.Constants;
 import WayofTime.bloodmagic.api.iface.IBindable;
+import WayofTime.bloodmagic.api.network.SoulNetwork;
 import WayofTime.bloodmagic.api.util.helper.BindableHelper;
 import WayofTime.bloodmagic.api.util.helper.NBTHelper;
 import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
 import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
 import WayofTime.bloodmagic.util.helper.TextHelper;
+
 import com.google.common.base.Strings;
+
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
@@ -35,6 +38,15 @@ public class ItemBindable extends Item implements IBindable
         setMaxStackSize(1);
     }
 
+    /**
+     * Syphons from the owner's network if possible - if not enough LP is found,
+     * it will instead take the LP from the holder of the item.
+     * 
+     * @param stack
+     * @param player
+     * @param lpUsed
+     * @return
+     */
     public static boolean syphonNetwork(ItemStack stack, EntityPlayer player, int lpUsed)
     {
         if (player == null)
@@ -42,7 +54,14 @@ public class ItemBindable extends Item implements IBindable
 
         if (!player.worldObj.isRemote)
         {
-            return NetworkHelper.syphonAndDamage(NetworkHelper.getSoulNetwork(player, player.worldObj), lpUsed);
+            if (stack != null && stack.getItem() instanceof ItemBindable)
+            {
+                ItemBindable itemBindable = (ItemBindable) stack.getItem();
+                String owner = itemBindable.getBindableOwner(stack);
+                SoulNetwork network = NetworkHelper.getSoulNetwork(owner);
+                return NetworkHelper.syphonAndDamage(network, player, lpUsed);
+            }
+
         } else
         {
             double posX = player.posX;
@@ -50,17 +69,26 @@ public class ItemBindable extends Item implements IBindable
             double posZ = player.posZ;
 
             // SpellHelper.sendIndexedParticleToAllAround(player.worldObj, posX,posY, posZ, 20, player.worldObj.provider.getDimensionId(), 4, posX, posY, posZ);
-            player.worldObj.playSoundEffect((double) ((float) player.posX + 0.5F), (double) ((float) player.posY + 0.5F), (double) ((float) player.posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (player.worldObj.rand.nextFloat() - player.worldObj.rand.nextFloat()) * 0.8F);
+            player.worldObj.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (player.worldObj.rand.nextFloat() - player.worldObj.rand.nextFloat()) * 0.8F);
         }
         return true;
     }
 
+    /**
+     * This method is to be used for when you want to drain from a network
+     * without an online player. This will not take health from the owner if it
+     * fails to find sufficient LP.
+     * 
+     * @param itemStack
+     * @param lpUsed
+     * @return
+     */
     public static boolean syphonNetwork(ItemStack itemStack, int lpUsed)
     {
         if (itemStack.getItem() instanceof ItemBindable)
         {
             ItemBindable itemBindable = (ItemBindable) itemStack.getItem();
-            return !Strings.isNullOrEmpty(itemBindable.getBindableOwner(itemStack)) && syphonNetwork(itemStack, PlayerHelper.getPlayerFromUUID(itemBindable.getBindableOwner(itemStack)), lpUsed);
+            return !Strings.isNullOrEmpty(itemBindable.getBindableOwner(itemStack)) && NetworkHelper.syphonFromContainer(itemStack, lpUsed);
         }
 
         return false;
diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java
index c9d685dd..ca94ca1a 100644
--- a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java
+++ b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java
@@ -67,9 +67,9 @@ public class ItemBloodOrb extends ItemBindable implements IBloodOrb, IBindable
             return stack;
 
         if (stack.getTagCompound().getString(Constants.NBT.OWNER_UUID).equals(PlayerHelper.getUsernameFromPlayer(player)))
-            NetworkHelper.setMaxOrb(NetworkHelper.getSoulNetwork(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID), world), getOrbLevel(stack.getItemDamage()));
+            NetworkHelper.setMaxOrb(NetworkHelper.getSoulNetwork(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID)), getOrbLevel(stack.getItemDamage()));
 
-        NetworkHelper.getSoulNetwork(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID), world).addLifeEssence(200, getMaxEssence(stack.getItemDamage()));
+        NetworkHelper.getSoulNetwork(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID)).addLifeEssence(200, getMaxEssence(stack.getItemDamage()));
         hurtPlayer(player, 200);
         return stack;
     }
diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java
index 51759b0f..4032a282 100644
--- a/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java
+++ b/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java
@@ -1,13 +1,11 @@
 package WayofTime.bloodmagic.item;
 
-import WayofTime.bloodmagic.api.Constants;
-import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
-import com.google.common.base.Strings;
+import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.server.MinecraftServer;
 import net.minecraftforge.fml.common.IFuelHandler;
+import WayofTime.bloodmagic.api.Constants;
+import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
 
 public class ItemLavaCrystal extends ItemBindable implements IFuelHandler
 {
@@ -15,7 +13,7 @@ public class ItemLavaCrystal extends ItemBindable implements IFuelHandler
     {
         super();
         setUnlocalizedName(Constants.Mod.MODID + ".lavaCrystal");
-        setLPUsed(1);
+        setLPUsed(25);
     }
 
     @Override
@@ -46,20 +44,16 @@ public class ItemLavaCrystal extends ItemBindable implements IFuelHandler
 
         if (fuelItem instanceof ItemLavaCrystal)
         {
-            if (syphonNetwork(fuel, getLPUsed()))
+            if (syphonNetwork(fuel, getLPUsed())) //TODO: change to canSyphonNetwork
             {
-                return 1;
+                return 200;
             } else
             {
-                NBTTagCompound tag = fuel.getTagCompound();
-
-                if (tag == null || MinecraftServer.getServer() == null || MinecraftServer.getServer().getConfigurationManager() == null)
-                    return 0;
-
-                if (Strings.isNullOrEmpty(((ItemLavaCrystal) fuelItem).getBindableOwner(fuel)))
-                    return 0;
-                else
-                    hurtPlayer(PlayerHelper.getPlayerFromUUID(getBindableOwner(fuel)), getLPUsed());
+                EntityPlayer player = PlayerHelper.getPlayerFromUUID(getBindableOwner(fuel));
+                if (player != null)
+                {
+                    //TODO: Add nausea to the player.
+                }
 
                 return 0;
             }
diff --git a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java
index b0137de8..b94b28ff 100644
--- a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java
+++ b/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java
@@ -84,7 +84,7 @@ public class ItemPackSelfSacrifice extends ItemArmor implements IAltarManipulato
 
         if (shouldSyphon & world.getTotalWorldTime() % INTERVAL == 0)
         {
-            NetworkHelper.getSoulNetwork(player, world).hurtPlayer(1.0F);
+            NetworkHelper.getSoulNetwork(player).hurtPlayer(player, 1.0F);
             addLP(stack, CONVERSION);
         }
     }
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java
index 5e0c09f4..61d02456 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java
@@ -34,7 +34,7 @@ public class ItemSigilDivination extends ItemSigilBase implements IAltarReader
         if (!world.isRemote)
         {
             MovingObjectPosition position = getMovingObjectPositionFromPlayer(world, player, false);
-            int currentEssence = NetworkHelper.getSoulNetwork(BindableHelper.getOwnerUUID(stack), world).getCurrentEssence();
+            int currentEssence = NetworkHelper.getSoulNetwork(BindableHelper.getOwnerUUID(stack)).getCurrentEssence();
 
             if (position == null)
             {
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java
index cde71744..8110a26f 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java
@@ -62,9 +62,6 @@ public class ItemSigilLava extends ItemSigilBase
                     }
                 }
             }
-
-            if (!player.capabilities.isCreativeMode)
-                this.setUnusable(stack, !syphonNetwork(stack, player, getLPUsed()));
         }
 
         return stack;
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java
index b544dcd1..64e131a0 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java
@@ -35,7 +35,7 @@ public class ItemSigilSeer extends ItemSigilBase implements IAltarReader
         if (!world.isRemote)
         {
             MovingObjectPosition position = getMovingObjectPositionFromPlayer(world, player, false);
-            int currentEssence = NetworkHelper.getSoulNetwork(BindableHelper.getOwnerUUID(stack), world).getCurrentEssence();
+            int currentEssence = NetworkHelper.getSoulNetwork(BindableHelper.getOwnerUUID(stack)).getCurrentEssence();
 
             if (position == null)
             {
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java
index 41b3e070..33386c26 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java
@@ -62,9 +62,6 @@ public class ItemSigilWater extends ItemSigilBase
                     }
                 }
             }
-
-            if (!player.capabilities.isCreativeMode)
-                this.setUnusable(stack, !syphonNetwork(stack, player, getLPUsed()));
         }
 
         return stack;
diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java
index 10fcbcff..a786651a 100644
--- a/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java
+++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java
@@ -39,7 +39,7 @@ public class RitualFeatheredKnife extends Ritual
     public void performRitual(IMasterRitualStone masterRitualStone)
     {
         World world = masterRitualStone.getWorld();
-        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner(), world);
+        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
         int currentEssence = network.getCurrentEssence();
 
         if (currentEssence < getRefreshCost())
diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualGreenGrove.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualGreenGrove.java
index 77901e4f..a7bd5fe8 100644
--- a/src/main/java/WayofTime/bloodmagic/ritual/RitualGreenGrove.java
+++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualGreenGrove.java
@@ -32,7 +32,7 @@ public class RitualGreenGrove extends Ritual
     public void performRitual(IMasterRitualStone masterRitualStone)
     {
         World world = masterRitualStone.getWorld();
-        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner(), world);
+        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
         int currentEssence = network.getCurrentEssence();
 
         if (currentEssence < getRefreshCost())
diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java
index 68534c20..3fdcc4d1 100644
--- a/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java
+++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java
@@ -31,7 +31,7 @@ public class RitualJumping extends Ritual
     public void performRitual(IMasterRitualStone masterRitualStone)
     {
         World world = masterRitualStone.getWorld();
-        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner(), world);
+        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
         int currentEssence = network.getCurrentEssence();
 
         if (currentEssence < getRefreshCost())
diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java
index 3aa310b1..eb987147 100644
--- a/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java
+++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java
@@ -24,7 +24,7 @@ public class RitualLava extends Ritual
     public void performRitual(IMasterRitualStone masterRitualStone)
     {
         World world = masterRitualStone.getWorld();
-        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner(), world);
+        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
         int currentEssence = network.getCurrentEssence();
 
         if (currentEssence < getRefreshCost())
diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualWater.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualWater.java
index f59d32bb..a4ea81c0 100644
--- a/src/main/java/WayofTime/bloodmagic/ritual/RitualWater.java
+++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualWater.java
@@ -24,7 +24,7 @@ public class RitualWater extends Ritual
     public void performRitual(IMasterRitualStone masterRitualStone)
     {
         World world = masterRitualStone.getWorld();
-        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner(), world);
+        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
         int currentEssence = network.getCurrentEssence();
 
         if (currentEssence < getRefreshCost())
diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java
index 87da44fa..079ee83e 100644
--- a/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java
+++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java
@@ -40,7 +40,7 @@ public class RitualWellOfSuffering extends Ritual
     public void performRitual(IMasterRitualStone masterRitualStone)
     {
         World world = masterRitualStone.getWorld();
-        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner(), world);
+        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
         int currentEssence = network.getCurrentEssence();
 
         if (currentEssence < getRefreshCost())
diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java
index 5cf6ca96..be20fbf8 100644
--- a/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java
+++ b/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java
@@ -23,7 +23,7 @@ public class TileImperfectRitualStone extends TileEntity implements IImperfectRi
 
         if (imperfectRitual != null && ImperfectRitualRegistry.ritualEnabled(imperfectRitual))
         {
-            NetworkHelper.getSoulNetwork(player, world).syphonAndDamage(imperfectRitual.getActivationCost());
+            NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, imperfectRitual.getActivationCost());
             if (imperfectRitual.onActivate(this, player))
                 if (imperfectRitual.isLightshow())
                     getWorld().addWeatherEffect(new EntityLightningBolt(getWorld(), getPos().getX(), getPos().getY() + 2, getPos().getZ()));
diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java
index e692825b..5289ae21 100644
--- a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java
+++ b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java
@@ -80,7 +80,6 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt
     @Override
     public boolean activateRitual(ItemStack activationCrystal, EntityPlayer activator, Ritual ritual)
     {
-
         if (PlayerHelper.isFakePlayer(activator))
             return false;
 
@@ -94,8 +93,7 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt
                 int crystalLevel = ((ItemActivationCrystal) activationCrystal.getItem()).getCrystalLevel(activationCrystal);
                 if (RitualHelper.canCrystalActivate(ritual, crystalLevel))
                 {
-
-                    SoulNetwork network = NetworkHelper.getSoulNetwork(crystalOwner, getWorld());
+                    SoulNetwork network = NetworkHelper.getSoulNetwork(crystalOwner);
 
                     if (network.getCurrentEssence() < ritual.getActivationCost())
                     {
@@ -146,8 +144,6 @@ public class TileMasterRitualStone extends TileEntity implements IMasterRitualSt
             if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY)
                 return;
 
-            SoulNetwork network = NetworkHelper.getSoulNetwork(getOwner(), getWorld());
-            network.syphonAndDamage(getCurrentRitual().getRefreshCost());
             getCurrentRitual().performRitual(this);
         }
     }