From 7104138e2b4f41fac84676ce76fcd84c6a088d31 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Mon, 22 Feb 2016 21:19:22 -0500 Subject: [PATCH] Implemented Priority System for the item routing system. Lower numbers are looked at first. --- changelog.txt | 2 + .../WayofTime/bloodmagic/api/Constants.java | 1 + .../client/gui/GuiItemRoutingNode.java | 44 ++++++++++++++++-- .../ItemRouterButtonPacketProcessor.java | 14 +++++- .../bloodmagic/routing/DefaultItemFilter.java | 6 ++- .../bloodmagic/routing/IItemFilter.java | 2 +- .../bloodmagic/routing/TestItemFilter.java | 6 ++- .../tile/routing/TileFilteredRoutingNode.java | 24 ++++++++++ .../tile/routing/TileMasterRoutingNode.java | 8 +++- .../bloodmagic/textures/gui/routingNode.png | Bin 1837 -> 1843 bytes 10 files changed, 97 insertions(+), 10 deletions(-) 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 2d87307b8e0d429e34bd4cdc00ec72cca1bb2cfe..50dd39e7cc76e454f7e84448c8ab526574c32c87 100644 GIT binary patch delta 1627 zcmXw23sjO<9KRnzk{XhV+SCTMl^(P#sySDHg0Y!dX{fc8*h|+&^Yu}_0PV$$8RvXE zWi`ZPIfvz|%}t$1+KMts3y&^DTT(jFbOdZ?L{ zs%%G^XD2Q5F=njH_|v&^zWA@Qa&t(nujJdPbhRr{rqLo>th1Mv?b;DByA~J4>Uy2@ z^IqGUI4*Zo(6qXxB&M(~aOH|;sUe~V>EzhR7Yz5QYe9uG1IF&7q;WMrr+a3uJtBVc z9*{IuU##rD9?na$&^Gc7>fS=zt5okp-RsIpnjC22MTbvIlJtqq2D90t_L+nmalgMG z59AHkv7WAP4p>KIa|>GDc0bJJB06W`%1u>c)k0wL_vEGg%i9 zMtJN_t-vCBkPU|M-73sx-~ zp*>g3j84b@xWD@DU>`hS9Jkl*y;0Z}KVZ!+vf3*B3tOF@9^7=LgO>-*6z6bCYuD*? zfR2aAZGec8WdS^--3(5FL(4%pcrj=a0#L21#6~Jrq zB*nYiNfQayCqkQD@+F;1Q^KVg^pY_=_TXd~r*v($06V>Apon?7pnwMEA!*wl5reZ@ zd@$67mr)Pg zoQ&MUlKqM3XV-tfQWmPLZkrm$f3F)h596)jRPjrU_3Gd^p?PR%asfp2vd|X^jUqRVrLxlI5gd9i<7Hi-)I8{S&DN< zID_d7m%^?V>ZaQc0PAp}zjct<%2oAmG}8=KVfP zR<%J-#W9g-_DH5>qPTT%WaR#BzZB=xYQDkl1~(ZAk9wK|x4orQH+b;}KG(4yGw-)~ zF@h8OmsFt8Qt1(F#;M~D>)$`$zeKW7669W1o)sI$>h11mD{p^Xq14@jH(mMW(zF}Y zxlc?VX)G%LT)%6`6iWDk4*>{C!ug1>VhXCkp^xKv@Yck$lU=0ZdtIbnPt@OHKyG@@ zXiM12_J~-@H@x$iHVr3>DYRwtHx#=#iX9>Yj4f^;HWh{s6VE)sWIn0S8$V|l6Ufvr z5ARXEt-ZWuGrux)V&Sp>t%HASuA8M4$-Gd@Q}C^(6#M~aw9}YCX0#}hQt+5KaFv2b no}pqvjvffn5%=H3dWW18K?w)opaKoS0iffPh-h|IIIrMe1Pj#8 delta 1633 zcmZWodpy%?7=M2=>!-`uL1>d1xgVDtr72eUI4&pMR&SxXncEyW_2nuJ;$ zw=$ZQq9~SC$Td05byT9#>SVFAnmMCB=b!U_-hZC=ectc)dB4y1sleXErf)zXES8{o zrEGsJ0GMiDuhpB5^-2d;r{cZ!FhkQ zyiJHP4-#S)qS>45vKC+TeR{4xGLRvb`)0CH(H3uG5#F=O0`_zfGuG-G(tTiAd@_}) z|9wi;G#F^@9h`~79b_<&s>ZVc*6)$vpFSm|Mz26k1`O{PJ=$((4%4$Ke&$_V+d3{kq3e zaQwSLj>&khR@tgcG0LU4?3(YLBB4iWb#*|@V9RwC<1m(W>H1=1d=(Z3jjm_{l=Uz- zWZGF!PwU}x0n@2akKq&IcLdGUT#h)2Mhw8;n{_=VtkSqrTE7wnKIwaZ84fFHMQ*t< ztNC-pH+VL^mE29-fvBp+@T^{$OA|eWBHL*WqN1V}Uu!hYDLz*jX-TCuMRP0Lnxj<} zCXo7OA@aS-Tp`i7D^j#qYjh~LKQlqN@>76H_3oFr_v_m=ZIy{c=ULjv72|J3UU^~D zAzqJ<*0g?y^Ay4PJf3>5xBuM$4{~w|r$c>B1)a+DXt?Y*k6}D&f2+0$B72c2Y41p+ zcoaC+fDWbI`{=KxZmjzWLO+=^1F2IXhdazh->4(cS_aCtRa>z&BF>N>krOP@P@~L` zR^5+VdgP|!Rh>ngUvOq%t)HVj?QFTjb0w8(ykqG8%U~WstjMqksSjWmKplhou-P9w z0~3tM#^Fiyr@i_qE-YHvXIjbFfj*=j8+wj&ve>mG{M=xB(Mv^Zy9ZW@yokHDN9JQV zcW%$JX-g>(avP@^M*dectO3#8y@^&g=rGy)|inE^_{YEv*<+0fr8pe-w67F=M9@T;v9Qln2WNq5Wz*Xld@NCqx*jaYy-Q~4vTB+nbL%`z0$jqWnq+TcZG zaIl(qdv)Vb!e7)sSh`#NhEpz5WWj}P!(&=jFw1Y_XfSscq-&cR-r^yq$zNxAwY98ZJh3EvXPZ-ypd%LscB$vyHDkus#bly-g7$l z$yoveSQm9iRc(&%iGf`6Gde}KkmH;!Ted9RRc1yhAFF1>Rq)5wk5pgYQ!-iZiZCMEY