From 201ecf99dbf2b7b1271e36bd921f67960c0dc794 Mon Sep 17 00:00:00 2001 From: Pahimar Date: Fri, 3 Apr 2015 00:39:52 -0400 Subject: [PATCH] Inventory sync when the search term is updated (client and server) and ensure that only people using the specified tablet process the inventory update packet --- .../gui/element/ElementStatefulButton.java | 27 +++++ .../gui/inventory/GuiTransmutationTablet.java | 102 +++++++++++++++++- .../handler/ItemTooltipEventHandler.java | 6 +- .../ee3/exchange/EnergyValueRegistry.java | 2 +- .../ContainerTransmutationTablet.java | 75 +++++++++++-- .../inventory/InventoryAlchemicalTome.java | 2 +- .../InventoryTransmutationTablet.java | 2 +- .../item/ItemAlchemicalInventoryUpgrade.java | 2 +- .../ee3/item/ItemBlockAlchemicalChest.java | 6 +- .../ee3/knowledge/AbilityRegistry.java | 4 +- .../ee3/knowledge/TransmutationKnowledge.java | 14 +-- .../MessageTransmutationKnowledgeUpdate.java | 4 +- .../com/pahimar/ee3/reference/Messages.java | 23 ++-- .../com/pahimar/ee3/util/FilterUtils.java | 4 +- .../java/com/pahimar/ee3/util/ItemHelper.java | 89 +++++++-------- .../pahimar/ee3/waila/WailaDataProvider.java | 6 +- src/main/resources/assets/ee3/lang/en_US.lang | 6 +- .../textures/gui/elements/buttonSortOrder.png | Bin 749 -> 18279 bytes 18 files changed, 272 insertions(+), 102 deletions(-) create mode 100644 src/main/java/com/pahimar/ee3/client/gui/element/ElementStatefulButton.java diff --git a/src/main/java/com/pahimar/ee3/client/gui/element/ElementStatefulButton.java b/src/main/java/com/pahimar/ee3/client/gui/element/ElementStatefulButton.java new file mode 100644 index 00000000..de0db66e --- /dev/null +++ b/src/main/java/com/pahimar/ee3/client/gui/element/ElementStatefulButton.java @@ -0,0 +1,27 @@ +package com.pahimar.ee3.client.gui.element; + +import com.pahimar.repackage.cofh.lib.gui.GuiBase; +import com.pahimar.repackage.cofh.lib.gui.element.ElementButton; +import net.minecraft.util.ResourceLocation; + +public class ElementStatefulButton extends ElementButton +{ + private int state; + + public ElementStatefulButton(GuiBase gui, int posX, int posY, String name, int sheetX, int sheetY, int hoverX, int hoverY, int disabledX, int disabledY, int sizeX, int sizeY, int texW, int texH, ResourceLocation texture) + { + super(gui, posX, posY, name, sheetX, sheetY, hoverX, hoverY, disabledX, disabledY, sizeX, sizeY, texW, texH, texture); + this.state = 0; + } + + public int getState() + { + return state; + } + + public ElementStatefulButton setState(int state) + { + this.state = state; + return this; + } +} diff --git a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiTransmutationTablet.java b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiTransmutationTablet.java index 6befc447..d60d6fd3 100644 --- a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiTransmutationTablet.java +++ b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiTransmutationTablet.java @@ -1,20 +1,24 @@ package com.pahimar.ee3.client.gui.inventory; import com.pahimar.ee3.client.gui.element.ElementSearchField; +import com.pahimar.ee3.client.gui.element.ElementStatefulButton; import com.pahimar.ee3.inventory.ContainerTransmutationTablet; import com.pahimar.ee3.network.PacketHandler; +import com.pahimar.ee3.network.message.MessageGuiElementClicked; import com.pahimar.ee3.network.message.MessageSliderElementUpdated; import com.pahimar.ee3.reference.Colors; +import com.pahimar.ee3.reference.Messages; import com.pahimar.ee3.reference.Textures; import com.pahimar.ee3.tileentity.TileEntityTransmutationTablet; import com.pahimar.repackage.cofh.lib.gui.GuiBase; import com.pahimar.repackage.cofh.lib.gui.GuiColor; -import com.pahimar.repackage.cofh.lib.gui.element.ElementButton; import com.pahimar.repackage.cofh.lib.gui.element.ElementSlider; import com.pahimar.repackage.cofh.lib.gui.element.ElementTextField; +import com.pahimar.repackage.cofh.lib.render.RenderHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.StatCollector; import java.text.DecimalFormat; @@ -24,11 +28,18 @@ public class GuiTransmutationTablet extends GuiBase private TileEntityTransmutationTablet tileEntityTransmutationTablet; private ElementTextField searchTextField; - private ElementButton sortOrderButton; + private ElementStatefulButton sortOrderButton; private ElementSlider slider; private static DecimalFormat energyValueDecimalFormat = new DecimalFormat("###,###,###,###,###.###"); + private static final int LEFT_MOUSEBUTTON = 0; + private static final int RIGHT_MOUSEBUTTON = 1; + + private static final int SORT_BY_DISPLAY_NAME = 0; + private static final int SORT_BY_ENERGY_VALUE = 1; + private static final int SORT_BY_ID = 2; + public GuiTransmutationTablet(InventoryPlayer inventoryPlayer, TileEntityTransmutationTablet tileEntityTransmutationTablet) { super(new ContainerTransmutationTablet(inventoryPlayer, tileEntityTransmutationTablet), Textures.Gui.TRANSMUTATION_TABLET); @@ -49,7 +60,31 @@ public class GuiTransmutationTablet extends GuiBase searchTextField.backgroundColor = new GuiColor(0, 0, 0, 0).getColor(); searchTextField.borderColor = new GuiColor(0, 0, 0, 0).getColor(); - sortOrderButton = new ElementButton(this, 151, 36, "sortOrder", 0, 0, 18, 0, 36, 0, 18, 18, 54, 18, Textures.Gui.Elements.BUTTON_SORT_ORDER); + sortOrderButton = new ElementStatefulButton(this, 151, 36, "sortOrder", 0, 0, 18, 0, 36, 0, 18, 18, 54, 18, Textures.Gui.Elements.BUTTON_SORT_ORDER) + { + @Override + public void drawBackground(int mouseX, int mouseY, float gameTicks) + { + + RenderHelper.bindTexture(texture); + if (isEnabled()) + { + if (getState() == SORT_BY_DISPLAY_NAME) + { + drawTexturedModalRect(posX, posY, 36, 0, sizeX, sizeY); + } + else if (getState() == SORT_BY_ENERGY_VALUE) + { + drawTexturedModalRect(posX, posY, 0, 0, sizeX, sizeY); + } + else if (getState() == SORT_BY_ID) + { + drawTexturedModalRect(posX, posY, 18, 0, sizeX, sizeY); + } + } + } + }; + setTooltipByState(); slider = new ElementSlider(this, 239, 36, 12, 201, 187, 0) { @@ -91,7 +126,66 @@ public class GuiTransmutationTablet extends GuiBase protected void drawGuiContainerForegroundLayer(int x, int y) { super.drawGuiContainerForegroundLayer(x, y); - fontRendererObj.drawString("Energy Value:", 8, 140, Integer.parseInt(Colors.PURE_WHITE, 16)); // TODO Localize + fontRendererObj.drawString(String.format("%s:", StatCollector.translateToLocal(Messages.ENERGY_VALUE)), 8, 140, Integer.parseInt(Colors.PURE_WHITE, 16)); // TODO Localize fontRendererObj.drawString(String.format("%s", energyValueDecimalFormat.format(tileEntityTransmutationTablet.getStoredEnergyValue().getEnergyValue())), 8, 150, Integer.parseInt(Colors.PURE_WHITE, 16)); } + + @Override + public void handleElementButtonClick(String buttonName, int mouseButton) + { + if (buttonName.equals("sortOrder")) + { + PacketHandler.INSTANCE.sendToServer(new MessageGuiElementClicked(buttonName, mouseButton)); + + if (mouseButton == LEFT_MOUSEBUTTON) + { + if (sortOrderButton.getState() == SORT_BY_DISPLAY_NAME) + { + sortOrderButton.setState(SORT_BY_ENERGY_VALUE); + } + else if (sortOrderButton.getState() == SORT_BY_ENERGY_VALUE) + { + sortOrderButton.setState(SORT_BY_ID); + } + else if (sortOrderButton.getState() == SORT_BY_ID) + { + sortOrderButton.setState(SORT_BY_DISPLAY_NAME); + } + } + else if (mouseButton == RIGHT_MOUSEBUTTON) + { + if (sortOrderButton.getState() == SORT_BY_DISPLAY_NAME) + { + sortOrderButton.setState(SORT_BY_ID); + } + else if (sortOrderButton.getState() == SORT_BY_ENERGY_VALUE) + { + sortOrderButton.setState(SORT_BY_DISPLAY_NAME); + } + else if (sortOrderButton.getState() == SORT_BY_ID) + { + sortOrderButton.setState(SORT_BY_ENERGY_VALUE); + } + } + + setTooltipByState(); + } + } + + private void setTooltipByState() + { + sortOrderButton.clearToolTip(); + if (sortOrderButton.getState() == SORT_BY_DISPLAY_NAME) + { + sortOrderButton.setToolTip(Messages.Tooltips.SORT_BY_DISPLAY_NAME); + } + else if (sortOrderButton.getState() == SORT_BY_ENERGY_VALUE) + { + sortOrderButton.setToolTip(Messages.Tooltips.SORT_BY_ENERGY_VALUE); + } + else if (sortOrderButton.getState() == SORT_BY_ID) + { + sortOrderButton.setToolTip(Messages.Tooltips.SORT_BY_ID); + } + } } diff --git a/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java b/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java index 5c58b221..f394f802 100644 --- a/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java +++ b/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java @@ -61,17 +61,17 @@ public class ItemTooltipEventHandler UUID playerUUID = ItemHelper.getOwnerUUID(event.itemStack); if (playerUUID != null && UsernameCache.containsUUID(playerUUID)) { - event.toolTip.add(StatCollector.translateToLocalFormatted(Messages.ITEM_BELONGS_TO, UsernameCache.getLastKnownUsername(playerUUID))); + event.toolTip.add(StatCollector.translateToLocalFormatted(Messages.Tooltips.ITEM_BELONGS_TO, UsernameCache.getLastKnownUsername(playerUUID))); } else if (ItemHelper.hasOwnerName(event.itemStack)) { - event.toolTip.add(StatCollector.translateToLocalFormatted(Messages.ITEM_BELONGS_TO, ItemHelper.getOwnerName(event.itemStack))); + event.toolTip.add(StatCollector.translateToLocalFormatted(Messages.Tooltips.ITEM_BELONGS_TO, ItemHelper.getOwnerName(event.itemStack))); } else { if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) { - event.toolTip.add(StatCollector.translateToLocal(Messages.ITEM_BELONGS_TO_NO_ONE)); + event.toolTip.add(StatCollector.translateToLocal(Messages.Tooltips.ITEM_BELONGS_TO_NO_ONE)); } } } diff --git a/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java b/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java index 71d358d7..b3befb95 100644 --- a/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java +++ b/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java @@ -35,7 +35,7 @@ public class EnergyValueRegistry implements INBTTaggable, JsonSerializer stackMappings; private ImmutableSortedMap> valueMappings; - private Set allItemStacksWithValues = new TreeSet(ItemHelper.baseComparator); + private Set allItemStacksWithValues = new TreeSet(ItemHelper.idComparator); private EnergyValueRegistry() { diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java b/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java index 354a6fa0..02b41348 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java @@ -1,6 +1,7 @@ package com.pahimar.ee3.inventory; import com.pahimar.ee3.exchange.EnergyValueRegistry; +import com.pahimar.ee3.inventory.element.IElementButtonHandler; import com.pahimar.ee3.inventory.element.IElementSliderHandler; import com.pahimar.ee3.inventory.element.IElementTextFieldHandler; import com.pahimar.ee3.item.ItemAlchemicalTome; @@ -27,13 +28,13 @@ import net.minecraft.item.ItemStack; import java.util.*; -public class ContainerTransmutationTablet extends ContainerEE implements IElementTextFieldHandler, IElementSliderHandler +public class ContainerTransmutationTablet extends ContainerEE implements IElementTextFieldHandler, IElementSliderHandler, IElementButtonHandler { private InventoryTransmutationTablet inventoryTransmutationTablet; public final TileEntityTransmutationTablet tileEntityTransmutationTablet; private float energyValue; private String searchTerm; - private boolean requiresUpdate = false; + private int sortOrder; public ContainerTransmutationTablet(InventoryPlayer inventoryPlayer, TileEntityTransmutationTablet tileEntityTransmutationTablet) { @@ -50,6 +51,7 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen } inventoryTransmutationTablet = new InventoryTransmutationTablet(knownTransmutations); + this.sortOrder = 0; this.energyValue = tileEntityTransmutationTablet.getStoredEnergyValue().getEnergyValue(); this.addSlotToContainer(new SlotTabletInput(this, tileEntityTransmutationTablet, TileEntityTransmutationTablet.ITEM_INPUT_1, 62, 24)); @@ -137,10 +139,14 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen energyValueAsInt = (energyValueAsInt & 0xffff) | (updatedValue << 16); energyValue = Float.intBitsToFloat(energyValueAsInt); } - - if (valueType == 0 || valueType == 1) + else if (valueType == 2) { - this.updateInventory(); + sortOrder = updatedValue; + } + + if (valueType == 0 || valueType == 1 || valueType == 2) + { + updateInventory(); } } @@ -175,7 +181,19 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen Set filteredSet = FilterUtils.filterByNameContains(this.inventoryTransmutationTablet.getKnownTransmutations(), searchTerm); List filteredList = new ArrayList(FilterUtils.filterByEnergyValue(filteredSet, energyValue)); - Collections.sort(filteredList, ItemHelper.displayNameComparator); + + if (sortOrder == 0) + { + Collections.sort(filteredList, ItemHelper.displayNameComparator); + } + else if (sortOrder == 1) + { + Collections.sort(filteredList, ItemHelper.energyValueComparator); + } + else if (sortOrder == 2) + { + Collections.sort(filteredList, ItemHelper.idComparator); + } if (filteredList.size() <= 30) { @@ -253,6 +271,44 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen return itemStack; } + @Override + public void handleElementButtonClick(String elementName, int mouseButton) + { + if (elementName.equals("sortOrder")) + { + if (mouseButton == 0) + { + if (sortOrder == 0) + { + sortOrder = 1; + } + else if (sortOrder == 1) + { + sortOrder = 2; + } + else if (sortOrder == 2) + { + sortOrder = 0; + } + } + else if (mouseButton == 1) + { + if (sortOrder == 0) + { + sortOrder = 2; + } + else if (sortOrder == 1) + { + sortOrder = 0; + } + else if (sortOrder == 2) + { + sortOrder = 1; + } + } + } + } + private class SlotAlchemicalTome extends Slot { private ContainerTransmutationTablet containerTransmutationTablet; @@ -296,12 +352,11 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen { super.putStack(itemStack); - Set knownTransmutations = TransmutationKnowledgeRegistry.getInstance().getPlayersKnownTransmutations(ItemHelper.getOwnerUUID(itemStack)); - this.containerTransmutationTablet.inventoryTransmutationTablet = new InventoryTransmutationTablet(knownTransmutations); - this.containerTransmutationTablet.updateInventory(); - if (!this.tileEntityTransmutationTablet.getWorldObj().isRemote && itemStack != null && itemStack.getItem() instanceof ItemAlchemicalTome && ItemHelper.hasOwnerUUID(itemStack)) { + Set knownTransmutations = TransmutationKnowledgeRegistry.getInstance().getPlayersKnownTransmutations(ItemHelper.getOwnerUUID(itemStack)); + this.containerTransmutationTablet.inventoryTransmutationTablet = new InventoryTransmutationTablet(knownTransmutations); + this.containerTransmutationTablet.updateInventory(); PacketHandler.INSTANCE.sendToAllAround(new MessageTransmutationKnowledgeUpdate(this.containerTransmutationTablet.tileEntityTransmutationTablet, knownTransmutations), new NetworkRegistry.TargetPoint(this.tileEntityTransmutationTablet.getWorldObj().provider.dimensionId, (double) this.tileEntityTransmutationTablet.xCoord, (double) this.tileEntityTransmutationTablet.yCoord, (double) this.tileEntityTransmutationTablet.zCoord, 5d)); } } diff --git a/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalTome.java b/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalTome.java index 477f4b19..f09d8ba1 100644 --- a/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalTome.java +++ b/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalTome.java @@ -23,7 +23,7 @@ public class InventoryAlchemicalTome implements IInventory } else { - this.knownTransmutations = new TreeSet(ItemHelper.baseComparator); + this.knownTransmutations = new TreeSet(ItemHelper.idComparator); } inventory = knownTransmutations.toArray(inventory); } diff --git a/src/main/java/com/pahimar/ee3/inventory/InventoryTransmutationTablet.java b/src/main/java/com/pahimar/ee3/inventory/InventoryTransmutationTablet.java index a3bcb957..e30d3898 100644 --- a/src/main/java/com/pahimar/ee3/inventory/InventoryTransmutationTablet.java +++ b/src/main/java/com/pahimar/ee3/inventory/InventoryTransmutationTablet.java @@ -22,7 +22,7 @@ public class InventoryTransmutationTablet implements IInventory { inventory = new ItemStack[30]; - this.knownTransmutations = new TreeSet(ItemHelper.baseComparator); + this.knownTransmutations = new TreeSet(ItemHelper.idComparator); if (knownTransmutations != null) { this.knownTransmutations.addAll(knownTransmutations); diff --git a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalInventoryUpgrade.java b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalInventoryUpgrade.java index 89a710b8..f1dc9b41 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalInventoryUpgrade.java +++ b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalInventoryUpgrade.java @@ -72,7 +72,7 @@ public class ItemAlchemicalInventoryUpgrade extends ItemEE @SideOnly(Side.CLIENT) public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean flag) { - list.add(StatCollector.translateToLocal(Messages.UPGRADES_CHESTS)); + list.add(StatCollector.translateToLocal(Messages.Tooltips.UPGRADES_CHESTS)); } @Override diff --git a/src/main/java/com/pahimar/ee3/item/ItemBlockAlchemicalChest.java b/src/main/java/com/pahimar/ee3/item/ItemBlockAlchemicalChest.java index bd4d8f0c..9c50e38e 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemBlockAlchemicalChest.java +++ b/src/main/java/com/pahimar/ee3/item/ItemBlockAlchemicalChest.java @@ -32,15 +32,15 @@ public class ItemBlockAlchemicalChest extends ItemBlock if (metaData == 0) { - list.add(StatCollector.translateToLocal(StatCollector.translateToLocal(Messages.SMALL))); + list.add(StatCollector.translateToLocal(StatCollector.translateToLocal(Messages.Tooltips.SMALL))); } else if (metaData == 1) { - list.add(StatCollector.translateToLocal(StatCollector.translateToLocal(Messages.MEDIUM))); + list.add(StatCollector.translateToLocal(StatCollector.translateToLocal(Messages.Tooltips.MEDIUM))); } else if (metaData == 2) { - list.add(StatCollector.translateToLocal(StatCollector.translateToLocal(Messages.LARGE))); + list.add(StatCollector.translateToLocal(StatCollector.translateToLocal(Messages.Tooltips.LARGE))); } } } diff --git a/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java b/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java index 3b723fba..372a7065 100644 --- a/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java +++ b/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java @@ -28,7 +28,7 @@ public class AbilityRegistry implements JsonSerializer, JsonDes private boolean hasBeenModified; private Set notLearnableSet; private Set notRecoverableSet; - private SortedSet allLearnableItemStacks = new TreeSet(ItemHelper.baseComparator); + private SortedSet allLearnableItemStacks = new TreeSet(ItemHelper.idComparator); private AbilityRegistry() { @@ -56,7 +56,7 @@ public class AbilityRegistry implements JsonSerializer, JsonDes public void discoverAllLearnableItemStacks() { - this.allLearnableItemStacks = new TreeSet(ItemHelper.baseComparator); + this.allLearnableItemStacks = new TreeSet(ItemHelper.idComparator); for (WrappedStack wrappedStack : EnergyValueRegistry.getInstance().getStackValueMap().keySet()) { if (isLearnable(wrappedStack) && EnergyValueRegistry.getInstance().getEnergyValue(wrappedStack) != null) diff --git a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java b/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java index c3db3de0..48f63b4f 100644 --- a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java +++ b/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java @@ -26,7 +26,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer(ItemHelper.baseComparator)); + this(new TreeSet(ItemHelper.idComparator)); } public TransmutationKnowledge(Collection knownTransmutations) @@ -37,7 +37,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer knownTransmutations, boolean canTransmuteEverything) { this.canTransmuteEverything = canTransmuteEverything; - this.knownTransmutations = new TreeSet(ItemHelper.baseComparator); + this.knownTransmutations = new TreeSet(ItemHelper.idComparator); this.knownTransmutations.addAll(knownTransmutations); hasBeenModified = false; } @@ -50,7 +50,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer(ItemHelper.baseComparator); + this.knownTransmutations = new TreeSet(ItemHelper.idComparator); this.readFromNBT(nbtTagCompound); hasBeenModified = false; } @@ -150,7 +150,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer(ItemHelper.baseComparator); + knownTransmutations = new TreeSet(ItemHelper.idComparator); for (int i = 0; i < tagList.tagCount(); ++i) { NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); @@ -160,7 +160,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer(ItemHelper.baseComparator); + knownTransmutations = new TreeSet(ItemHelper.idComparator); } if (nbtTagCompound.hasKey(Names.NBT.CAN_TRANSMUTE_ANYTHING)) @@ -174,7 +174,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer(ItemHelper.baseComparator); + knownTransmutations = new TreeSet(ItemHelper.idComparator); canTransmuteEverything = false; } } @@ -245,7 +245,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer itemStacks = new TreeSet(ItemHelper.baseComparator); + Set itemStacks = new TreeSet(ItemHelper.idComparator); if (jsonObject.has("canTransmuteEverything") && jsonObject.get("canTransmuteEverything").isJsonPrimitive()) { diff --git a/src/main/java/com/pahimar/ee3/network/message/MessageTransmutationKnowledgeUpdate.java b/src/main/java/com/pahimar/ee3/network/message/MessageTransmutationKnowledgeUpdate.java index 0a49939e..05e1cb3e 100644 --- a/src/main/java/com/pahimar/ee3/network/message/MessageTransmutationKnowledgeUpdate.java +++ b/src/main/java/com/pahimar/ee3/network/message/MessageTransmutationKnowledgeUpdate.java @@ -123,9 +123,7 @@ public class MessageTransmutationKnowledgeUpdate implements IMessage, IMessageHa if (guiContainer.inventorySlots instanceof ContainerTransmutationTablet) { - TileEntityTransmutationTablet tileEntityTransmutationTablet = ((ContainerTransmutationTablet) guiContainer.inventorySlots).tileEntityTransmutationTablet; - - if (tileEntityTransmutationTablet.xCoord == message.xCoord && tileEntityTransmutationTablet.yCoord == message.yCoord && tileEntityTransmutationTablet.zCoord == message.zCoord) + if (FMLClientHandler.instance().getWorldClient().getTileEntity(message.xCoord, message.yCoord, message.zCoord) instanceof TileEntityTransmutationTablet) { ((ContainerTransmutationTablet) guiContainer.inventorySlots).handleTransmutationKnowledgeUpdate(message.transmutationKnowledge); } diff --git a/src/main/java/com/pahimar/ee3/reference/Messages.java b/src/main/java/com/pahimar/ee3/reference/Messages.java index 30fea3b5..23abe11a 100644 --- a/src/main/java/com/pahimar/ee3/reference/Messages.java +++ b/src/main/java/com/pahimar/ee3/reference/Messages.java @@ -2,14 +2,8 @@ package com.pahimar.ee3.reference; public final class Messages { - public static final String UPGRADES_CHESTS = "tooltip.ee3:upgradesPrefix"; - public static final String ITEM_BELONGS_TO = "tooltip.ee3:belongsTo"; - public static final String ITEM_BELONGS_TO_NO_ONE = "tooltip.ee3:belongsToNoOne"; - public static final String SMALL = "tooltip.ee3:small"; - public static final String MEDIUM = "tooltip.ee3:medium"; - public static final String LARGE = "tooltip.ee3:large"; - public static final String OWNER_SET_TO_SELF = "misc.ee3:owner-set-to-self"; + public static final String ENERGY_VALUE = "misc.ee3:energy-value"; /* Fingerprint check related constants */ public static final String NO_FINGERPRINT_MESSAGE = "The copy of Equivalent Exchange 3 that you are running is a development version of the mod, and as such may be unstable and/or incomplete."; @@ -22,6 +16,21 @@ public final class Messages public static final String NO_KNOWN_TRANSMUTATIONS = GUI_PREFIX + "alchemicalTome.noTransmutationsKnown"; } + public static final class Tooltips + { + private static final String TOOLTIP_PREFIX = "tooltip.ee3:"; + + public static final String UPGRADES_CHESTS = TOOLTIP_PREFIX + "upgradesPrefix"; + public static final String ITEM_BELONGS_TO = TOOLTIP_PREFIX + "belongsTo"; + public static final String ITEM_BELONGS_TO_NO_ONE = TOOLTIP_PREFIX + "belongsToNoOne"; + public static final String SMALL = TOOLTIP_PREFIX + "small"; + public static final String MEDIUM = TOOLTIP_PREFIX + "medium"; + public static final String LARGE = TOOLTIP_PREFIX + "large"; + public static final String SORT_BY_DISPLAY_NAME = TOOLTIP_PREFIX + "sortByDisplayName"; + public static final String SORT_BY_ENERGY_VALUE = TOOLTIP_PREFIX + "sortByEnergyValue"; + public static final String SORT_BY_ID = TOOLTIP_PREFIX + "sortByID"; + } + public static final class Commands { private static final String COMMAND_PREFIX = "commands.ee3."; diff --git a/src/main/java/com/pahimar/ee3/util/FilterUtils.java b/src/main/java/com/pahimar/ee3/util/FilterUtils.java index 6db1d0ea..cbd0b8eb 100644 --- a/src/main/java/com/pahimar/ee3/util/FilterUtils.java +++ b/src/main/java/com/pahimar/ee3/util/FilterUtils.java @@ -11,7 +11,7 @@ public class FilterUtils { public static Set filterForItemBlock(Set unfilteredItemStackSet) { - return filterForItemBlock(unfilteredItemStackSet, ItemHelper.baseComparator); + return filterForItemBlock(unfilteredItemStackSet, ItemHelper.idComparator); } public static Set filterForItemBlock(Set unfilteredItemStackSet, Comparator comparator) @@ -31,7 +31,7 @@ public class FilterUtils public static Set filterByNameStartsWith(Set unfilteredItemStackSet, String filterString) { - return filterByNameStartsWith(unfilteredItemStackSet, filterString, ItemHelper.baseComparator); + return filterByNameStartsWith(unfilteredItemStackSet, filterString, ItemHelper.idComparator); } public static Set filterByNameStartsWith(Set unfilteredItemStackSet, String filterString, Comparator comparator) diff --git a/src/main/java/com/pahimar/ee3/util/ItemHelper.java b/src/main/java/com/pahimar/ee3/util/ItemHelper.java index f802b701..0e2e0135 100644 --- a/src/main/java/com/pahimar/ee3/util/ItemHelper.java +++ b/src/main/java/com/pahimar/ee3/util/ItemHelper.java @@ -1,10 +1,10 @@ package com.pahimar.ee3.util; +import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.reference.Names; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; import java.util.Comparator; import java.util.UUID; @@ -18,7 +18,7 @@ public class ItemHelper return clonedItemStack; } - public static Comparator baseComparator = new Comparator() + public static Comparator idComparator = new Comparator() { public int compare(ItemStack itemStack1, ItemStack itemStack2) { @@ -97,55 +97,7 @@ public class ItemHelper { if (itemStack1.getDisplayName().equalsIgnoreCase(itemStack2.getDisplayName())) { - // Sort on itemID - if (Item.getIdFromItem(itemStack1.getItem()) - Item.getIdFromItem(itemStack2.getItem()) == 0) - { - // Sort on item - if (itemStack1.getItem() == itemStack2.getItem()) - { - // Then sort on meta - if (itemStack1.getItemDamage() == itemStack2.getItemDamage() || itemStack1.getItemDamage() == OreDictionary.WILDCARD_VALUE || itemStack2.getItemDamage() == OreDictionary.WILDCARD_VALUE) - { - // Then sort on NBT - if (itemStack1.hasTagCompound() && itemStack2.hasTagCompound()) - { - // Then sort on stack size - if (ItemStack.areItemStackTagsEqual(itemStack1, itemStack2)) - { - return (itemStack1.stackSize - itemStack2.stackSize); - } - else - { - return (itemStack1.getTagCompound().hashCode() - itemStack2.getTagCompound().hashCode()); - } - } - else if (!(itemStack1.hasTagCompound()) && itemStack2.hasTagCompound()) - { - return -1; - } - else if (itemStack1.hasTagCompound() && !(itemStack2.hasTagCompound())) - { - return 1; - } - else - { - return (itemStack1.stackSize - itemStack2.stackSize); - } - } - else - { - return (itemStack1.getItemDamage() - itemStack2.getItemDamage()); - } - } - else - { - return itemStack1.getItem().getUnlocalizedName(itemStack1).compareToIgnoreCase(itemStack2.getItem().getUnlocalizedName(itemStack2)); - } - } - else - { - return Item.getIdFromItem(itemStack1.getItem()) - Item.getIdFromItem(itemStack2.getItem()); - } + return idComparator.compare(itemStack1, itemStack2); } else { @@ -167,6 +119,37 @@ public class ItemHelper } }; + public static Comparator energyValueComparator = new Comparator() + { + @Override + public int compare(ItemStack itemStack1, ItemStack itemStack2) + { + if (itemStack1 != null && itemStack2 != null) + { + if (EnergyValueRegistry.getInstance().hasEnergyValue(itemStack1) && EnergyValueRegistry.getInstance().hasEnergyValue(itemStack2)) + { + return Float.compare(EnergyValueRegistry.getInstance().getEnergyValue(itemStack1).getEnergyValue(), EnergyValueRegistry.getInstance().getEnergyValue(itemStack2).getEnergyValue()); + } + else + { + return idComparator.compare(itemStack1, itemStack2); + } + } + else if (itemStack1 != null) + { + return -1; + } + else if (itemStack2 != null) + { + return 1; + } + else + { + return 0; + } + } + }; + /** * Compares two ItemStacks for equality, testing itemID, metaData, stackSize, and their NBTTagCompounds (if they are * present) @@ -177,7 +160,7 @@ public class ItemHelper */ public static boolean equals(ItemStack first, ItemStack second) { - return (baseComparator.compare(first, second) == 0); + return (idComparator.compare(first, second) == 0); } public static boolean equalsIgnoreStackSize(ItemStack itemStack1, ItemStack itemStack2) @@ -216,7 +199,7 @@ public class ItemHelper public static int compare(ItemStack itemStack1, ItemStack itemStack2) { - return baseComparator.compare(itemStack1, itemStack2); + return idComparator.compare(itemStack1, itemStack2); } public static String toString(ItemStack itemStack) diff --git a/src/main/java/com/pahimar/ee3/waila/WailaDataProvider.java b/src/main/java/com/pahimar/ee3/waila/WailaDataProvider.java index 4230915f..a0a468ff 100644 --- a/src/main/java/com/pahimar/ee3/waila/WailaDataProvider.java +++ b/src/main/java/com/pahimar/ee3/waila/WailaDataProvider.java @@ -37,15 +37,15 @@ public class WailaDataProvider implements IWailaDataProvider } else if (accessor.getTileEntity() instanceof TileEntityAlchemicalChestSmall) { - currentTip.set(0, SpecialChars.WHITE + StatCollector.translateToLocal(Messages.SMALL) + " " + StatCollector.translateToLocal(Names.Blocks.ALCHEMICAL_CHEST)); + currentTip.set(0, SpecialChars.WHITE + StatCollector.translateToLocal(Messages.Tooltips.SMALL) + " " + StatCollector.translateToLocal(Names.Blocks.ALCHEMICAL_CHEST)); } else if (accessor.getTileEntity() instanceof TileEntityAlchemicalChestMedium) { - currentTip.set(0, SpecialChars.WHITE + StatCollector.translateToLocal(Messages.MEDIUM) + " " + StatCollector.translateToLocal(Names.Blocks.ALCHEMICAL_CHEST)); + currentTip.set(0, SpecialChars.WHITE + StatCollector.translateToLocal(Messages.Tooltips.MEDIUM) + " " + StatCollector.translateToLocal(Names.Blocks.ALCHEMICAL_CHEST)); } else if (accessor.getTileEntity() instanceof TileEntityAlchemicalChestLarge) { - currentTip.set(0, SpecialChars.WHITE + StatCollector.translateToLocal(Messages.LARGE) + " " + StatCollector.translateToLocal(Names.Blocks.ALCHEMICAL_CHEST)); + currentTip.set(0, SpecialChars.WHITE + StatCollector.translateToLocal(Messages.Tooltips.LARGE) + " " + StatCollector.translateToLocal(Names.Blocks.ALCHEMICAL_CHEST)); } else if (accessor.getTileEntity() instanceof TileEntityAlchemyArray) { diff --git a/src/main/resources/assets/ee3/lang/en_US.lang b/src/main/resources/assets/ee3/lang/en_US.lang index adf70c1b..9319b810 100644 --- a/src/main/resources/assets/ee3/lang/en_US.lang +++ b/src/main/resources/assets/ee3/lang/en_US.lang @@ -164,6 +164,10 @@ tooltip.ee3:upgradesPrefix=Upgrades (Alchemical) Chests tooltip.ee3:small=Small tooltip.ee3:medium=Medium tooltip.ee3:large=Large +tooltip.ee3:sortByDisplayName=Sort by Display Name +tooltip.ee3:sortByEnergyValue=Sort by Energy Value +tooltip.ee3:sortByID=Sort by ID #Misc -misc.ee3:owner-set-to-self=You are now the owner of %s \ No newline at end of file +misc.ee3:owner-set-to-self=You are now the owner of %s +misc.ee3:energy-value=Energy Value \ No newline at end of file diff --git a/src/main/resources/assets/ee3/textures/gui/elements/buttonSortOrder.png b/src/main/resources/assets/ee3/textures/gui/elements/buttonSortOrder.png index 679b8456cbeda9cced766637c56c84524d35c9ec..7992283f0313996db308ace219af0ba5731a6c73 100644 GIT binary patch literal 18279 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 AZvX%Q