diff --git a/changelog.txt b/changelog.txt index 460b22ac..ba13cf98 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,8 @@ Version 2.0.0-19 ------------------------------------------------------ - Fixed path blocks so they are actually craftable. +- Added gui stuff to enable priority in the item routing system: nodes with a lower value priority will be accessed first. (May be rotated in the future) +- Grayed out the currently active side's button in the item routers. ------------------------------------------------------ Version 2.0.0-18 diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index 4e52e475..6e53efe4 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -97,6 +97,7 @@ public class Constants public static final String ROUTING_MASTER = "master"; public static final String ROUTING_CONNECTION = "connections"; + public static final String ROUTING_PRIORITY = "prioritiesPeople"; public static final String ROUTING_MASTER_GENERAL = "generalList"; public static final String ROUTING_MASTER_INPUT = "inputList"; public static final String ROUTING_MASTER_OUTPUT = "outputList"; diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java index 6f915f94..49fd34b3 100644 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java @@ -7,7 +7,7 @@ import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; -import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -15,6 +15,7 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.network.BloodMagicPacketHandler; import WayofTime.bloodmagic.network.ItemRouterButtonPacketProcessor; import WayofTime.bloodmagic.tile.container.ContainerItemRoutingNode; +import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; @SideOnly(Side.CLIENT) public class GuiItemRoutingNode extends GuiContainer @@ -25,15 +26,28 @@ public class GuiItemRoutingNode extends GuiContainer private GuiButton southButton; private GuiButton westButton; private GuiButton eastButton; + private GuiButton incrementButton; + private GuiButton decrementButton; - private TileEntity inventory; + private TileFilteredRoutingNode inventory; public GuiItemRoutingNode(InventoryPlayer playerInventory, IInventory tileRoutingNode) { super(new ContainerItemRoutingNode(playerInventory, tileRoutingNode)); this.xSize = 176; this.ySize = 169; - inventory = (TileEntity) tileRoutingNode; + inventory = (TileFilteredRoutingNode) tileRoutingNode; + } + + private int getCurrentActiveSlotPriority() + { + EnumFacing direction = EnumFacing.getFront(inventory.currentActiveSlot); + if (direction != null) + { + return inventory.getPriority(direction); + } + + return 0; } @Override @@ -47,6 +61,9 @@ public class GuiItemRoutingNode extends GuiContainer this.buttonList.add(this.southButton = new GuiButton(3, (this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 50, 18, 18, "S")); this.buttonList.add(this.westButton = new GuiButton(4, (this.width - this.xSize) / 2 + 133, (this.height - this.ySize) / 2 + 32, 18, 18, "W")); this.buttonList.add(this.eastButton = new GuiButton(5, (this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 32, 18, 18, "E")); + this.buttonList.add(this.incrementButton = new GuiButton(6, (this.width - this.xSize) / 2 + 97, (this.height - this.ySize) / 2 + 14, 18, 17, "^")); + this.buttonList.add(this.decrementButton = new GuiButton(7, (this.width - this.xSize) / 2 + 97, (this.height - this.ySize) / 2 + 50, 18, 17, "v")); + disableDirectionalButton(inventory.currentActiveSlot); } /** @@ -59,14 +76,31 @@ public class GuiItemRoutingNode extends GuiContainer if (button.enabled) { BloodMagicPacketHandler.INSTANCE.sendToServer(new ItemRouterButtonPacketProcessor(button.id, inventory.getPos(), inventory.getWorld())); + if (button.id < 6) + { + enableAllDirectionalButtons(); + button.enabled = false; + } } } + private void enableAllDirectionalButtons() + { + for (GuiButton button : this.buttonList) + { + button.enabled = true; + } + } + + private void disableDirectionalButton(int id) + { + this.buttonList.get(id).enabled = false; + } + @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { -// this.fontRendererObj.drawString(TextHelper.localize("tile.BloodMagic.soulForge.name"), 8, 5, 4210752); -// this.fontRendererObj.drawString(TextHelper.localize("container.inventory"), 8, 111, 4210752); + this.fontRendererObj.drawString("" + getCurrentActiveSlotPriority(), 98 + 5, 33 + 4, 0xFFFFFF); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java index 6baec865..91432b2b 100644 --- a/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java +++ b/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java @@ -66,7 +66,19 @@ public class ItemRouterButtonPacketProcessor implements IMessage, IMessageHandle TileEntity tile = world.getTileEntity(pos); if (tile instanceof TileFilteredRoutingNode) { - ((TileFilteredRoutingNode) tile).swapFilters(buttonPress); + if (buttonPress >= 6) + { + if (buttonPress == 6) + { + ((TileFilteredRoutingNode) tile).incrementCurrentPriotiryToMaximum(9); + } else if (buttonPress == 7) + { + ((TileFilteredRoutingNode) tile).decrementCurrentPriority(); + } + } else + { + ((TileFilteredRoutingNode) tile).swapFilters(buttonPress); + } } } } diff --git a/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java index 0b46b745..555fdae7 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java @@ -88,7 +88,7 @@ public class DefaultItemFilter implements IItemFilter * the input inventory to the output inventory. */ @Override - public void transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer) + public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer) { boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()]; if (accessedInventory instanceof ISidedInventory) @@ -141,7 +141,11 @@ public class DefaultItemFilter implements IItemFilter maxTransfer -= changeAmount; accessedInventory.setInventorySlotContents(slot, inputStack.stackSize <= 0 ? null : inputStack); //Sets the slot in the inventory + + return changeAmount; } + + return 0; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java index 2b013352..6965c7a7 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java @@ -26,7 +26,7 @@ public interface IItemFilter * This method is only called on an input filter to transfer ItemStacks from * the input inventory to the output inventory. */ - public void transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer); + public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer); public boolean doesStackMatchFilter(ItemStack testStack); diff --git a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java index b92769dd..fa743ad4 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java @@ -215,7 +215,7 @@ public class TestItemFilter implements IItemFilter * the input inventory to the output inventory. */ @Override - public void transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer) + public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer) { boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()]; if (accessedInventory instanceof ISidedInventory) @@ -290,7 +290,11 @@ public class TestItemFilter implements IItemFilter } } } + + return changeAmount; } + + return 0; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java index 039e613c..b764bd40 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.tile.routing; +import WayofTime.bloodmagic.api.Constants; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -8,6 +9,7 @@ import net.minecraft.util.EnumFacing; public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedInventory { public int currentActiveSlot = 0; + public int[] priorities = new int[6]; public TileFilteredRoutingNode(int size, String name) { @@ -37,6 +39,11 @@ public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedIn { super.readFromNBT(tag); currentActiveSlot = tag.getInteger("currentSlot"); + priorities = tag.getIntArray(Constants.NBT.ROUTING_PRIORITY); + if (priorities.length != 6) + { + priorities = new int[6]; + } } @Override @@ -44,6 +51,7 @@ public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedIn { super.writeToNBT(tag); tag.setInteger("currentSlot", currentActiveSlot); + tag.setIntArray(Constants.NBT.ROUTING_PRIORITY, priorities); } public void swapFilters(int requestedSlot) @@ -72,4 +80,20 @@ public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedIn { return false; } + + @Override + public int getPriority(EnumFacing side) + { + return priorities[side.getIndex()]; + } + + public void incrementCurrentPriotiryToMaximum(int max) + { + priorities[currentActiveSlot] = Math.min(priorities[currentActiveSlot] + 1, max); + } + + public void decrementCurrentPriority() + { + priorities[currentActiveSlot] = Math.max(priorities[currentActiveSlot] - 1, 0); + } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java index 6babed5e..6e67f4fa 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java @@ -114,6 +114,8 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti } } + int maxTransfer = 8; + for (Entry> outputEntry : outputMap.entrySet()) { List outputList = outputEntry.getValue(); @@ -124,7 +126,11 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti List inputList = inputEntry.getValue(); for (IItemFilter inputFilter : inputList) { - inputFilter.transferThroughInputFilter(outputFilter, 8); + maxTransfer -= inputFilter.transferThroughInputFilter(outputFilter, maxTransfer); + if (maxTransfer <= 0) + { + return; + } } } } diff --git a/src/main/resources/assets/bloodmagic/textures/gui/routingNode.png b/src/main/resources/assets/bloodmagic/textures/gui/routingNode.png index 2d87307b..50dd39e7 100644 Binary files a/src/main/resources/assets/bloodmagic/textures/gui/routingNode.png and b/src/main/resources/assets/bloodmagic/textures/gui/routingNode.png differ