From 2cb252ced73632e5a08e694f35c96e100febc57b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 00:20:37 +0200 Subject: [PATCH] Make client stacks an interface --- .../refinedstorage/gui/grid/ClientStack.java | 47 --------- .../gui/grid/GuiCraftingSettings.java | 7 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 55 +++++------ .../gui/grid/sorting/GridSorting.java | 4 +- .../gui/grid/sorting/GridSortingName.java | 8 +- .../gui/grid/sorting/GridSortingQuantity.java | 8 +- .../gui/grid/stack/ClientStackItem.java | 98 +++++++++++++++++++ .../gui/grid/stack/IClientStack.java | 17 ++++ .../network/MessageGridCraftingStart.java | 12 +-- .../network/MessageGridDelta.java | 13 ++- .../network/MessageGridPull.java | 12 +-- .../network/MessageGridUpdate.java | 10 +- .../refinedstorage/tile/TileController.java | 4 + 13 files changed, 180 insertions(+), 115 deletions(-) delete mode 100755 src/main/java/refinedstorage/gui/grid/ClientStack.java create mode 100755 src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java create mode 100755 src/main/java/refinedstorage/gui/grid/stack/IClientStack.java diff --git a/src/main/java/refinedstorage/gui/grid/ClientStack.java b/src/main/java/refinedstorage/gui/grid/ClientStack.java deleted file mode 100755 index 6532fa381..000000000 --- a/src/main/java/refinedstorage/gui/grid/ClientStack.java +++ /dev/null @@ -1,47 +0,0 @@ -package refinedstorage.gui.grid; - -import io.netty.buffer.ByteBuf; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; - -public class ClientStack { - private int id; - private ItemStack stack; - private boolean craftable; - - public ClientStack(ByteBuf buf) { - stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); - stack.setTagCompound(ByteBufUtils.readTag(buf)); - id = buf.readInt(); - craftable = buf.readBoolean(); - } - - public int getId() { - return id; - } - - public ItemStack getStack() { - return stack; - } - - public boolean isCraftable() { - return craftable; - } - - @Override - public boolean equals(Object obj) { - return obj instanceof ClientStack && ((ClientStack) obj).getId() == id; - } - - public static void write(ByteBuf buf, INetworkMaster network, ItemStack stack) { - buf.writeInt(Item.getIdFromItem(stack.getItem())); - buf.writeInt(stack.stackSize); - buf.writeInt(stack.getItemDamage()); - ByteBufUtils.writeTag(buf, stack.getTagCompound()); - buf.writeInt(NetworkUtils.getItemStackHashCode(stack)); - buf.writeBoolean(NetworkUtils.hasPattern(network, stack)); - } -} diff --git a/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java index 279fa8013..3638645d0 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java @@ -10,6 +10,7 @@ import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.network.grid.ItemGridHandler; import refinedstorage.container.ContainerCraftingSettings; import refinedstorage.gui.GuiBase; +import refinedstorage.gui.grid.stack.ClientStackItem; import refinedstorage.network.MessageGridCraftingStart; import java.io.IOException; @@ -19,12 +20,12 @@ public class GuiCraftingSettings extends GuiBase { private GuiTextField amountField; private GuiGrid gui; - private ClientStack stack; + private ClientStackItem stack; private GuiButton startButton; private GuiButton cancelButton; private GuiButton[] incrementButtons = new GuiButton[6]; - public GuiCraftingSettings(GuiGrid gui, EntityPlayer player, ClientStack stack) { + public GuiCraftingSettings(GuiGrid gui, EntityPlayer player, ClientStackItem stack) { super(new ContainerCraftingSettings(player, stack.getStack()), 172, 99); this.gui = gui; @@ -124,7 +125,7 @@ public class GuiCraftingSettings extends GuiBase { Integer quantity = Ints.tryParse(amountField.getText()); if (quantity != null && quantity > 0 && quantity <= ItemGridHandler.MAX_CRAFTING_PER_REQUEST) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridCraftingStart(stack.getId(), quantity)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridCraftingStart(stack.getHash(), quantity)); close(); } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 8a788be61..89dd33073 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -21,6 +21,8 @@ import refinedstorage.gui.GuiBase; import refinedstorage.gui.Scrollbar; import refinedstorage.gui.grid.sorting.GridSortingName; import refinedstorage.gui.grid.sorting.GridSortingQuantity; +import refinedstorage.gui.grid.stack.ClientStackItem; +import refinedstorage.gui.grid.stack.IClientStack; import refinedstorage.gui.sidebutton.*; import refinedstorage.integration.jei.IntegrationJEI; import refinedstorage.network.MessageGridCraftingClear; @@ -32,14 +34,17 @@ import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; public class GuiGrid extends GuiBase { public static final GridSortingQuantity SORTING_QUANTITY = new GridSortingQuantity(); public static final GridSortingName SORTING_NAME = new GridSortingName(); - public static Multimap ITEMS = ArrayListMultimap.create(); - public static List SORTED_ITEMS = new ArrayList<>(); + public static Multimap ITEMS = ArrayListMultimap.create(); + public static List SORTED_ITEMS = new ArrayList<>(); private static boolean markedForSorting; @@ -97,24 +102,24 @@ public class GuiGrid extends GuiBase { } private void sortItems() { - List sortedItems = new ArrayList<>(); + List sortedItems = new ArrayList<>(); if (grid.isConnected()) { sortedItems.addAll(ITEMS.values()); String query = searchField.getText().trim().toLowerCase(); - Iterator t = sortedItems.iterator(); + Iterator t = sortedItems.iterator(); while (t.hasNext()) { - ClientStack stack = t.next(); + IClientStack stack = t.next(); List filteredItems = grid.getFilteredItems(); boolean found = filteredItems.isEmpty(); for (GridFilteredItem filteredItem : filteredItems) { - if (CompareUtils.compareStack(stack.getStack(), filteredItem.getStack(), filteredItem.getCompare())) { + if (CompareUtils.compareStack(((ClientStackItem) stack).getStack(), filteredItem.getStack(), filteredItem.getCompare())) { found = true; break; @@ -141,7 +146,7 @@ public class GuiGrid extends GuiBase { String[] parts = query.split(" "); String modId = parts[0].substring(1); - String modIdFromItem = Item.REGISTRY.getNameForObject(stack.getStack().getItem()).getResourceDomain(); + String modIdFromItem = stack.getModId(); if (!modIdFromItem.contains(modId)) { t.remove(); @@ -156,11 +161,11 @@ public class GuiGrid extends GuiBase { } } - if (!stack.getStack().getDisplayName().toLowerCase().contains(itemFromMod.toString())) { + if (!stack.getName().toLowerCase().contains(itemFromMod.toString())) { t.remove(); } } - } else if (!stack.getStack().getDisplayName().toLowerCase().contains(query)) { + } else if (!stack.getName().toLowerCase().contains(query)) { t.remove(); } } @@ -274,7 +279,7 @@ public class GuiGrid extends GuiBase { } if (slot < SORTED_ITEMS.size()) { - drawItem(x, y, SORTED_ITEMS.get(slot).getStack(), true, formatQuantity(SORTED_ITEMS.get(slot).getStack().stackSize, slot)); + SORTED_ITEMS.get(slot).draw(this, x, y, GuiScreen.isShiftKeyDown() && slotNumber == slot); } if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected()) { @@ -302,7 +307,7 @@ public class GuiGrid extends GuiBase { } if (isOverSlotWithItem()) { - drawTooltip(mouseX, mouseY, SORTED_ITEMS.get(slotNumber).getStack()); + drawTooltip(mouseX, mouseY, SORTED_ITEMS.get(slotNumber).getTooltip()); } if (isOverClear(mouseX, mouseY)) { @@ -314,24 +319,6 @@ public class GuiGrid extends GuiBase { } } - private String formatQuantity(int qty, int slot) { - if (slotNumber == slot && GuiScreen.isShiftKeyDown() && qty > 1) { - return String.valueOf(qty); - } - - if (qty >= 1000000) { - return String.format(Locale.US, "%.1f", (float) qty / 1000000).replace(".0", "") + "M"; - } else if (qty >= 1000) { - return String.format(Locale.US, "%.1f", (float) qty / 1000).replace(".0", "") + "K"; - } else if (qty == 1) { - return null; - } else if (qty == 0) { - return t("gui.refinedstorage:grid.craft"); - } else { - return String.valueOf(qty); - } - } - @Override public void mouseClicked(int mouseX, int mouseY, int clickedButton) throws IOException { super.mouseClicked(mouseX, mouseY, clickedButton); @@ -361,13 +348,15 @@ public class GuiGrid extends GuiBase { ItemStack held = container.getPlayer().inventory.getItemStack(); + ClientStackItem stack = (ClientStackItem) SORTED_ITEMS.get(slotNumber); + if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && held != null && (clickedButton == 0 || clickedButton == 1)) { RefinedStorage.INSTANCE.network.sendToServer(new MessageGridInsertHeld(clickedButton == 1)); } if (isOverSlotWithItem() && (held == null || (held != null && clickedButton == 2))) { - if (SORTED_ITEMS.get(slotNumber).isCraftable() && (SORTED_ITEMS.get(slotNumber).getStack().stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { - FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), SORTED_ITEMS.get(slotNumber))); + if (SORTED_ITEMS.get(slotNumber).isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { + FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), stack)); } else { int flags = 0; @@ -383,7 +372,7 @@ public class GuiGrid extends GuiBase { flags |= IItemGridHandler.EXTRACT_SINGLE; } - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPull(SORTED_ITEMS.get(slotNumber).getId(), flags)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPull(stack.getHash(), flags)); } } } diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java index 16d2c705e..b67451fe3 100755 --- a/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java @@ -1,10 +1,10 @@ package refinedstorage.gui.grid.sorting; -import refinedstorage.gui.grid.ClientStack; +import refinedstorage.gui.grid.stack.IClientStack; import java.util.Comparator; -public abstract class GridSorting implements Comparator { +public abstract class GridSorting implements Comparator { protected int sortingDirection; public void setSortingDirection(int sortingDirection) { diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java index 5139dab4f..c61701d55 100755 --- a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java @@ -1,13 +1,13 @@ package refinedstorage.gui.grid.sorting; -import refinedstorage.gui.grid.ClientStack; +import refinedstorage.gui.grid.stack.IClientStack; import refinedstorage.tile.grid.TileGrid; public class GridSortingName extends GridSorting { @Override - public int compare(ClientStack left, ClientStack right) { - String leftName = left.getStack().getDisplayName(); - String rightName = right.getStack().getDisplayName(); + public int compare(IClientStack left, IClientStack right) { + String leftName = left.getName(); + String rightName = right.getName(); if (sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING) { return leftName.compareTo(rightName); diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java index 68fa6e4e5..d4b51b287 100755 --- a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java @@ -1,13 +1,13 @@ package refinedstorage.gui.grid.sorting; -import refinedstorage.gui.grid.ClientStack; +import refinedstorage.gui.grid.stack.IClientStack; import refinedstorage.tile.grid.TileGrid; public class GridSortingQuantity extends GridSorting { @Override - public int compare(ClientStack left, ClientStack right) { - int leftSize = left.getStack().stackSize; - int rightSize = right.getStack().stackSize; + public int compare(IClientStack left, IClientStack right) { + int leftSize = left.getQuantity(); + int rightSize = right.getQuantity(); if (leftSize != rightSize) { if (sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING) { diff --git a/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java new file mode 100755 index 000000000..ae3908859 --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java @@ -0,0 +1,98 @@ +package refinedstorage.gui.grid.stack; + +import io.netty.buffer.ByteBuf; +import joptsimple.internal.Strings; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.NetworkUtils; +import refinedstorage.gui.GuiBase; + +import java.util.Locale; + +public class ClientStackItem implements IClientStack { + private int hash; + private ItemStack stack; + private boolean craftable; + + public ClientStackItem(ByteBuf buf) { + stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); + stack.setTagCompound(ByteBufUtils.readTag(buf)); + hash = buf.readInt(); + craftable = buf.readBoolean(); + } + + public int getHash() { + return hash; + } + + public ItemStack getStack() { + return stack; + } + + @Override + public boolean isCraftable() { + return craftable; + } + + @Override + public String getName() { + return stack.getDisplayName(); + } + + @Override + public String getModId() { + return Item.REGISTRY.getNameForObject(stack.getItem()).getResourceDomain(); + } + + @Override + public String getTooltip() { + return Strings.join(stack.getTooltip(null, true), "\n"); + } + + @Override + public int getQuantity() { + return stack.stackSize; + } + + private String getQuantityForDisplay(boolean advanced) { + int qty = stack.stackSize; + + if (advanced && qty > 1) { + return String.valueOf(qty); + } + + if (qty >= 1000000) { + return String.format(Locale.US, "%.1f", (float) qty / 1000000).replace(".0", "") + "M"; + } else if (qty >= 1000) { + return String.format(Locale.US, "%.1f", (float) qty / 1000).replace(".0", "") + "K"; + } else if (qty == 1) { + return null; + } else if (qty == 0) { + return I18n.format("gui.refinedstorage:grid.craft"); + } + + return String.valueOf(qty); + } + + @Override + public void draw(GuiBase gui, int x, int y, boolean isOverWithShift) { + gui.drawItem(x, y, stack, true, getQuantityForDisplay(isOverWithShift)); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof IClientStack && ((ClientStackItem) obj).getHash() == hash; + } + + public static void write(ByteBuf buf, INetworkMaster network, ItemStack stack) { + buf.writeInt(Item.getIdFromItem(stack.getItem())); + buf.writeInt(stack.stackSize); + buf.writeInt(stack.getItemDamage()); + ByteBufUtils.writeTag(buf, stack.getTagCompound()); + buf.writeInt(NetworkUtils.getItemStackHashCode(stack)); + buf.writeBoolean(NetworkUtils.hasPattern(network, stack)); + } +} diff --git a/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java b/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java new file mode 100755 index 000000000..c5a0dc007 --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java @@ -0,0 +1,17 @@ +package refinedstorage.gui.grid.stack; + +import refinedstorage.gui.GuiBase; + +public interface IClientStack { + boolean isCraftable(); + + String getName(); + + String getModId(); + + String getTooltip(); + + int getQuantity(); + + void draw(GuiBase gui, int x, int y, boolean isOverWithShift); +} diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java index bb28f4106..853d95a60 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java @@ -8,26 +8,26 @@ import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.container.ContainerGrid; public class MessageGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { - private int id; + private int hash; private int quantity; public MessageGridCraftingStart() { } - public MessageGridCraftingStart(int id, int quantity) { - this.id = id; + public MessageGridCraftingStart(int hash, int quantity) { + this.hash = hash; this.quantity = quantity; } @Override public void fromBytes(ByteBuf buf) { - id = buf.readInt(); + hash = buf.readInt(); quantity = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { - buf.writeInt(id); + buf.writeInt(hash); buf.writeInt(quantity); } @@ -39,7 +39,7 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer { private INetworkMaster network; private ItemStack stack; private int delta; - private ClientStack clientStack; + private ClientStackItem clientStack; public MessageGridDelta() { } @@ -28,13 +29,13 @@ public class MessageGridDelta implements IMessage, IMessageHandler implements IMessage { - private int id; + private int hash; private int flags; public MessageGridPull() { } - public MessageGridPull(int id, int flags) { - this.id = id; + public MessageGridPull(int hash, int flags) { + this.hash = hash; this.flags = flags; } @Override public void fromBytes(ByteBuf buf) { - id = buf.readInt(); + hash = buf.readInt(); flags = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { - buf.writeInt(id); + buf.writeInt(hash); buf.writeInt(flags); } @@ -39,7 +39,7 @@ public class MessageGridPull extends MessageHandlerPlayerToServer { private INetworkMaster network; - private List items = new ArrayList<>(); + private List items = new ArrayList<>(); public MessageGridUpdate() { } @@ -28,7 +28,7 @@ public class MessageGridUpdate implements IMessage, IMessageHandler