From d57618f990ec2987c7074ac97413712b3f16783e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 20 Dec 2015 15:15:53 +0100 Subject: [PATCH] add search to grid! --- .../java/storagecraft/gui/GuiExporter.java | 20 ++--- src/main/java/storagecraft/gui/GuiGrid.java | 83 +++++++++++++++--- .../java/storagecraft/gui/GuiImporter.java | 28 +++--- .../network/MessageStoragePull.java | 15 ++-- .../storagecraft/storage/StorageItem.java | 15 ++++ .../storagecraft/tile/TileController.java | 4 +- .../assets/storagecraft/textures/gui/grid.png | Bin 1859 -> 1869 bytes 7 files changed, 122 insertions(+), 43 deletions(-) diff --git a/src/main/java/storagecraft/gui/GuiExporter.java b/src/main/java/storagecraft/gui/GuiExporter.java index 28eb7df76..6c3eec134 100644 --- a/src/main/java/storagecraft/gui/GuiExporter.java +++ b/src/main/java/storagecraft/gui/GuiExporter.java @@ -10,8 +10,8 @@ import storagecraft.util.InventoryUtils; public class GuiExporter extends GuiMachine { private TileExporter exporter; - private GuiButton compareNBT; - private GuiButton compareDamage; + private GuiButton compareNBTButton; + private GuiButton compareDamageButton; public GuiExporter(ContainerExporter container, TileExporter exporter) { super(container, 176, 186, exporter); @@ -23,19 +23,19 @@ public class GuiExporter extends GuiMachine { public void init(int x, int y) { super.init(x, y); - buttonList.add(compareNBT = new GuiButton(1, x + 7, y + 41, 100, 20, "")); - buttonList.add(compareDamage = new GuiButton(2, x + 7, y + 63, 120, 20, "")); + buttonList.add(compareNBTButton = new GuiButton(1, x + 7, y + 41, 100, 20, "")); + buttonList.add(compareDamageButton = new GuiButton(2, x + 7, y + 63, 120, 20, "")); } @Override public void update(int x, int y) { super.update(x, y); - compareNBT.displayString = t("misc.storagecraft:compareNBT") + ": "; - compareNBT.displayString += t("misc.storagecraft:" + ((exporter.getCompareFlags() & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT ? "on" : "off")); + compareNBTButton.displayString = t("misc.storagecraft:compareNBT") + ": "; + compareNBTButton.displayString += t("misc.storagecraft:" + ((exporter.getCompareFlags() & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT ? "on" : "off")); - compareDamage.displayString = t("misc.storagecraft:compareDamage") + ": "; - compareDamage.displayString += t("misc.storagecraft:" + ((exporter.getCompareFlags() & InventoryUtils.COMPARE_DAMAGE) == InventoryUtils.COMPARE_DAMAGE ? "on" : "off")); + compareDamageButton.displayString = t("misc.storagecraft:compareDamage") + ": "; + compareDamageButton.displayString += t("misc.storagecraft:" + ((exporter.getCompareFlags() & InventoryUtils.COMPARE_DAMAGE) == InventoryUtils.COMPARE_DAMAGE ? "on" : "off")); } @Override @@ -59,9 +59,9 @@ public class GuiExporter extends GuiMachine { int flags = exporter.getCompareFlags(); - if (button.id == compareNBT.id) { + if (button.id == compareNBTButton.id) { flags ^= InventoryUtils.COMPARE_NBT; - } else if (button.id == compareDamage.id) { + } else if (button.id == compareDamageButton.id) { flags ^= InventoryUtils.COMPARE_DAMAGE; } diff --git a/src/main/java/storagecraft/gui/GuiGrid.java b/src/main/java/storagecraft/gui/GuiGrid.java index 1039be846..74f0f6a65 100644 --- a/src/main/java/storagecraft/gui/GuiGrid.java +++ b/src/main/java/storagecraft/gui/GuiGrid.java @@ -1,5 +1,9 @@ package storagecraft.gui; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.gui.GuiTextField; import net.minecraft.inventory.Slot; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; @@ -7,6 +11,7 @@ import storagecraft.StorageCraft; import storagecraft.container.ContainerGrid; import storagecraft.network.MessageStoragePull; import storagecraft.network.MessageStoragePush; +import storagecraft.storage.StorageItem; import storagecraft.tile.TileController; import storagecraft.tile.TileGrid; @@ -14,7 +19,11 @@ public class GuiGrid extends GuiMachine { private ContainerGrid container; private TileGrid grid; - private int hoveringSlot; + private GuiTextField searchField; + + private int hoveringSlotId; + private int hoveringId; + private int offset; public GuiGrid(ContainerGrid container, TileGrid grid) { @@ -24,6 +33,18 @@ public class GuiGrid extends GuiMachine { this.grid = grid; } + @Override + public void init(int x, int y) { + super.init(x, y); + + searchField = new GuiTextField(fontRendererObj, x + 80 + 2, y + 6 + 1, 88 - 6, fontRendererObj.FONT_HEIGHT); + searchField.setEnableBackgroundDrawing(false); + searchField.setVisible(true); + searchField.setTextColor(16777215); + searchField.setCanLoseFocus(false); + searchField.setFocused(true); + } + @Override public void update(int x, int y) { super.update(x, y); @@ -46,7 +67,7 @@ public class GuiGrid extends GuiMachine { return 0; } - int max = ((int) Math.ceil((float) grid.getController().getItems().size() / (float) 9)) - 4; + int max = ((int) Math.ceil((float) getItems().size() / (float) 9)) - 4; return max < 0 ? 0 : max; } @@ -60,11 +81,11 @@ public class GuiGrid extends GuiMachine { } private boolean isHoveringOverValidSlot() { - return grid.isConnected() && isHoveringOverSlot() && hoveringSlot < grid.getController().getItems().size(); + return grid.isConnected() && isHoveringOverSlot() && hoveringSlotId < getItems().size(); } private boolean isHoveringOverSlot() { - return hoveringSlot >= 0; + return hoveringSlotId >= 0; } @Override @@ -72,6 +93,8 @@ public class GuiGrid extends GuiMachine { bindTexture("gui/grid.png"); drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + + searchField.drawTextBox(); } @Override @@ -84,17 +107,25 @@ public class GuiGrid extends GuiMachine { int x = 8; int y = 20; - hoveringSlot = -1; + List items = getItems(); + + hoveringSlotId = -1; int slot = offset * 9; for (int i = 0; i < 9 * 4; ++i) { - if (grid.isConnected() && slot < grid.getController().getItems().size()) { - drawItem(x, y, grid.getController().getItems().get(slot).toItemStack(), true); + if (slot < items.size()) { + drawItem(x, y, items.get(slot).toItemStack(), true); } if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected()) { - hoveringSlot = slot; + hoveringSlotId = slot; + + if (slot < items.size()) { + // We need to use the ID, because if we filter, the client-side index will change + // while the serverside's index will still be the same. + hoveringId = items.get(slot).getId(); + } int color = grid.isConnected() ? -2130706433 : 0xFF5B5B5B; @@ -114,7 +145,7 @@ public class GuiGrid extends GuiMachine { } if (isHoveringOverValidSlot()) { - drawTooltip(mouseX, mouseY, grid.getController().getItems().get(hoveringSlot).toItemStack()); + drawTooltip(mouseX, mouseY, items.get(hoveringSlotId).toItemStack()); } } @@ -128,7 +159,7 @@ public class GuiGrid extends GuiMachine { if (isHoveringOverSlot() && container.getPlayer().inventory.getItemStack() != null) { StorageCraft.NETWORK.sendToServer(new MessageStoragePush(controller.xCoord, controller.yCoord, controller.zCoord, -1, clickedButton == 1)); } else if (isHoveringOverValidSlot() && container.getPlayer().inventory.getItemStack() == null) { - StorageCraft.NETWORK.sendToServer(new MessageStoragePull(controller.xCoord, controller.yCoord, controller.zCoord, hoveringSlot, clickedButton == 1, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))); + StorageCraft.NETWORK.sendToServer(new MessageStoragePull(controller.xCoord, controller.yCoord, controller.zCoord, hoveringId, clickedButton == 1, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))); } else { for (int i = 0; i < container.inventorySlots.size(); ++i) { Slot slot = (Slot) container.inventorySlots.get(i); @@ -142,4 +173,36 @@ public class GuiGrid extends GuiMachine { } } } + + @Override + protected void keyTyped(char character, int keyCode) { + if (!checkHotbarKeys(keyCode) && searchField.textboxKeyTyped(character, keyCode)) { + } else { + super.keyTyped(character, keyCode); + } + } + + public List getItems() { + List items = new ArrayList(); + + if (!grid.isConnected()) { + return items; + } + + items.addAll(grid.getController().getItems()); + + if (!searchField.getText().trim().isEmpty()) { + Iterator t = items.iterator(); + + while (t.hasNext()) { + StorageItem item = t.next(); + + if (!item.toItemStack().getDisplayName().toLowerCase().contains(searchField.getText().toLowerCase())) { + t.remove(); + } + } + } + + return items; + } } diff --git a/src/main/java/storagecraft/gui/GuiImporter.java b/src/main/java/storagecraft/gui/GuiImporter.java index 5fefec2c3..0ce9f0c5a 100644 --- a/src/main/java/storagecraft/gui/GuiImporter.java +++ b/src/main/java/storagecraft/gui/GuiImporter.java @@ -10,9 +10,9 @@ import storagecraft.util.InventoryUtils; public class GuiImporter extends GuiMachine { private TileImporter importer; - private GuiButton compareNBT; - private GuiButton compareDamage; - private GuiButton mode; + private GuiButton compareNBTButton; + private GuiButton compareDamageButton; + private GuiButton modeButton; public GuiImporter(ContainerImporter container, TileImporter importer) { super(container, 176, 201, importer); @@ -24,22 +24,22 @@ public class GuiImporter extends GuiMachine { public void init(int x, int y) { super.init(x, y); - buttonList.add(compareNBT = new GuiButton(1, x + 7, y + 41, 100, 20, "")); - buttonList.add(compareDamage = new GuiButton(2, x + 7, y + 63, 120, 20, "")); - buttonList.add(mode = new GuiButton(3, x + 7, y + 85, 80, 20, "")); + buttonList.add(compareNBTButton = new GuiButton(1, x + 7, y + 41, 100, 20, "")); + buttonList.add(compareDamageButton = new GuiButton(2, x + 7, y + 63, 120, 20, "")); + buttonList.add(modeButton = new GuiButton(3, x + 7, y + 85, 80, 20, "")); } @Override public void update(int x, int y) { super.update(x, y); - compareNBT.displayString = t("misc.storagecraft:compareNBT") + ": "; - compareNBT.displayString += t("misc.storagecraft:" + ((importer.getCompareFlags() & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT ? "on" : "off")); + compareNBTButton.displayString = t("misc.storagecraft:compareNBT") + ": "; + compareNBTButton.displayString += t("misc.storagecraft:" + ((importer.getCompareFlags() & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT ? "on" : "off")); - compareDamage.displayString = t("misc.storagecraft:compareDamage") + ": "; - compareDamage.displayString += t("misc.storagecraft:" + ((importer.getCompareFlags() & InventoryUtils.COMPARE_DAMAGE) == InventoryUtils.COMPARE_DAMAGE ? "on" : "off")); + compareDamageButton.displayString = t("misc.storagecraft:compareDamage") + ": "; + compareDamageButton.displayString += t("misc.storagecraft:" + ((importer.getCompareFlags() & InventoryUtils.COMPARE_DAMAGE) == InventoryUtils.COMPARE_DAMAGE ? "on" : "off")); - mode.displayString = t("misc.storagecraft:importer.mode." + importer.getMode()); + modeButton.displayString = t("misc.storagecraft:importer.mode." + importer.getMode()); } @Override @@ -63,12 +63,12 @@ public class GuiImporter extends GuiMachine { int flags = importer.getCompareFlags(); - if (button.id == compareNBT.id) { + if (button.id == compareNBTButton.id) { flags ^= InventoryUtils.COMPARE_NBT; - } else if (button.id == compareDamage.id) { + } else if (button.id == compareDamageButton.id) { flags ^= InventoryUtils.COMPARE_DAMAGE; } - StorageCraft.NETWORK.sendToServer(new MessageImporterUpdate(importer.xCoord, importer.yCoord, importer.zCoord, flags, button.id == mode.id)); + StorageCraft.NETWORK.sendToServer(new MessageImporterUpdate(importer.xCoord, importer.yCoord, importer.zCoord, flags, button.id == modeButton.id)); } } diff --git a/src/main/java/storagecraft/network/MessageStoragePull.java b/src/main/java/storagecraft/network/MessageStoragePull.java index e7a514da1..a543d8c05 100644 --- a/src/main/java/storagecraft/network/MessageStoragePull.java +++ b/src/main/java/storagecraft/network/MessageStoragePull.java @@ -14,19 +14,18 @@ public class MessageStoragePull implements IMessage, IMessageHandler2^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;5!7ujG`J|4M0JO64!{5;QX|b^2DN4hJwV*yb`^<)Di^~Jp(|A?5fVgvY29KF#-1_AC zabIQEKTe)6#nLzT-#>Z#*Q|Dob?+`c4%GX=cH+8u26KaZ`1$qg>+2iRgXb@2VPJ4L z7b^xzl{NGBXfRmjSMFx8+5hkMwF|#rOEY|7TfqO|_EI z2qqLy2bOmb@Zo**z4F^8%unv7Uj4Cc^3GjbUb3C=wa(si=DQhGNyD7oIxyu8`=-xX zTwzJGdee>4u4-hZ=#WV=c9*c(Bh6N}z$ z`p59(ZRyn?`({JJ&wuvjWAYg|oOS&UFaSY*G?0F9k*Q$M{@uP`8TS8wa@)G3gkewq yLA_epU7Onc--$My*~oZ8Mw(vK?Sh8uuf-?dn{M_)FYy{E>^)umT-G@yGywo&mqfb& literal 1859 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j{X1tA1E>kMnhnPgh10{aTQRmDGBlm z1}6TI3>bpHv#SE5owL9rvY3H^?=T269?xHq0u+=eag8Vm&QB{TPb^AhC`ioAE78kK zEm1JhGte{p)02Fkfq`j`r;B4qMcmt47qesxdD<>!npOUHzgISS|Kmxk6DMT!oO5?v z(0$NWf+?;4`R5zU(`%1^{&8bDTVwL_|NoCy?>(S?;J4o1y;HgOFns#T%f!Ioa4uF1 zlnkG|mS$mKXqdBG2gs>m`t$3aa`D&s=64zT^K1WX;RPuH0)^*#+z=K6!-J1sg?s9M zWzJ4(*t2_$)crD}@ablE8Fpr-_fG$Lj}5A9Lh*E9IS2t4zE29?n#p!z_vuw1bJdGW zGcWT_m|b?QV&?l?m=eqKNEnl$R^Kv|WW#SL1NA?-lL{)Q9ro=5mcip^x)zAr7sqw92lzvuis@B?v$@f!SaFZd#mmnP)=z^w7t*{hqzLv`kvT{Oy{L zM)z-n<$*-eyG<}A!>_oaRc2=yD$65H_q|P7rIb^*7x#qi*Fzuw&VyJ}pL?vLiw5OVd;XqEqcCm)XU+?CwV*l}3|Ngy& ziV4%TZZ