From 1d1205412cfeedc466662dc04779a95e30ce213d Mon Sep 17 00:00:00 2001 From: NotMyWing Date: Fri, 28 Mar 2025 14:29:08 +1100 Subject: [PATCH] impl --- .../java/appeng/api/config/ActionItems.java | 3 +- .../implementations/GuiInterfaceTerminal.java | 32 ++++++++---- .../client/gui/widgets/GuiImgButton.java | 1 + .../ContainerInterfaceTerminal.java | 15 ++++++ .../core/localization/ButtonToolTips.java | 2 + .../core/sync/AppEngPacketHandlerBase.java | 2 + .../packets/PacketConfigureInterface.java | 52 +++++++++++++++++++ .../appliedenergistics2/lang/en_us.lang | 1 + 8 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 src/main/java/appeng/core/sync/packets/PacketConfigureInterface.java diff --git a/src/api/java/appeng/api/config/ActionItems.java b/src/api/java/appeng/api/config/ActionItems.java index 0b988205a..68a23dd07 100644 --- a/src/api/java/appeng/api/config/ActionItems.java +++ b/src/api/java/appeng/api/config/ActionItems.java @@ -44,5 +44,6 @@ public enum ActionItems TOGGLE_SHOW_FULL_INTERFACES_OFF, TOGGLE_SHOW_ONLY_INVALID_PATTERNS_ON, TOGGLE_SHOW_ONLY_INVALID_PATTERNS_OFF, - HIGHLIGHT_INTERFACE + HIGHLIGHT_INTERFACE, + CONFIGURE_INTERFACE } diff --git a/src/main/java/appeng/client/gui/implementations/GuiInterfaceTerminal.java b/src/main/java/appeng/client/gui/implementations/GuiInterfaceTerminal.java index c2f64fa3a..eab2a6687 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiInterfaceTerminal.java +++ b/src/main/java/appeng/client/gui/implementations/GuiInterfaceTerminal.java @@ -38,6 +38,8 @@ import appeng.core.AppEng; import appeng.core.localization.ButtonToolTips; import appeng.core.localization.GuiText; import appeng.core.localization.PlayerMessages; +import appeng.core.sync.network.NetworkHandler; +import appeng.core.sync.packets.PacketConfigureInterface; import appeng.helpers.DualityInterface; import appeng.helpers.PatternHelper; import appeng.helpers.WirelessTerminalGuiObject; @@ -285,10 +287,14 @@ public class GuiInterfaceTerminal extends AEBaseGui { for (int x = 0; x < rows && linesDraw < rows && currentScroll + x < this.lines.size(); x++) { final Object lineObj = this.lines.get(currentScroll + x); if (lineObj instanceof ClientDCInternalInv inv) { + GuiButton highlightBtn = new GuiImgButton(guiLeft + 4, guiTop + offset + 1, Settings.ACTIONS, ActionItems.HIGHLIGHT_INTERFACE); + guiButtonHashMap.put(highlightBtn, inv); + this.buttonList.add(highlightBtn); - GuiButton guiButton = new GuiImgButton(guiLeft + 4, guiTop + offset + 1, Settings.ACTIONS, ActionItems.HIGHLIGHT_INTERFACE); - guiButtonHashMap.put(guiButton, inv); - this.buttonList.add(guiButton); + + GuiButton configBtn = new GuiImgButton(guiLeft + 4, guiTop + offset + 1 - 16, Settings.ACTIONS, ActionItems.CONFIGURE_INTERFACE); + guiButtonHashMap.put(configBtn, inv); + this.buttonList.add(configBtn); final int extraLines = numUpgradesMap.get(inv); for (int row = 0; row < 1 + extraLines && linesDraw < rows; ++row) { @@ -323,11 +329,12 @@ public class GuiInterfaceTerminal extends AEBaseGui { @Override protected void actionPerformed(final GuiButton btn) throws IOException { - if (guiButtonHashMap.containsKey(btn)) { - BlockPos blockPos = blockPosHashMap.get(guiButtonHashMap.get(this.selectedButton)); + if (guiButtonHashMap.containsKey(btn) && btn instanceof GuiImgButton guiImgButton) { + ClientDCInternalInv inv = guiButtonHashMap.get(this.selectedButton); + BlockPos blockPos = blockPosHashMap.get(inv); BlockPos blockPos2 = mc.player.getPosition(); int playerDim = mc.world.provider.getDimension(); - int interfaceDim = dimHashMap.get(guiButtonHashMap.get(this.selectedButton)); + int interfaceDim = dimHashMap.get(inv); if (playerDim != interfaceDim) { try { mc.player.sendStatusMessage(PlayerMessages.InterfaceInOtherDimParam.get(interfaceDim, DimensionManager.getWorld(interfaceDim).provider.getDimensionType().getName()), false); @@ -335,10 +342,14 @@ public class GuiInterfaceTerminal extends AEBaseGui { mc.player.sendStatusMessage(PlayerMessages.InterfaceInOtherDim.get(), false); } } else { - hilightBlock(blockPos, System.currentTimeMillis() + 500 * BlockPosUtils.getDistance(blockPos, blockPos2), playerDim); - mc.player.sendStatusMessage(PlayerMessages.InterfaceHighlighted.get(blockPos.getX(), blockPos.getY(), blockPos.getZ()), false); + if (guiImgButton.getCurrentValue() == ActionItems.HIGHLIGHT_INTERFACE) { + hilightBlock(blockPos, System.currentTimeMillis() + 500 * BlockPosUtils.getDistance(blockPos, blockPos2), playerDim); + mc.player.sendStatusMessage(PlayerMessages.InterfaceHighlighted.get(blockPos.getX(), blockPos.getY(), blockPos.getZ()), false); + mc.player.closeScreen(); + } else if (guiImgButton.getCurrentValue() == ActionItems.CONFIGURE_INTERFACE) { + NetworkHandler.instance.sendToServer(new PacketConfigureInterface(inv.getId())); + } } - mc.player.closeScreen(); } else if (btn == guiButtonHideFull) { onlyShowWithSpace = !onlyShowWithSpace; this.refreshList(); @@ -465,8 +476,7 @@ public class GuiInterfaceTerminal extends AEBaseGui { this.refreshList = true; } - for (final Object oKey : in.getKeySet()) { - final String key = (String) oKey; + for (final String key : in.getKeySet()) { if (key.startsWith("=")) { try { final long id = Long.parseLong(key.substring(1), Character.MAX_RADIX); diff --git a/src/main/java/appeng/client/gui/widgets/GuiImgButton.java b/src/main/java/appeng/client/gui/widgets/GuiImgButton.java index 0c0b13365..736f1a17c 100644 --- a/src/main/java/appeng/client/gui/widgets/GuiImgButton.java +++ b/src/main/java/appeng/client/gui/widgets/GuiImgButton.java @@ -121,6 +121,7 @@ public class GuiImgButton extends GuiButton implements ITooltip { this.registerApp(8 + 5 * 16, Settings.ACTIONS, ActionItems.TOGGLE_SHOW_FULL_INTERFACES_OFF, ButtonToolTips.ToggleShowFullInterfaces, ButtonToolTips.ToggleShowFullInterfacesOffDesc); this.registerApp(9 + 5 * 16, Settings.ACTIONS, ActionItems.MOLECULAR_ASSEMBLERS_OFF, ButtonToolTips.ToggleMolecularAssemblers, ButtonToolTips.ToggleMolecularAssemblersOffDesc); this.registerApp(6 + 6 * 16, Settings.ACTIONS, ActionItems.HIGHLIGHT_INTERFACE, ButtonToolTips.HighlightInterface, ""); + this.registerApp(66, Settings.ACTIONS, ActionItems.CONFIGURE_INTERFACE, ButtonToolTips.ConfigureInterface, ""); this.registerApp(4 + 5 * 16, Settings.ACTIONS, ActionItems.TOGGLE_SHOW_ONLY_INVALID_PATTERNS_OFF, ButtonToolTips.ToggleShowOnlyInvalidInterface, ButtonToolTips.ToggleShowOnlyInvalidInterfaceOffDesc); this.registerApp(5 + 5 * 16, Settings.ACTIONS, ActionItems.TOGGLE_SHOW_ONLY_INVALID_PATTERNS_ON, ButtonToolTips.ToggleShowOnlyInvalidInterface, ButtonToolTips.ToggleShowOnlyInvalidInterfaceOnDesc); diff --git a/src/main/java/appeng/container/implementations/ContainerInterfaceTerminal.java b/src/main/java/appeng/container/implementations/ContainerInterfaceTerminal.java index 68be538a6..8e4eceb85 100644 --- a/src/main/java/appeng/container/implementations/ContainerInterfaceTerminal.java +++ b/src/main/java/appeng/container/implementations/ContainerInterfaceTerminal.java @@ -192,6 +192,15 @@ public class ContainerInterfaceTerminal extends AEBaseContainer { } } + public DualityInterface getById(long id) { + var tracker = this.byId.get(id); + if (tracker == null) { + return null; + } + + return tracker.getDualityInterface(); + } + @Override public void doAction(final EntityPlayerMP player, final InventoryAction action, final int slot, final long id) { final InvTracker inv = this.byId.get(id); @@ -428,8 +437,10 @@ public class ContainerInterfaceTerminal extends AEBaseContainer { private final BlockPos pos; private final int dim; private final int numUpgrades; + private final DualityInterface dualityInterface; public InvTracker(final DualityInterface dual, final IItemHandler patterns, final String unlocalizedName) { + this.dualityInterface = dual; this.server = patterns; this.client = new AppEngInternalInventory(null, this.server.getSlots()); this.unlocalizedName = unlocalizedName; @@ -438,6 +449,10 @@ public class ContainerInterfaceTerminal extends AEBaseContainer { this.dim = dual.getLocation().getWorld().provider.getDimension(); this.numUpgrades = dual.getInstalledUpgrades(Upgrades.PATTERN_EXPANSION); } + + public DualityInterface getDualityInterface() { + return dualityInterface; + } } private static class PatternSlotFilter implements IAEItemFilter { diff --git a/src/main/java/appeng/core/localization/ButtonToolTips.java b/src/main/java/appeng/core/localization/ButtonToolTips.java index 2cb561838..918e7b3de 100644 --- a/src/main/java/appeng/core/localization/ButtonToolTips.java +++ b/src/main/java/appeng/core/localization/ButtonToolTips.java @@ -168,6 +168,8 @@ public enum ButtonToolTips { ToggleShowOnlyInvalidInterfaceOffDesc, HighlightInterface, HighlightInterfaceDesc, + ConfigureInterface, + ConfigureInterfaceDesc, SearchFieldInputs, SearchFieldOutputs, SearchFieldNames, diff --git a/src/main/java/appeng/core/sync/AppEngPacketHandlerBase.java b/src/main/java/appeng/core/sync/AppEngPacketHandlerBase.java index 39b7ba7cc..60ccbef2b 100644 --- a/src/main/java/appeng/core/sync/AppEngPacketHandlerBase.java +++ b/src/main/java/appeng/core/sync/AppEngPacketHandlerBase.java @@ -92,6 +92,8 @@ public class AppEngPacketHandlerBase { PACKET_CABLE_BUS_LANDING_PARTICLE(PacketCableBusLandingParticle.class), + PACKET_CONFIGURE_INTERFACE(PacketConfigureInterface.class), + ; diff --git a/src/main/java/appeng/core/sync/packets/PacketConfigureInterface.java b/src/main/java/appeng/core/sync/packets/PacketConfigureInterface.java new file mode 100644 index 000000000..01f4a5e4d --- /dev/null +++ b/src/main/java/appeng/core/sync/packets/PacketConfigureInterface.java @@ -0,0 +1,52 @@ +package appeng.core.sync.packets; + +import appeng.api.util.AEPartLocation; +import appeng.container.implementations.ContainerInterfaceTerminal; +import appeng.core.sync.AppEngPacket; +import appeng.core.sync.network.INetworkInfo; +import appeng.helpers.IPriorityHost; +import appeng.parts.AEBasePart; +import appeng.util.Platform; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.minecraft.entity.player.EntityPlayer; + +public class PacketConfigureInterface extends AppEngPacket { + + private final long id; + + // automatic. + public PacketConfigureInterface(final ByteBuf stream) { + this.id = stream.readLong(); + } + + // api + public PacketConfigureInterface(final long id) { + this.id = id; + + final ByteBuf data = Unpooled.buffer(); + + data.writeInt(this.getPacketID()); + data.writeLong(id); + + this.configureWrite(data); + } + + @Override + public void serverPacketData(INetworkInfo manager, AppEngPacket packet, EntityPlayer player) { + var container = player.openContainer; + if (container instanceof ContainerInterfaceTerminal terminal) { + var byId = terminal.getById(this.id); + if (byId != null) { + var host = byId.getHost(); + + // I don't know why this is in IPriorityHost. + if (host instanceof IPriorityHost guiHandler) { + var bridge = guiHandler.getGuiBridge(); + var side = host instanceof AEBasePart part ? part.getSide() : AEPartLocation.INTERNAL; + Platform.openGUI(player, host.getTile(), side, bridge); + } + } + } + } +} diff --git a/src/main/resources/assets/appliedenergistics2/lang/en_us.lang b/src/main/resources/assets/appliedenergistics2/lang/en_us.lang index c31f9c0b6..e19dbdc90 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/en_us.lang +++ b/src/main/resources/assets/appliedenergistics2/lang/en_us.lang @@ -402,6 +402,7 @@ gui.tooltips.appliedenergistics2.ToggleShowOnlyInvalidInterface=Toggles showing gui.tooltips.appliedenergistics2.ToggleShowOnlyInvalidInterfaceOffDesc=Showing all interfaces gui.tooltips.appliedenergistics2.ToggleShowOnlyInvalidInterfaceOnDesc=Showing only interfaces with invalid patterns gui.tooltips.appliedenergistics2.HighlightInterface=Highlight Interface +gui.tooltips.appliedenergistics2.ConfigureInterface=Configure Interface gui.tooltips.appliedenergistics2.SearchFieldInputs=Recipe Inputs gui.tooltips.appliedenergistics2.SearchFieldOutputs=Recipe Outputs gui.tooltips.appliedenergistics2.SearchFieldNames=Interface Names