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 357562a5a..692bf4e43 100755 Binary files a/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png and b/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png differ