diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 621c3f016..dda61cd03 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -295,7 +295,7 @@ public abstract class GuiBase extends GuiContainer { return guiTop; } - protected int calculateOffsetOnScale(int pos, float scale) { + public int calculateOffsetOnScale(int pos, float scale) { float multiplier = (pos / scale); return (int) multiplier; diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 4bafad742..a0d329982 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -9,6 +9,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.network.IGuiHandler; import refinedstorage.RefinedStorageGui; import refinedstorage.container.*; +import refinedstorage.gui.craftingmonitor.GuiCraftingMonitor; import refinedstorage.gui.grid.GuiGrid; import refinedstorage.tile.*; import refinedstorage.tile.externalstorage.TileExternalStorage; diff --git a/src/main/java/refinedstorage/gui/craftingmonitor/CraftingMonitorElementRoot.java b/src/main/java/refinedstorage/gui/craftingmonitor/CraftingMonitorElementRoot.java new file mode 100755 index 000000000..a780456fa --- /dev/null +++ b/src/main/java/refinedstorage/gui/craftingmonitor/CraftingMonitorElementRoot.java @@ -0,0 +1,54 @@ +package refinedstorage.gui.craftingmonitor; + +import io.netty.buffer.ByteBuf; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.gui.GuiBase; + +public class CraftingMonitorElementRoot implements ICraftingMonitorElement { + static { + REGISTRY.put(0, buf -> new CraftingMonitorElementRoot(buf.readInt(), ByteBufUtils.readItemStack(buf), buf.readInt())); + } + + private int id; + private ItemStack output; + private int quantity; + + public CraftingMonitorElementRoot(int id, ItemStack output, int quantity) { + this.id = id; + this.output = output; + this.quantity = quantity; + } + + @Override + public void draw(GuiBase gui, int x, int y) { + gui.drawItem(x + 2, y + 1, output); + + float scale = 0.5f; + + GlStateManager.pushMatrix(); + GlStateManager.scale(scale, scale, 1); + + gui.drawString(gui.calculateOffsetOnScale(x + 21, scale), gui.calculateOffsetOnScale(y + 7, scale), quantity + " " + output.getDisplayName()); + + GlStateManager.popMatrix(); + } + + @Override + public int getTaskId() { + return id; + } + + @Override + public int getType() { + return 0; + } + + @Override + public void write(ByteBuf buf) { + buf.writeInt(id); + ByteBufUtils.writeItemStack(buf, output); + buf.writeInt(quantity); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/craftingmonitor/GuiCraftingMonitor.java similarity index 63% rename from src/main/java/refinedstorage/gui/GuiCraftingMonitor.java rename to src/main/java/refinedstorage/gui/craftingmonitor/GuiCraftingMonitor.java index 017a148c2..0f8cfc72a 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/craftingmonitor/GuiCraftingMonitor.java @@ -1,13 +1,13 @@ -package refinedstorage.gui; +package refinedstorage.gui.craftingmonitor; import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerCraftingMonitor; +import refinedstorage.gui.GuiBase; +import refinedstorage.gui.Scrollbar; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.network.MessageCraftingMonitorCancel; -import refinedstorage.tile.ClientCraftingTask; import refinedstorage.tile.TileCraftingMonitor; import java.io.IOException; @@ -56,12 +56,12 @@ public class GuiCraftingMonitor extends GuiBase { scrollbar.setEnabled(getRows() > VISIBLE_ROWS); scrollbar.setMaxOffset(getRows() - VISIBLE_ROWS); - if (itemSelected >= getTasks().size()) { + if (itemSelected >= getElements().size()) { itemSelected = -1; } cancelButton.enabled = itemSelected != -1; - cancelAllButton.enabled = getTasks().size() > 0; + cancelAllButton.enabled = getElements().size() > 0; } @Override @@ -92,50 +92,15 @@ public class GuiCraftingMonitor extends GuiBase { itemSelectedY = -1; for (int i = 0; i < VISIBLE_ROWS; ++i) { - if (item < getTasks().size()) { - ClientCraftingTask task = getTasks().get(item); + if (item < getElements().size()) { + ICraftingMonitorElement element = getElements().get(item); if (item == itemSelected) { itemSelectedX = x; itemSelectedY = y; } - /*if (task.getDepth() > 0) { - x += 16F - ((float) (task.getChildren() - task.getDepth()) / (float) task.getChildren() * 16F); - }*/ - - drawItem(x + 2, y + 1, task.getOutput()); - - float scale = 0.5f; - - GlStateManager.pushMatrix(); - GlStateManager.scale(scale, scale, 1); - - drawString(calculateOffsetOnScale(x + 21, scale), calculateOffsetOnScale(y + 7, scale), task.getQuantity() + " " + task.getOutput().getDisplayName()); - - /*if (task.getProgress() != -1) { - drawString(calculateOffsetOnScale(ox + ITEM_WIDTH - 15, scale), calculateOffsetOnScale(y + 7, scale), task.getProgress() + "%"); - }*/ - - GlStateManager.popMatrix(); - - /*if (inBounds(x + 2, y + 1, 16, 16, mouseX, mouseY) && !task.getStatus().trim().equals("")) { - lines = task.getStatus().split("\n"); - - for (int j = 0; j < lines.length; ++j) { - String line = lines[j]; - - if (line.startsWith("T=")) { - line = t(line.substring(2)); - } else if (line.startsWith("I=")) { - line = TextFormatting.YELLOW + t(line.substring(2)); - } else if (line.startsWith("B=")) { - line = TextFormatting.BLUE + t(line.substring(2)); - } - - lines[j] = line; - } - }*/ + element.draw(this, x, y); x = ox; y += ITEM_HEIGHT; @@ -146,7 +111,7 @@ public class GuiCraftingMonitor extends GuiBase { } private int getRows() { - return getTasks().size(); + return getElements().size(); } @Override @@ -154,8 +119,12 @@ public class GuiCraftingMonitor extends GuiBase { super.actionPerformed(button); if (button == cancelButton && itemSelected != -1) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, itemSelected)); - } else if (button == cancelAllButton && getTasks().size() > 0) { + ICraftingMonitorElement element = getElements().get(itemSelected); + + if (element.getTaskId() != -1) { + RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, element.getTaskId())); + } + } else if (button == cancelAllButton && getElements().size() > 0) { RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, -1)); } } @@ -173,14 +142,14 @@ public class GuiCraftingMonitor extends GuiBase { int ix = 8; int iy = 20 + (i * ITEM_HEIGHT); - if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getTasks().size()) { + if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getElements().size()) { itemSelected = item + i; } } } } - private List getTasks() { - return TileCraftingMonitor.TASKS.getValue(); + private List getElements() { + return TileCraftingMonitor.ELEMENTS.getValue(); } } diff --git a/src/main/java/refinedstorage/gui/craftingmonitor/ICraftingMonitorElement.java b/src/main/java/refinedstorage/gui/craftingmonitor/ICraftingMonitorElement.java new file mode 100755 index 000000000..f3c89c201 --- /dev/null +++ b/src/main/java/refinedstorage/gui/craftingmonitor/ICraftingMonitorElement.java @@ -0,0 +1,20 @@ +package refinedstorage.gui.craftingmonitor; + +import io.netty.buffer.ByteBuf; +import refinedstorage.gui.GuiBase; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public interface ICraftingMonitorElement { + Map> REGISTRY = new HashMap<>(); + + void draw(GuiBase gui, int x, int y); + + int getTaskId(); + + int getType(); + + void write(ByteBuf buf); +} diff --git a/src/main/java/refinedstorage/tile/ClientCraftingTask.java b/src/main/java/refinedstorage/tile/ClientCraftingTask.java deleted file mode 100755 index 31e9b4334..000000000 --- a/src/main/java/refinedstorage/tile/ClientCraftingTask.java +++ /dev/null @@ -1,21 +0,0 @@ -package refinedstorage.tile; - -import net.minecraft.item.ItemStack; - -public class ClientCraftingTask { - private ItemStack output; - private int quantity; - - public ClientCraftingTask(ItemStack output, int quantity) { - this.output = output; - this.quantity = quantity; - } - - public ItemStack getOutput() { - return output; - } - - public int getQuantity() { - return quantity; - } -} diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 5d19e8f9d..0766fb175 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -322,7 +322,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public void updateCraftingMonitors() { for (INetworkNode node : nodeGraph.all()) { if (node instanceof TileCraftingMonitor) { - ((TileCraftingMonitor) node).dataManager.sendParameterToWatchers(TileCraftingMonitor.TASKS); + ((TileCraftingMonitor) node).dataManager.sendParameterToWatchers(TileCraftingMonitor.ELEMENTS); } } } diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index 94a76ce1c..e19ce1e75 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -1,6 +1,8 @@ package refinedstorage.tile; import refinedstorage.RefinedStorage; +import refinedstorage.gui.craftingmonitor.CraftingMonitorElementRoot; +import refinedstorage.gui.craftingmonitor.ICraftingMonitorElement; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.RefinedStorageSerializers; import refinedstorage.tile.data.TileDataParameter; @@ -10,11 +12,12 @@ import java.util.List; import java.util.stream.Collectors; public class TileCraftingMonitor extends TileNode { - public static final TileDataParameter> TASKS = new TileDataParameter<>(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, Collections.emptyList(), new ITileDataProducer, TileCraftingMonitor>() { + public static final TileDataParameter> ELEMENTS = new TileDataParameter<>(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, Collections.emptyList(), new ITileDataProducer, TileCraftingMonitor>() { @Override - public List getValue(TileCraftingMonitor tile) { + public List getValue(TileCraftingMonitor tile) { if (tile.connected) { - List tasks = tile.network.getCraftingTasks().stream().map(t -> new ClientCraftingTask( + List tasks = tile.network.getCraftingTasks().stream().map(t -> new CraftingMonitorElementRoot( + tile.network.getCraftingTasks().indexOf(t), t.getPattern().getOutputs().get(0), t.getQuantity() )).collect(Collectors.toList()); @@ -27,7 +30,7 @@ public class TileCraftingMonitor extends TileNode { }); public TileCraftingMonitor() { - dataManager.addParameter(TASKS); + dataManager.addParameter(ELEMENTS); } @Override diff --git a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java index 42dfdb693..f67be244c 100755 --- a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java +++ b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java @@ -6,7 +6,7 @@ import net.minecraft.network.datasync.DataSerializer; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; -import refinedstorage.tile.ClientCraftingTask; +import refinedstorage.gui.craftingmonitor.ICraftingMonitorElement; import refinedstorage.tile.ClientNode; import java.io.IOException; @@ -45,32 +45,37 @@ public final class RefinedStorageSerializers { } }; - public static final DataSerializer> CLIENT_CRAFTING_TASK_SERIALIZER = new DataSerializer>() { + public static final DataSerializer> CLIENT_CRAFTING_TASK_SERIALIZER = new DataSerializer>() { @Override - public void write(PacketBuffer buf, List tasks) { + public void write(PacketBuffer buf, List tasks) { buf.writeInt(tasks.size()); - for (ClientCraftingTask task : tasks) { - ByteBufUtils.writeItemStack(buf, task.getOutput()); - buf.writeInt(task.getQuantity()); + for (ICraftingMonitorElement task : tasks) { + buf.writeInt(task.getType()); + + task.write(buf); } } @Override - public List read(PacketBuffer buf) { - List tasks = new ArrayList<>(); + public List read(PacketBuffer buf) { + List tasks = new ArrayList<>(); int size = buf.readInt(); for (int i = 0; i < size; ++i) { - tasks.add(new ClientCraftingTask(ByteBufUtils.readItemStack(buf), buf.readInt())); + int type = buf.readInt(); + + if (ICraftingMonitorElement.REGISTRY.containsKey(type)) { + tasks.add(ICraftingMonitorElement.REGISTRY.get(type).apply(buf)); + } } return tasks; } @Override - public DataParameter> createKey(int id) { + public DataParameter> createKey(int id) { return null; } };