diff --git a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/GuiCraftingSettings.java index 627f78a15..86acbcf1f 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingSettings.java @@ -1,20 +1,29 @@ package refinedstorage.gui; +import com.google.common.primitives.Ints; +import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; +import net.minecraftforge.fml.client.FMLClientHandler; import refinedstorage.container.ContainerDummy; import java.io.IOException; public class GuiCraftingSettings extends GuiBase { private GuiTextField amountField; + private GuiGrid gridGui; + private int id; + private GuiButton startButton; - public GuiCraftingSettings() { + public GuiCraftingSettings(GuiGrid gridGui, int id) { super(new ContainerDummy(), 143, 61); + + this.gridGui = gridGui; + this.id = id; } @Override public void init(int x, int y) { - addButton(x + 48, y + 35, 50, 20, t("misc.refinedstorage:start")); + startButton = addButton(x + 48, y + 35, 50, 20, t("misc.refinedstorage:start")); amountField = new GuiTextField(0, fontRendererObj, x + 39 + 1, y + 21 + 1, 69 - 6, fontRendererObj.FONT_HEIGHT); amountField.setEnableBackgroundDrawing(false); @@ -51,4 +60,19 @@ public class GuiCraftingSettings extends GuiBase { super.keyTyped(character, keyCode); } } + + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + + if (button.id == startButton.id) { + Integer quantity = Ints.tryParse(amountField.getText()); + + if (quantity != null && quantity > 0) { + gridGui.getGrid().onCraftingRequested(id, quantity); + + FMLClientHandler.instance().showGuiScreen(gridGui); + } + } + } } diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index dc08ee09a..1a1548c15 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -69,6 +69,10 @@ public class GuiGrid extends GuiBase { searchField.setFocused(true); } + public IGrid getGrid() { + return grid; + } + @Override public void update(int x, int y) { items.clear(); @@ -268,7 +272,7 @@ public class GuiGrid extends GuiBase { grid.onItemPush(-1, clickedButton == 1); } else if (isHoveringOverItemInSlot() && container.getPlayer().inventory.getItemStack() == null) { if (items.get(hoveringSlot).getQuantity() == 0) { - FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings()); + FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, hoveringItemId)); } else { int flags = 0; diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java new file mode 100755 index 000000000..67fc26e8a --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java @@ -0,0 +1,54 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import refinedstorage.tile.grid.TileGrid; + +public class MessageGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { + private int gridX; + private int gridY; + private int gridZ; + private int id; + private int quantity; + + public MessageGridCraftingStart() { + } + + public MessageGridCraftingStart(int gridX, int gridY, int gridZ, int id, int quantity) { + this.gridX = gridX; + this.gridY = gridY; + this.gridZ = gridZ; + this.id = id; + this.quantity = quantity; + } + + @Override + public void fromBytes(ByteBuf buf) { + gridX = buf.readInt(); + gridY = buf.readInt(); + gridZ = buf.readInt(); + id = buf.readInt(); + quantity = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(gridX); + buf.writeInt(gridY); + buf.writeInt(gridZ); + buf.writeInt(id); + buf.writeInt(quantity); + } + + @Override + public void handle(MessageGridCraftingStart message, EntityPlayerMP player) { + TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.gridX, message.gridY, message.gridZ)); + + if (tile instanceof TileGrid && ((TileGrid) tile).isConnected() && message.quantity > 0 && message.id >= 0) { + ((TileGrid) tile).getController().onCraftingRequested(message.id, message.quantity); + } + } +} diff --git a/src/main/java/refinedstorage/network/MessageGridStoragePull.java b/src/main/java/refinedstorage/network/MessageGridStoragePull.java index 629ab070f..dfd949b6a 100755 --- a/src/main/java/refinedstorage/network/MessageGridStoragePull.java +++ b/src/main/java/refinedstorage/network/MessageGridStoragePull.java @@ -51,7 +51,7 @@ public class MessageGridStoragePull extends MessageHandlerPlayerToServer= 0 && message.id < controller.getItemGroups().size()) { controller.handleStoragePull(message.id, message.flags, player); } } diff --git a/src/main/java/refinedstorage/network/MessageWirelessGridCraftingStart.java b/src/main/java/refinedstorage/network/MessageWirelessGridCraftingStart.java new file mode 100755 index 000000000..9dd9cfdef --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageWirelessGridCraftingStart.java @@ -0,0 +1,54 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import refinedstorage.tile.TileController; + +public class MessageWirelessGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { + private int controllerX; + private int controllerY; + private int controllerZ; + private int id; + private int quantity; + + public MessageWirelessGridCraftingStart() { + } + + public MessageWirelessGridCraftingStart(int controllerX, int controllerY, int controllerZ, int id, int quantity) { + this.controllerX = controllerX; + this.controllerY = controllerY; + this.controllerZ = controllerZ; + this.id = id; + this.quantity = quantity; + } + + @Override + public void fromBytes(ByteBuf buf) { + controllerX = buf.readInt(); + controllerY = buf.readInt(); + controllerZ = buf.readInt(); + id = buf.readInt(); + quantity = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(controllerX); + buf.writeInt(controllerY); + buf.writeInt(controllerZ); + buf.writeInt(id); + buf.writeInt(quantity); + } + + @Override + public void handle(MessageWirelessGridCraftingStart message, EntityPlayerMP player) { + TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); + + if (tile instanceof TileController && ((TileController) tile).isActive() && message.quantity > 0 && message.id >= 0) { + ((TileController) tile).onCraftingRequested(message.id, message.quantity); + } + } +} diff --git a/src/main/java/refinedstorage/network/MessageWirelessGridStoragePull.java b/src/main/java/refinedstorage/network/MessageWirelessGridStoragePull.java index 5892062cc..e351cef4c 100755 --- a/src/main/java/refinedstorage/network/MessageWirelessGridStoragePull.java +++ b/src/main/java/refinedstorage/network/MessageWirelessGridStoragePull.java @@ -50,7 +50,7 @@ public class MessageWirelessGridStoragePull extends MessageHandlerPlayerToServer if (tile instanceof TileController && ((TileController) tile).isActive()) { TileController controller = (TileController) tile; - if (message.id < controller.getItemGroups().size()) { + if (message.id >= 0 && message.id < controller.getItemGroups().size()) { controller.handleStoragePull(message.id, message.flags, player); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 630a2223c..df76fca4f 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -50,6 +50,8 @@ public class CommonProxy { RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePush.class, MessageWirelessGridStoragePush.class, 17, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePull.class, MessageWirelessGridStoragePull.class, 18, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingShift.class, MessageGridCraftingShift.class, 19, Side.SERVER); + RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, 20, Side.SERVER); + RefinedStorage.NETWORK.registerMessage(MessageWirelessGridCraftingStart.class, MessageWirelessGridCraftingStart.class, 21, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler()); @@ -86,13 +88,13 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.CRAFTING_MONITOR); registerItem(RefinedStorageItems.STORAGE_DISK); + registerItem(RefinedStorageItems.PATTERN); registerItem(RefinedStorageItems.WIRELESS_GRID); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.CORE); registerItem(RefinedStorageItems.SILICON); registerItem(RefinedStorageItems.PROCESSOR); registerItem(RefinedStorageItems.STORAGE_PART); - registerItem(RefinedStorageItems.PATTERN); // Processors SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_BASIC)); diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 07f64fb10..a06bea1b8 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -606,4 +606,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor group.toBytes(buf, getItemGroups().indexOf(group)); } } + + public void onCraftingRequested(int id, int quantity) { + System.out.println("Requested crafting for item " + id + " with quantity of " + quantity); + } } diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 91d96a45d..0646f6e50 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -27,6 +27,8 @@ public interface IGrid { void onSearchBoxModeChanged(int searchBoxMode); + void onCraftingRequested(int id, int quantity); + IRedstoneModeConfig getRedstoneModeSetting(); boolean isConnected(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index f676b3cd0..9155a0db1 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -16,6 +16,7 @@ import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; import refinedstorage.inventory.InventorySimple; import refinedstorage.item.ItemPattern; +import refinedstorage.network.MessageGridCraftingStart; import refinedstorage.network.MessageGridSettingsUpdate; import refinedstorage.network.MessageGridStoragePull; import refinedstorage.network.MessageGridStoragePush; @@ -251,6 +252,11 @@ public class TileGrid extends TileMachine implements IGrid { RefinedStorage.NETWORK.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, sortingType, searchBoxMode)); } + @Override + public void onCraftingRequested(int id, int quantity) { + RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingStart(getPos().getX(), getPos().getY(), getPos().getZ(), id, quantity)); + } + @Override public IRedstoneModeConfig getRedstoneModeSetting() { return this; diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index f52b845d8..69e1e65ae 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -8,6 +8,7 @@ import net.minecraft.util.math.BlockPos; import refinedstorage.RefinedStorage; import refinedstorage.block.EnumGridType; import refinedstorage.item.ItemWirelessGrid; +import refinedstorage.network.MessageWirelessGridCraftingStart; import refinedstorage.network.MessageWirelessGridSettingsUpdate; import refinedstorage.network.MessageWirelessGridStoragePull; import refinedstorage.network.MessageWirelessGridStoragePush; @@ -101,6 +102,11 @@ public class WirelessGrid implements IGrid { this.searchBoxMode = searchBoxMode; } + @Override + public void onCraftingRequested(int id, int quantity) { + RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridCraftingStart(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack), id, quantity)); + } + @Override public IRedstoneModeConfig getRedstoneModeSetting() { return null;