From 6680e8be4981dcaa3446cf04aaf174997146bc2b Mon Sep 17 00:00:00 2001 From: Arcaratus Date: Fri, 17 Jun 2016 18:46:33 -0400 Subject: [PATCH] Option to skip empty slots in Sigil of Holding (#807) * Option to skip empty slots in Sigil of Holding --- .../WayofTime/bloodmagic/ConfigHandler.java | 2 + .../item/sigil/ItemSigilHolding.java | 40 ++++++++++++++++--- .../util/handler/event/ClientHandler.java | 12 ++++-- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java index 295007db..c3c08abc 100644 --- a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java @@ -142,6 +142,7 @@ public class ConfigHandler // Client public static boolean alwaysRenderRoutingLines; public static boolean invisibleSpectralBlocks; + public static boolean sigilHoldingSkipsEmptySlots; // Compat public static int wailaAltarDisplayMode; @@ -290,6 +291,7 @@ public class ConfigHandler config.addCustomCategoryComment(category, "Client only settings"); alwaysRenderRoutingLines = config.getBoolean("alwaysRenderRoutingLines", category, false, "Always renders the beams between routing nodes. If false, only renders while a Node Router is being held."); invisibleSpectralBlocks = config.get(category, "invisibleSpectralBlocks", true, "Spectral Blocks (Used by the Suppression Sigil to store fluids) will not render at all. If false, a see through texture will render. [default: true]").setRequiresMcRestart(true).getBoolean(); + sigilHoldingSkipsEmptySlots = config.getBoolean( "sigilHoldingSkipsEmptySlots", category, false, "The Sigil of Holding will skip empty sigil slots if set to true."); category = "Compatibility"; config.addCustomCategoryComment(category, "Compatibility settings"); diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java index 4235f6ca..cb37c945 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java @@ -219,15 +219,14 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable } } - public static ItemStack getCurrentSigil(ItemStack itemStack) + public static ItemStack getItemStackInSlot(ItemStack itemStack, int slot) { if (itemStack.getItem() instanceof ItemSigilHolding) { ItemStack[] itemStacks = getInternalInventory(itemStack); if (itemStacks != null) - { - return itemStacks[getCurrentItemOrdinal(itemStack)]; - } + return itemStacks[slot == 5 ? 4 : slot]; + else return null; } return null; @@ -279,12 +278,41 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable return inv; } - public static void cycleSigil(ItemStack itemStack, int mode) + public static void cycleToNextSigil(ItemStack itemStack, int mode) { if (itemStack.getItem() instanceof ItemSigilHolding) { initModeTag(itemStack); - itemStack.getTagCompound().setInteger(Constants.NBT.CURRENT_SIGIL, mode); + + int index; + int currentIndex = getCurrentItemOrdinal(itemStack); + ItemStack currentItemStack = getItemStackInSlot(itemStack, currentIndex); + if (currentItemStack == null) + return; + if (mode < 0) + { + index = next(currentIndex); + currentItemStack = getItemStackInSlot(itemStack, index); + + while (currentItemStack == null) + { + index = next(index); + currentItemStack = getItemStackInSlot(itemStack, index); + } + } + else + { + index = prev(currentIndex); + currentItemStack = getItemStackInSlot(itemStack, index); + + while (currentItemStack == null) + { + index = prev(index); + currentItemStack = getItemStackInSlot(itemStack, index); + } + } + + itemStack.getTagCompound().setInteger(Constants.NBT.CURRENT_SIGIL, index); } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java index 8f09f308..e9e7ab8b 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java @@ -5,6 +5,7 @@ import java.util.List; import javax.annotation.Nullable; +import WayofTime.bloodmagic.ConfigHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.GlStateManager; @@ -168,9 +169,14 @@ public class ClientHandler private void cycleSigil(ItemStack stack, EntityPlayer player, int dWheel) { - int mode = ItemSigilHolding.getCurrentItemOrdinal(stack); - mode = dWheel < 0 ? ItemSigilHolding.next(mode) : ItemSigilHolding.prev(mode); - ItemSigilHolding.cycleSigil(stack, mode); + int mode = dWheel; + if (ConfigHandler.sigilHoldingSkipsEmptySlots) + { + mode = ItemSigilHolding.getCurrentItemOrdinal(stack); + mode = dWheel < 0 ? ItemSigilHolding.next(mode) : ItemSigilHolding.prev(mode); + } + + ItemSigilHolding.cycleToNextSigil(stack, mode); BloodMagicPacketHandler.INSTANCE.sendToServer(new SigilHoldingPacketProcessor(player.inventory.currentItem, mode)); }