From 929d7e9abb0f984d1b289138ec4bfb819df1c25f Mon Sep 17 00:00:00 2001
From: Alex_hawks <alex_hawks@hotmail.com>
Date: Fri, 21 Nov 2014 10:38:50 +0800
Subject: [PATCH] Change Rituals to allow for TileEntity Runes, and Hybrid
 Runes. These will probably not be a feature in Blood Magic itself though

---
 .../api/rituals/IRitualStone.java             |  2 +-
 .../api/rituals/ITileRitualStone.java         |  6 +++
 .../api/rituals/Rituals.java                  | 38 +++++++------------
 .../common/block/RitualStone.java             |  4 +-
 4 files changed, 23 insertions(+), 27 deletions(-)
 create mode 100644 src/main/java/WayofTime/alchemicalWizardry/api/rituals/ITileRitualStone.java

diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IRitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IRitualStone.java
index efe32e08..1bd7b328 100644
--- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IRitualStone.java
+++ b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/IRitualStone.java
@@ -4,5 +4,5 @@ import net.minecraft.world.World;
 
 public interface IRitualStone
 {
-	public int getRuneType(World world, int x, int y, int z, int meta);
+	public boolean isRuneType(World world, int x, int y, int z, int meta, int runeType);
 }
diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/ITileRitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/ITileRitualStone.java
new file mode 100644
index 00000000..72045152
--- /dev/null
+++ b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/ITileRitualStone.java
@@ -0,0 +1,6 @@
+package WayofTime.alchemicalWizardry.api.rituals;
+
+public interface ITileRitualStone
+{
+    public boolean isRuneType(int runeType);
+}
diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/Rituals.java b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/Rituals.java
index b3bd97fc..4eb76f62 100644
--- a/src/main/java/WayofTime/alchemicalWizardry/api/rituals/Rituals.java
+++ b/src/main/java/WayofTime/alchemicalWizardry/api/rituals/Rituals.java
@@ -7,6 +7,7 @@ import java.util.Map;
 
 import net.minecraft.block.Block;
 import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
 import net.minecraft.world.World;
 import net.minecraftforge.common.MinecraftForge;
 import WayofTime.alchemicalWizardry.api.event.RitualRunEvent;
@@ -149,6 +150,7 @@ public class Rituals
         }
 
         Block test = null;
+        TileEntity te = null;
 
         switch (direction)
         {
@@ -156,13 +158,10 @@ public class Rituals
                 for (RitualComponent rc : ritual)
                 {
                     test = world.getBlock(x + rc.getX(), y + rc.getY(), z + rc.getZ());
+                    te = world.getTileEntity(x + rc.getX(), y + rc.getY(), z + rc.getZ());
 
-                    if (!(test instanceof IRitualStone))
-                    {
-                        return false;
-                    }
-
-                    if (((IRitualStone)test).getRuneType(world, x, y, z, world.getBlockMetadata(x + rc.getX(), y + rc.getY(), z + rc.getZ())) != rc.getStoneType())
+                    if (!(test instanceof IRitualStone && ((IRitualStone)test).isRuneType(world, x, y, z, world.getBlockMetadata(x + rc.getX(), y + rc.getY(), z + rc.getZ()), rc.getStoneType()))
+                            && !(test instanceof ITileRitualStone && ((ITileRitualStone)te).isRuneType(rc.getStoneType())))
                     {
                         return false;
                     }
@@ -174,13 +173,10 @@ public class Rituals
                 for (RitualComponent rc : ritual)
                 {
                     test = world.getBlock(x - rc.getZ(), y + rc.getY(), z + rc.getX());
+                    te = world.getTileEntity(x - rc.getZ(), y + rc.getY(), z + rc.getX());
 
-                    if (!(test instanceof IRitualStone))
-                    {
-                        return false;
-                    }
-
-                    if (((IRitualStone)test).getRuneType(world, x, y, z, world.getBlockMetadata(x - rc.getZ(), y + rc.getY(), z + rc.getX())) != rc.getStoneType())
+                    if (!(test instanceof IRitualStone && ((IRitualStone)test).isRuneType(world, x, y, z, world.getBlockMetadata(x - rc.getZ(), y + rc.getY(), z + rc.getX()), rc.getStoneType()))
+                            && !(test instanceof ITileRitualStone && ((ITileRitualStone)te).isRuneType(rc.getStoneType())))
                     {
                         return false;
                     }
@@ -192,13 +188,10 @@ public class Rituals
                 for (RitualComponent rc : ritual)
                 {
                     test = world.getBlock(x - rc.getX(), y + rc.getY(), z - rc.getZ());
+                    te = world.getTileEntity(x - rc.getX(), y + rc.getY(), z - rc.getZ());
 
-                    if (!(test instanceof IRitualStone))
-                    {
-                        return false;
-                    }
-
-                    if (((IRitualStone)test).getRuneType(world, x, y, z, world.getBlockMetadata(x - rc.getX(), y + rc.getY(), z - rc.getZ())) != rc.getStoneType())
+                    if (!(test instanceof IRitualStone && ((IRitualStone)test).isRuneType(world, x, y, z, world.getBlockMetadata(x - rc.getX(), y + rc.getY(), z - rc.getZ()), rc.getStoneType()))
+                            && !(test instanceof ITileRitualStone && ((ITileRitualStone)te).isRuneType(rc.getStoneType())))
                     {
                         return false;
                     }
@@ -210,13 +203,10 @@ public class Rituals
                 for (RitualComponent rc : ritual)
                 {
                     test = world.getBlock(x + rc.getZ(), y + rc.getY(), z - rc.getX());
+                    te = world.getTileEntity(x + rc.getZ(), y + rc.getY(), z - rc.getX());
 
-                    if (!(test instanceof IRitualStone))
-                    {
-                        return false;
-                    }
-
-                    if (((IRitualStone)test).getRuneType(world, x, y, z, world.getBlockMetadata(x + rc.getZ(), y + rc.getY(), z - rc.getX())) != rc.getStoneType())
+                    if (!(test instanceof IRitualStone && ((IRitualStone)test).isRuneType(world, x, y, z, world.getBlockMetadata(x + rc.getZ(), y + rc.getY(), z - rc.getX()), rc.getStoneType()))
+                            && !(test instanceof ITileRitualStone && ((ITileRitualStone)te).isRuneType(rc.getStoneType())))
                     {
                         return false;
                     }
diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/RitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/RitualStone.java
index b1626aa9..ed0ca323 100644
--- a/src/main/java/WayofTime/alchemicalWizardry/common/block/RitualStone.java
+++ b/src/main/java/WayofTime/alchemicalWizardry/common/block/RitualStone.java
@@ -120,8 +120,8 @@ public class RitualStone extends Block implements IRitualStone
     }
 
 	@Override
-	public int getRuneType(World world, int x, int y, int z, int meta) 
+	public boolean isRuneType(World world, int x, int y, int z, int meta, int runeType) 
 	{
-		return meta;
+		return meta == runeType;
 	}
 }