diff --git a/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java b/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java
index ef3ad2a5..2e318247 100644
--- a/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java
+++ b/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java
@@ -1,8 +1,12 @@
package WayofTime.bloodmagic.api.iface;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
+import javax.annotation.Nonnull;
+
/**
* Used for all {@link WayofTime.bloodmagic.api.impl.ItemSigil} EXCEPT
* Sigils of Holdings.
@@ -12,4 +16,10 @@ public interface ISigil
boolean performArrayEffect(World world, BlockPos pos);
boolean hasArrayEffect();
+
+ interface Holding
+ {
+ @Nonnull
+ ItemStack getHeldItem(ItemStack holdingStack, EntityPlayer player);
+ }
}
diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java
index 42ef9d80..0d4e75cd 100644
--- a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java
+++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java
@@ -2,6 +2,7 @@ package WayofTime.bloodmagic.api.impl;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.iface.IActivatable;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.NBTHelper;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
@@ -49,6 +50,8 @@ public class ItemSigilToggleable extends ItemSigil implements IActivatable
public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);
@@ -67,6 +70,8 @@ public class ItemSigilToggleable extends ItemSigil implements IActivatable
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (Strings.isNullOrEmpty(getOwnerUUID(stack)) || player.isSneaking()) // Make sure Sigils are bound before handling. Also ignores while toggling state
return EnumActionResult.PASS;
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java
index 86f794ee..29e6913b 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java
@@ -1,5 +1,6 @@
package WayofTime.bloodmagic.item.sigil;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@@ -29,6 +30,8 @@ public class ItemSigilAir extends ItemSigilBase implements ISentientSwordEffectP
public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java
index aaf30f0c..ef7ef638 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java
@@ -1,5 +1,6 @@
package WayofTime.bloodmagic.item.sigil;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
@@ -34,6 +35,8 @@ public class ItemSigilBloodLight extends ItemSigilBase
public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java
index 2282a9de..31e610ae 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java
@@ -3,6 +3,7 @@ package WayofTime.bloodmagic.item.sigil;
import java.util.ArrayList;
import java.util.List;
+import WayofTime.bloodmagic.api.iface.ISigil;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
@@ -47,6 +48,8 @@ public class ItemSigilDivination extends ItemSigilBase implements IAltarReader
// world.spawnEntityInWorld(fred);
// }
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java
index ecc92a71..a1318abc 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java
@@ -3,6 +3,7 @@ package WayofTime.bloodmagic.item.sigil;
import java.util.Collections;
import java.util.List;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import WayofTime.bloodmagic.client.key.KeyBindings;
import net.minecraft.entity.Entity;
@@ -30,7 +31,9 @@ import WayofTime.bloodmagic.util.helper.TextHelper;
import com.google.common.base.Strings;
-public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAltarReader
+import javax.annotation.Nonnull;
+
+public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAltarReader, ISigil.Holding
{
public static final int inventorySize = 5;
@@ -128,6 +131,13 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl
return ActionResult.newResult(EnumActionResult.PASS, stack);
}
+ @Nonnull
+ @Override
+ public ItemStack getHeldItem(ItemStack holdingStack, EntityPlayer player)
+ {
+ return getInternalInventory(holdingStack).get(getCurrentItemOrdinal(holdingStack));
+ }
+
public void saveInventory(ItemStack itemStack, List inventory)
{
NBTTagCompound itemTag = itemStack.getTagCompound();
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java
index ce9eac0d..387928f6 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java
@@ -1,5 +1,6 @@
package WayofTime.bloodmagic.item.sigil;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import net.minecraft.block.material.Material;
@@ -31,6 +32,8 @@ public class ItemSigilLava extends ItemSigilBase
public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java
index fb68435c..11025a9a 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java
@@ -3,6 +3,7 @@ package WayofTime.bloodmagic.item.sigil;
import java.util.ArrayList;
import java.util.List;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.util.helper.NumeralHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
@@ -33,6 +34,8 @@ public class ItemSigilSeer extends ItemSigilBase implements IAltarReader
public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java
index 291ff24b..7b07b258 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java
@@ -2,6 +2,7 @@ package WayofTime.bloodmagic.item.sigil;
import java.util.List;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@@ -50,6 +51,8 @@ public class ItemSigilTeleposition extends ItemSigilBase
public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);
@@ -71,6 +74,8 @@ public class ItemSigilTeleposition extends ItemSigilBase
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return EnumActionResult.FAIL;
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java
index 7d226a48..3e042a4a 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java
@@ -2,6 +2,7 @@ package WayofTime.bloodmagic.item.sigil;
import java.util.List;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
@@ -69,6 +70,8 @@ public class ItemSigilTransposition extends ItemSigilBase
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return EnumActionResult.FAIL;
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java
index 9d8db890..0e27f2be 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java
@@ -1,5 +1,6 @@
package WayofTime.bloodmagic.item.sigil;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import net.minecraft.entity.player.EntityPlayer;
@@ -29,6 +30,8 @@ public class ItemSigilVoid extends ItemSigilBase
public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);
diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java
index c125b03e..2de40557 100644
--- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java
+++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java
@@ -1,5 +1,6 @@
package WayofTime.bloodmagic.item.sigil;
+import WayofTime.bloodmagic.api.iface.ISigil;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import net.minecraft.block.BlockCauldron;
@@ -34,6 +35,8 @@ public class ItemSigilWater extends ItemSigilBase
public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
+ if (stack.getItem() instanceof ISigil.Holding)
+ stack = ((Holding) stack.getItem()).getHeldItem(stack, player);
if (PlayerHelper.isFakePlayer(player))
return ActionResult.newResult(EnumActionResult.FAIL, stack);