From 216bdb2d2e1e20d2f25c8712fa61868336820518 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 14 Mar 2017 19:33:13 -0700 Subject: [PATCH] Fixed many sigils using the wrong stack for their logic (#1102) This is why you use custom methods for things like this instead of MC methods --- .../java/WayofTime/bloodmagic/api/iface/ISigil.java | 10 ++++++++++ .../bloodmagic/api/impl/ItemSigilToggleable.java | 5 +++++ .../bloodmagic/item/sigil/ItemSigilAir.java | 3 +++ .../bloodmagic/item/sigil/ItemSigilBloodLight.java | 3 +++ .../bloodmagic/item/sigil/ItemSigilDivination.java | 3 +++ .../bloodmagic/item/sigil/ItemSigilHolding.java | 12 +++++++++++- .../bloodmagic/item/sigil/ItemSigilLava.java | 3 +++ .../bloodmagic/item/sigil/ItemSigilSeer.java | 3 +++ .../bloodmagic/item/sigil/ItemSigilTeleposition.java | 5 +++++ .../item/sigil/ItemSigilTransposition.java | 3 +++ .../bloodmagic/item/sigil/ItemSigilVoid.java | 3 +++ .../bloodmagic/item/sigil/ItemSigilWater.java | 3 +++ 12 files changed, 55 insertions(+), 1 deletion(-) 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);