From 9ca192722b638d8935cae5d8cd2a12a2930a9266 Mon Sep 17 00:00:00 2001 From: MCTBL <30978504+MCTBL@users.noreply.github.com> Date: Tue, 27 Aug 2024 13:48:32 +0800 Subject: [PATCH] add ignore crafting mode button for wireless terminal (#226) --- .../client/gui/GuiFluidCraftAmount.java | 32 ++++++++++++++++-- .../github/network/CPacketCraftRequest.java | 33 +++++++++++++++---- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidCraftAmount.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidCraftAmount.java index cc94d53f..5fcc4830 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidCraftAmount.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidCraftAmount.java @@ -3,6 +3,8 @@ package com.glodblock.github.client.gui; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; +import org.lwjgl.input.Mouse; + import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.base.FCGuiAmount; import com.glodblock.github.common.item.ItemWirelessUltraTerminal; @@ -17,12 +19,18 @@ import com.glodblock.github.inventory.item.WirelessPatternTerminalInventory; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.network.CPacketCraftRequest; +import appeng.api.config.CraftingMode; +import appeng.api.config.Settings; import appeng.api.storage.ITerminalHost; +import appeng.client.gui.widgets.GuiImgButton; import appeng.container.implementations.ContainerCraftAmount; import appeng.core.localization.GuiText; +import appeng.util.Platform; public class GuiFluidCraftAmount extends FCGuiAmount { + private GuiImgButton craftingMode; + public GuiFluidCraftAmount(final InventoryPlayer inventoryPlayer, final ITerminalHost te) { super(new ContainerCraftAmount(inventoryPlayer, te)); } @@ -30,6 +38,14 @@ public class GuiFluidCraftAmount extends FCGuiAmount { @Override public void initGui() { super.initGui(); + + this.buttonList.add( + this.craftingMode = new GuiImgButton( + this.guiLeft + 10, + this.guiTop + 53, + Settings.CRAFTING_MODE, + CraftingMode.STANDARD)); + this.amountBox.setText("1"); this.amountBox.setSelectionPos(0); } @@ -55,8 +71,20 @@ public class GuiFluidCraftAmount extends FCGuiAmount { protected void actionPerformed(final GuiButton btn) { super.actionPerformed(btn); try { - if (btn == this.submit && this.submit.enabled) { - FluidCraft.proxy.netHandler.sendToServer(new CPacketCraftRequest(getAmount(), isShiftKeyDown())); + if (btn == this.craftingMode) { + GuiImgButton iBtn = ((GuiImgButton) btn); + + final Enum cv = iBtn.getCurrentValue(); + final boolean backwards = Mouse.isButtonDown(1); + final Enum next = Platform.rotateEnum(cv, backwards, iBtn.getSetting().getPossibleValues()); + + iBtn.set(next); + } else if (btn == this.submit && this.submit.enabled) { + FluidCraft.proxy.netHandler.sendToServer( + new CPacketCraftRequest( + getAmount(), + isShiftKeyDown(), + ((CraftingMode) this.craftingMode.getCurrentValue()))); } } catch (final NumberFormatException e) { this.amountBox.setText("1"); diff --git a/src/main/java/com/glodblock/github/network/CPacketCraftRequest.java b/src/main/java/com/glodblock/github/network/CPacketCraftRequest.java index 00ae958d..3805757d 100644 --- a/src/main/java/com/glodblock/github/network/CPacketCraftRequest.java +++ b/src/main/java/com/glodblock/github/network/CPacketCraftRequest.java @@ -14,6 +14,7 @@ import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.item.IWirelessTerminal; import com.glodblock.github.util.BlockPos; +import appeng.api.config.CraftingMode; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; @@ -23,6 +24,7 @@ import appeng.container.ContainerOpenContext; import appeng.container.implementations.ContainerCraftAmount; import appeng.container.implementations.ContainerCraftConfirm; import appeng.core.AELog; +import appeng.me.cache.CraftingGridCache; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; @@ -33,23 +35,32 @@ public class CPacketCraftRequest implements IMessage { private long amount; private boolean heldShift; + private CraftingMode craftingMode; + public CPacketCraftRequest() {} public CPacketCraftRequest(final int craftAmt, final boolean shift) { + this(craftAmt, shift, CraftingMode.STANDARD); + } + + public CPacketCraftRequest(final int craftAmt, final boolean shift, final CraftingMode craftingMode) { amount = craftAmt; heldShift = shift; + this.craftingMode = craftingMode; } @Override public void toBytes(ByteBuf buf) { buf.writeLong(amount); buf.writeBoolean(heldShift); + buf.writeBoolean(this.craftingMode == CraftingMode.STANDARD); } @Override public void fromBytes(ByteBuf buf) { amount = buf.readLong(); heldShift = buf.readBoolean(); + craftingMode = buf.readBoolean() ? CraftingMode.STANDARD : CraftingMode.IGNORE_MISSING; } public static class Handler implements IMessageHandler { @@ -77,12 +88,22 @@ public class CPacketCraftRequest implements IMessage { Future futureJob = null; try { final ICraftingGrid cg = g.getCache(ICraftingGrid.class); - futureJob = cg.beginCraftingJob( - cca.getWorld(), - cca.getGrid(), - cca.getActionSrc(), - cca.getItemToCraft(), - null); + if(cg instanceof CraftingGridCache cgc) { + futureJob = cgc.beginCraftingJob( + cca.getWorld(), + cca.getGrid(), + cca.getActionSrc(), + cca.getItemToCraft(), + message.craftingMode, + null); + }else { + futureJob = cg.beginCraftingJob( + cca.getWorld(), + cca.getGrid(), + cca.getActionSrc(), + cca.getItemToCraft(), + null); + } final ContainerOpenContext context = cca.getOpenContext(); if (context != null) {