From bcb32591fd1183a4edd212a32891a9c790e70a71 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 19:39:41 +0000 Subject: [PATCH] Open new scripts after creating them in the terminal Creating a script with the + button left the previous script open, so the new one had to be selected manually. It is now opened and focused. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018MRyTdV3fSV5Q5NPGep4q9 --- .../ContainerScreenTerminalScripting.java | 21 +++++++++++++++++-- .../container/ContainerTerminalScripting.java | 14 ++++++++----- ...TerminalScriptingModifiedScriptPacket.java | 8 +++++-- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/cyclops/integratedscripting/client/gui/container/ContainerScreenTerminalScripting.java b/src/main/java/org/cyclops/integratedscripting/client/gui/container/ContainerScreenTerminalScripting.java index 9083a1517..a31bb3c08 100644 --- a/src/main/java/org/cyclops/integratedscripting/client/gui/container/ContainerScreenTerminalScripting.java +++ b/src/main/java/org/cyclops/integratedscripting/client/gui/container/ContainerScreenTerminalScripting.java @@ -82,6 +82,8 @@ public class ContainerScreenTerminalScripting extends ContainerScreenExtended toolbarEditButtons = Lists.newArrayList(); private ButtonIcon buttonUndo; private ButtonIcon buttonRedo; @@ -161,7 +163,7 @@ public int getTotalRows() { addRenderableWidget(textArea); buttonCreateFile = new ButtonText(this.leftPos + 19, this.topPos + 222, 56, 10, Component.translatable("gui.integratedscripting.create_file"), Component.literal("+"), - (button) -> getMenu().createNewFile(), true); + (button) -> this.createNewFile(), true); addRenderableWidget(buttonCreateFile); this.addToolbar(this.leftPos + SCRIPT_X + SCRIPT_WIDTH, this.topPos + 5); @@ -582,7 +584,22 @@ private void onActiveScriptSelected() { this.textArea.setHistory(path == null ? new TextHistory() : scriptHistories.computeIfAbsent(Pair.of(getMenu().getActiveDisk(), path), k -> new TextHistory())); } - private void onRemoteScriptChanged(int disk, Path path) { + private void createNewFile() { + this.createdScriptDisk = getMenu().getActiveDisk(); + getMenu().createNewFile(); + } + + private void onRemoteScriptChanged(int disk, Path path, boolean created) { + // Open a newly created script + if (created && disk == this.createdScriptDisk && disk == getMenu().getActiveDisk()) { + this.createdScriptDisk = -1; + this.saveCursorPos(); + getMenu().setActiveScriptPath(path); + this.onActiveScriptSelected(); + this.setFocused(this.textArea); + return; + } + // Show changes from outside this editor, such as external file edits, instead of overwriting them on the next edit if (disk == getMenu().getActiveDisk() && path.equals(getMenu().getActiveScriptPath())) { String script = getMenu().getActiveScript(); diff --git a/src/main/java/org/cyclops/integratedscripting/inventory/container/ContainerTerminalScripting.java b/src/main/java/org/cyclops/integratedscripting/inventory/container/ContainerTerminalScripting.java index e41ac3169..7347d5c14 100644 --- a/src/main/java/org/cyclops/integratedscripting/inventory/container/ContainerTerminalScripting.java +++ b/src/main/java/org/cyclops/integratedscripting/inventory/container/ContainerTerminalScripting.java @@ -50,7 +50,6 @@ import javax.annotation.Nullable; import java.nio.file.Path; import java.util.*; -import java.util.function.BiConsumer; import java.util.regex.Pattern; /** @@ -76,7 +75,7 @@ public class ContainerTerminalScripting extends InventoryContainer implements ID private final int activeScriptPathId; private final int selectionId; @Nullable - private BiConsumer remoteScriptChangeListener; + private IRemoteScriptChangeListener remoteScriptChangeListener; public ContainerTerminalScripting(int id, Inventory playerInventory, RegistryFriendlyByteBuf packetBuffer) { this(id, playerInventory, PartHelpers.readPartTarget(packetBuffer), Optional.empty(), @@ -248,7 +247,7 @@ public void setLastScript(int disk, Path path, @Nullable String script) { } } - public void setRemoteScriptChangeListener(@Nullable BiConsumer remoteScriptChangeListener) { + public void setRemoteScriptChangeListener(@Nullable IRemoteScriptChangeListener remoteScriptChangeListener) { this.remoteScriptChangeListener = remoteScriptChangeListener; } @@ -256,13 +255,18 @@ public void setRemoteScriptChangeListener(@Nullable BiConsumer re * Called on the client when a script was changed by the server. * @param disk The disk id. * @param path The script path. + * @param created If the script did not exist before. */ - public void onRemoteScriptChange(int disk, Path path) { + public void onRemoteScriptChange(int disk, Path path, boolean created) { if (this.remoteScriptChangeListener != null) { - this.remoteScriptChangeListener.accept(disk, path); + this.remoteScriptChangeListener.onChange(disk, path, created); } } + public static interface IRemoteScriptChangeListener { + public void onChange(int disk, Path path, boolean created); + } + public Int2ObjectMap> getLastScripts() { return lastScripts; } diff --git a/src/main/java/org/cyclops/integratedscripting/network/packet/TerminalScriptingModifiedScriptPacket.java b/src/main/java/org/cyclops/integratedscripting/network/packet/TerminalScriptingModifiedScriptPacket.java index e35b6ff48..ca36ca522 100644 --- a/src/main/java/org/cyclops/integratedscripting/network/packet/TerminalScriptingModifiedScriptPacket.java +++ b/src/main/java/org/cyclops/integratedscripting/network/packet/TerminalScriptingModifiedScriptPacket.java @@ -15,6 +15,7 @@ import java.nio.file.Path; import java.util.Arrays; +import java.util.Collections; import java.util.List; /** @@ -58,8 +59,11 @@ public boolean isAsync() { @OnlyIn(Dist.CLIENT) public void actionClient(Level world, Player player) { if(player.containerMenu instanceof ContainerTerminalScripting container) { - container.setLastScript(disk, Path.of(path), getScript()); - container.onRemoteScriptChange(disk, Path.of(path)); + Path scriptPath = Path.of(path); + // Determine this before storing the script + boolean created = !container.getLastScripts().getOrDefault(disk, Collections.emptyMap()).containsKey(scriptPath); + container.setLastScript(disk, scriptPath, getScript()); + container.onRemoteScriptChange(disk, scriptPath, created); } }