Make client stacks an interface

This commit is contained in:
Raoul Van den Berge
2016-08-13 00:20:37 +02:00
parent 26c188bd66
commit 2cb252ced7
13 changed files with 180 additions and 115 deletions

View File

@@ -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));
}
}

View File

@@ -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();
}

View File

@@ -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<Item, ClientStack> ITEMS = ArrayListMultimap.create();
public static List<ClientStack> SORTED_ITEMS = new ArrayList<>();
public static Multimap<Item, IClientStack> ITEMS = ArrayListMultimap.create();
public static List<IClientStack> SORTED_ITEMS = new ArrayList<>();
private static boolean markedForSorting;
@@ -97,24 +102,24 @@ public class GuiGrid extends GuiBase {
}
private void sortItems() {
List<ClientStack> sortedItems = new ArrayList<>();
List<IClientStack> sortedItems = new ArrayList<>();
if (grid.isConnected()) {
sortedItems.addAll(ITEMS.values());
String query = searchField.getText().trim().toLowerCase();
Iterator<ClientStack> t = sortedItems.iterator();
Iterator<IClientStack> t = sortedItems.iterator();
while (t.hasNext()) {
ClientStack stack = t.next();
IClientStack stack = t.next();
List<GridFilteredItem> 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));
}
}
}

View File

@@ -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<ClientStack> {
public abstract class GridSorting implements Comparator<IClientStack> {
protected int sortingDirection;
public void setSortingDirection(int sortingDirection) {

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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));
}
}

View File

@@ -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);
}

View File

@@ -8,26 +8,26 @@ import refinedstorage.api.network.grid.IItemGridHandler;
import refinedstorage.container.ContainerGrid;
public class MessageGridCraftingStart extends MessageHandlerPlayerToServer<MessageGridCraftingStart> 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<Messa
IItemGridHandler handler = ((ContainerGrid) container).getGrid().getHandler();
if (handler != null) {
handler.onCraftingRequested(message.id, message.quantity);
handler.onCraftingRequested(message.hash, message.quantity);
}
}
}

View File

@@ -7,15 +7,16 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.gui.grid.ClientStack;
import refinedstorage.gui.grid.GuiGrid;
import refinedstorage.gui.grid.stack.ClientStackItem;
import refinedstorage.gui.grid.stack.IClientStack;
public class MessageGridDelta implements IMessage, IMessageHandler<MessageGridDelta, IMessage> {
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<MessageGridDe
@Override
public void fromBytes(ByteBuf buf) {
clientStack = new ClientStack(buf);
clientStack = new ClientStackItem(buf);
delta = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
ClientStack.write(buf, network, stack);
ClientStackItem.write(buf, network, stack);
buf.writeInt(delta);
}
@@ -42,7 +43,9 @@ public class MessageGridDelta implements IMessage, IMessageHandler<MessageGridDe
public IMessage onMessage(MessageGridDelta message, MessageContext ctx) {
Item item = message.clientStack.getStack().getItem();
for (ClientStack stack : GuiGrid.ITEMS.get(item)) {
for (IClientStack anyStack : GuiGrid.ITEMS.get(item)) {
ClientStackItem stack = (ClientStackItem) anyStack;
if (stack.equals(message.clientStack)) {
if (stack.getStack().stackSize + message.delta == 0 && !message.clientStack.isCraftable()) {
GuiGrid.ITEMS.remove(item, stack);

View File

@@ -8,26 +8,26 @@ import refinedstorage.api.network.grid.IItemGridHandler;
import refinedstorage.container.ContainerGrid;
public class MessageGridPull extends MessageHandlerPlayerToServer<MessageGridPull> 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<MessageGridPul
IItemGridHandler handler = ((ContainerGrid) container).getGrid().getHandler();
if (handler != null) {
handler.onExtract(message.id, message.flags, player);
handler.onExtract(message.hash, message.flags, player);
}
}
}

View File

@@ -6,15 +6,15 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.gui.grid.ClientStack;
import refinedstorage.gui.grid.GuiGrid;
import refinedstorage.gui.grid.stack.ClientStackItem;
import java.util.ArrayList;
import java.util.List;
public class MessageGridUpdate implements IMessage, IMessageHandler<MessageGridUpdate, IMessage> {
private INetworkMaster network;
private List<ClientStack> items = new ArrayList<>();
private List<ClientStackItem> items = new ArrayList<>();
public MessageGridUpdate() {
}
@@ -28,7 +28,7 @@ public class MessageGridUpdate implements IMessage, IMessageHandler<MessageGridU
int items = buf.readInt();
for (int i = 0; i < items; ++i) {
this.items.add(new ClientStack(buf));
this.items.add(new ClientStackItem(buf));
}
}
@@ -37,7 +37,7 @@ public class MessageGridUpdate implements IMessage, IMessageHandler<MessageGridU
buf.writeInt(network.getItemStorage().getStacks().size());
for (ItemStack stack : network.getItemStorage().getStacks()) {
ClientStack.write(buf, network, stack);
ClientStackItem.write(buf, network, stack);
}
}
@@ -45,7 +45,7 @@ public class MessageGridUpdate implements IMessage, IMessageHandler<MessageGridU
public IMessage onMessage(MessageGridUpdate message, MessageContext ctx) {
GuiGrid.ITEMS.clear();
for (ClientStack item : message.items) {
for (ClientStackItem item : message.items) {
GuiGrid.ITEMS.put(item.getStack().getItem(), item);
}

View File

@@ -14,6 +14,7 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage;
@@ -175,6 +176,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
dataManager.addParameter(ENERGY_CAPACITY);
dataManager.addParameter(NODES);
fluidStorage.add(new FluidStack(FluidRegistry.WATER, 1000 * 32), false);
fluidStorage.add(new FluidStack(FluidRegistry.LAVA, 1000 * 32), false);
if (IntegrationIC2.isLoaded()) {
this.energyEU = new ControllerEnergyIC2(this);
} else {