From 33053dbddbe0be553b50d62f63ad1f19e0010226 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 6 Oct 2016 14:12:36 +0200 Subject: [PATCH] Make crafting monitor semi-functional again --- .../api/network/grid/IItemGridHandler.java | 5 +-- .../apiimpl/network/grid/ItemGridHandler.java | 26 +++--------- .../gui/GuiCraftingMonitor.java | 39 +++++++----------- .../network/MessageCraftingMonitorCancel.java | 7 +--- .../tile/ClientCraftingTask.java | 21 ++++++++++ .../refinedstorage/tile/TileController.java | 28 ++++++------- .../tile/TileCraftingMonitor.java | 27 ++++++++++++ .../tile/data/RefinedStorageSerializers.java | 31 ++++++++++++++ .../textures/gui/crafting_monitor.png | Bin 2024 -> 1877 bytes 9 files changed, 118 insertions(+), 66 deletions(-) create mode 100755 src/main/java/refinedstorage/tile/ClientCraftingTask.java diff --git a/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java index e1b466460..d44c2e71f 100755 --- a/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java +++ b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java @@ -59,8 +59,7 @@ public interface IItemGridHandler { /** * Called when a player wants to cancel a crafting task. * - * @param id the task id, or -1 to cancel all tasks - * @param depth the depth to cancel. 0 to cancel the entire task, or n to cancel the nth child of the task + * @param id the task id, or -1 to cancel all tasks */ - void onCraftingCancelRequested(int id, int depth); + void onCraftingCancelRequested(int id); } diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index ea3668193..de14175a0 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -6,6 +6,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; +import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IItemGridHandler; @@ -162,30 +163,13 @@ public class ItemGridHandler implements IItemGridHandler { } @Override - public void onCraftingCancelRequested(int id, int depth) { - /*if (id >= 0 && id < network.getCraftingTasks().size()) { - ICraftingTask task = network.getCraftingTasks().get(id); - - if (depth == 0) { - network.cancelCraftingTask(task); - } else { - for (int i = 0; i < depth - 1; ++i) { - if (task == null) { - break; - } - - task = task.getChild(); - } - - if (task != null) { - task.getChild().onCancelled(network); - task.setChild(null); - } - } + public void onCraftingCancelRequested(int id) { + if (id >= 0 && id < network.getCraftingTasks().size()) { + network.cancelCraftingTask(network.getCraftingTasks().get(id)); } else if (id == -1) { for (ICraftingTask task : network.getCraftingTasks()) { network.cancelCraftingTask(task); } - }*/ + } } } diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index f75ceff39..017a148c2 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -1,15 +1,16 @@ package refinedstorage.gui; 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.sidebutton.SideButtonRedstoneMode; import refinedstorage.network.MessageCraftingMonitorCancel; +import refinedstorage.tile.ClientCraftingTask; import refinedstorage.tile.TileCraftingMonitor; import java.io.IOException; -import java.util.Collections; import java.util.List; public class GuiCraftingMonitor extends GuiBase { @@ -46,8 +47,8 @@ public class GuiCraftingMonitor extends GuiBase { int cancelButtonWidth = 14 + fontRendererObj.getStringWidth(cancel); int cancelAllButtonWidth = 14 + fontRendererObj.getStringWidth(cancelAll); - cancelButton = addButton(x + 7, y + 114, cancelButtonWidth, 20, cancel, false); - cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, y + 114, cancelAllButtonWidth, 20, cancelAll, false); + cancelButton = addButton(x + 7, y + 113, cancelButtonWidth, 20, cancel, false); + cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, y + 113, cancelAllButtonWidth, 20, cancelAll, false); } @Override @@ -83,8 +84,6 @@ public class GuiCraftingMonitor extends GuiBase { RenderHelper.enableGUIStandardItemLighting(); - String[] lines = null; - int ox = 8; int x = ox; int y = 20; @@ -92,7 +91,7 @@ public class GuiCraftingMonitor extends GuiBase { itemSelectedX = -1; itemSelectedY = -1; - /*for (int i = 0; i < VISIBLE_ROWS; ++i) { + for (int i = 0; i < VISIBLE_ROWS; ++i) { if (item < getTasks().size()) { ClientCraftingTask task = getTasks().get(item); @@ -101,9 +100,9 @@ public class GuiCraftingMonitor extends GuiBase { itemSelectedY = y; } - if (task.getDepth() > 0) { + /*if (task.getDepth() > 0) { x += 16F - ((float) (task.getChildren() - task.getDepth()) / (float) task.getChildren() * 16F); - } + }*/ drawItem(x + 2, y + 1, task.getOutput()); @@ -112,15 +111,15 @@ public class GuiCraftingMonitor extends GuiBase { GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - drawString(calculateOffsetOnScale(x + 21, scale), calculateOffsetOnScale(y + 7, scale), task.getOutput().getDisplayName()); + drawString(calculateOffsetOnScale(x + 21, scale), calculateOffsetOnScale(y + 7, scale), task.getQuantity() + " " + task.getOutput().getDisplayName()); - if (task.getProgress() != -1) { + /*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("")) { + /*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) { @@ -136,7 +135,7 @@ public class GuiCraftingMonitor extends GuiBase { lines[j] = line; } - } + }*/ x = ox; y += ITEM_HEIGHT; @@ -144,10 +143,6 @@ public class GuiCraftingMonitor extends GuiBase { item++; } - - if (lines != null) { - drawTooltip(mouseX, mouseY, Arrays.asList(lines)); - }*/ } private int getRows() { @@ -159,11 +154,9 @@ public class GuiCraftingMonitor extends GuiBase { super.actionPerformed(button); if (button == cancelButton && itemSelected != -1) { - /*ClientCraftingTask task = getTasks().get(itemSelected); - - RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, task.getId(), task.getDepth()));*/ + RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, itemSelected)); } else if (button == cancelAllButton && getTasks().size() > 0) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, -1, 0)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, -1)); } } @@ -187,7 +180,7 @@ public class GuiCraftingMonitor extends GuiBase { } } - private List getTasks() { - return Collections.emptyList(); + private List getTasks() { + return TileCraftingMonitor.TASKS.getValue(); } } diff --git a/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java b/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java index 37ff31b9d..0812ecd46 100755 --- a/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java +++ b/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java @@ -17,12 +17,11 @@ public class MessageCraftingMonitorCancel extends MessageHandlerPlayerToServer isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) - .forEach(this::sendItemStorageToClient); + .filter(player -> isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) + .forEach(this::sendItemStorageToClient); } @Override @@ -467,15 +467,15 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendItemStorageDeltaToClient(ItemStack stack, int delta) { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(player -> isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) - .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridItemDelta(this, stack, delta), player)); + .filter(player -> isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) + .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridItemDelta(this, stack, delta), player)); } @Override public void sendFluidStorageToClient() { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) - .forEach(this::sendFluidStorageToClient); + .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) + .forEach(this::sendFluidStorageToClient); } @Override @@ -486,8 +486,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendFluidStorageDeltaToClient(FluidStack stack, int delta) { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) - .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridFluidDelta(stack, delta), player)); + .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) + .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridFluidDelta(stack, delta), player)); } private boolean isWatchingGrid(EntityPlayer player, EnumGridType... types) { @@ -796,7 +796,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public boolean hasCapability(Capability capability, EnumFacing facing) { return capability == CapabilityEnergy.ENERGY - || (energyTesla != null && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) - || super.hasCapability(capability, facing); + || (energyTesla != null && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) + || super.hasCapability(capability, facing); } } diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index ccea01511..94a76ce1c 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -1,8 +1,35 @@ package refinedstorage.tile; import refinedstorage.RefinedStorage; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.RefinedStorageSerializers; +import refinedstorage.tile.data.TileDataParameter; + +import java.util.Collections; +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>() { + @Override + public List getValue(TileCraftingMonitor tile) { + if (tile.connected) { + List tasks = tile.network.getCraftingTasks().stream().map(t -> new ClientCraftingTask( + t.getPattern().getOutputs().get(0), + t.getQuantity() + )).collect(Collectors.toList()); + + return tasks; + } else { + return Collections.emptyList(); + } + } + }); + + public TileCraftingMonitor() { + dataManager.addParameter(TASKS); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.config.craftingMonitorUsage; diff --git a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java index 048a09c8e..42dfdb693 100755 --- a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java +++ b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java @@ -6,6 +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.tile.ClientNode; import java.io.IOException; @@ -44,6 +45,36 @@ public final class RefinedStorageSerializers { } }; + public static final DataSerializer> CLIENT_CRAFTING_TASK_SERIALIZER = new DataSerializer>() { + @Override + public void write(PacketBuffer buf, List tasks) { + buf.writeInt(tasks.size()); + + for (ClientCraftingTask task : tasks) { + ByteBufUtils.writeItemStack(buf, task.getOutput()); + buf.writeInt(task.getQuantity()); + } + } + + @Override + 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())); + } + + return tasks; + } + + @Override + public DataParameter> createKey(int id) { + return null; + } + }; + public static final DataSerializer FLUID_STACK_SERIALIZER = new DataSerializer() { @Override public void write(PacketBuffer buf, FluidStack value) { diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png b/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png index 357562a5a6eff9a2ee9ec245f198c65e37ec7947..692bf4e431b30a107abc0afb3e4ddd2353942808 100755 GIT binary patch delta 729 zcmaFCf0b`T2n*L11_r(@j2q3WbSB5KSk*Hv_jGX#sfc@f_hQ#=1A(?c^RwG3|BL%c zKfk|Y!fXMzR~>WuS)28id_1^8A*yV5-1gF4*S5!QKW)V;a3ieh|LO3(2lzg0^;#ah z^8l~HZhZj;1_q<@NFd2D;jTCbkeaz$2S~nQu%A_0C-rKZk z%I~&N6%NnzxPi>?n~Q`mFC}b9Jzi6OM?U|3f77eWp97K^uOU3caN->|3()aUx2Jq( z1$qT)F~g?cOh88|6i;Ubx#(tXBaoc1^E8t{!=H)&7Z=ZS|6iGE;_%P(-eT|Vq73yQ zMF`Cx_Jg1M&z43@@=U0nzPPd6x>9cM79%Nz_*;t`e8-R!u#~ zu(RA!s$%=(=NG-T7c+iZYAf}_aQ}9o%fR5oom6O8F);M(KDjbVl4pY(1JHh;L@o1^ zcV9Ce{LP!^uD`a2?L_`;cjo$qdvWMJyB4aq#_T{Q$APljM~yNxbC{W{G853+fFP? P1bNBR)z4*}Q$iB}9sL5C delta 877 zcmcc0_kw>z2n*L%1_r*ZjLC&FPE3wtv8rdb@^oF!rL7Vu6a_lJNDU2vwf%EelqiCWtu+o-2ZP@aS!wlyw=&f zhey1E{lr~$4h9B>nbi?Ml3~Jbe*qw6^nC-6{2>0|czx`9vG?IxukH5>J@|h7+R@kc z^`-S|*8Ka-2voeYofV{M?_|aod<+Z@+fFlIsI`M?H))tJZ_RX~tg@fIqvkb-!tJMw zFYM%jl2Ds2SW7m%19DS#+c4aH&dk7|P|Tmrd}8*DYl1+7s%;#eM7uNG)Z=&f{u8L` z#GS)TK&s*1Nrw6ocA#QpyuqpQ5V@9R>Rv=3mcAW>Ra(E^u2Gqsy#gA=) zHIPO&?iRx*wPmF&6W)H3;}`e|wiL(A=Ln==ZoO061mwX2Y3FYipctd|`bT4)Nhr533s^>?oWILgr zyZXc7KU+n?Y7kxqaUJf?o)f5jl%ewdrtlwm>eu)BuMJ^-GI?9*kHmksxS$$fE&_2E zyz@P`Vro)@CB$uE%qMnV-+So$?w#*yvzAIJ?9biCRll&lHWwW0K=m-cf%FD^H!Hv5 zWq3e_k>SG~27OhA>ED0*U9M<&8voALc{*3acmIPrYn}VoJeXF@s&N17-Kc4Gwkt{- zHZxCX-ac*Vnecm72W~Q+I2e68=$UrD?1MK9PadpI)%-klJ6}N=L(zw8o2L9c70qs8 z%@Af;ksW!e=IL7IIkF8hd$#JN?)!9&@f@E6-@T}5M)8%e8PeGm*z