From 5daa6c91e28e4127e8a43ddd6f9b01aa050033c9 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 20 Sep 2026 14:45:12 +0000 Subject: [PATCH 1/3] Update to Minecraft 26.3 * Replace the removed org.lwjgl.glfw key constants with InputConstants * Block#codec and the block type codec registry are gone * Player#drop now takes a Prediction * FriendlyByteBuf#writeIntIdList/readIntIdList were removed, use var int arrays * Stop delegating the script text area to EditBox#charTyped, which swallowed typed characters into its own unused value * Replace the deprecated logoFile with iconFile Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01V35MFZ7JSgoLe79J4d1uxf --- .gitignore | 4 ++++ build.gradle | 2 +- gradle.properties | 10 +++++----- .../integratedscripting/block/BlockScriptingDrive.java | 9 --------- .../client/gui/component/input/WidgetTextArea.java | 6 ++---- .../container/ContainerScreenTerminalScripting.java | 6 +++--- .../container/ContainerTerminalScripting.java | 7 ++++--- src/main/resources/META-INF/neoforge.mods.toml | 2 +- 8 files changed, 20 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index bc07c6742..2b48ce3b8 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,7 @@ config # Ignore Minecraft runtime logs /logs + +# ClientDevBridge session state (golden images are intentionally kept) +.clientdevbridge/* +!.clientdevbridge/golden/ diff --git a/build.gradle b/build.gradle index 209552489..376169671 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'net.neoforged.moddev' version '2.0.141' + id 'net.neoforged.moddev' version '2.0.147' id 'net.darkhax.curseforgegradle' version '1.1.28' id 'com.github.kt3k.coveralls' version '2.12.0' id 'com.diffplug.spotless' version '7.2.1' diff --git a/gradle.properties b/gradle.properties index e55c2b801..289d10cc5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ group=org.cyclops.integratedscripting java_version=25 # Common -minecraft_version=26.2 +minecraft_version=26.3 mod_name=IntegratedScripting mod_author=rubensworks (aka kroeser) mod_id=integratedscripting @@ -19,7 +19,7 @@ curseforge_project_id=889785 modrinth_project_id=uDJkuFRe # NeoForge -neoforge_version=26.2.0.6-beta +neoforge_version=26.3.0.7-beta neoforge_loader_version_range=[4,) neoforge_update_json_url=https://raw.githubusercontent.com/CyclopsMC/Versions/master/neoforge_update/integrated-scripting.json @@ -32,6 +32,6 @@ org.gradle.configureondemand=true # Dependencies graal_version=25.2.4 -cyclopscore_version=1.30.0-1056 -integrateddynamics_version=1.33.4-1858 -commoncapabilities_version=2.11.8-360 +cyclopscore_version=1.30.0-1159 +integrateddynamics_version=1.33.4-2157 +commoncapabilities_version=2.11.8-398 diff --git a/src/main/java/org/cyclops/integratedscripting/block/BlockScriptingDrive.java b/src/main/java/org/cyclops/integratedscripting/block/BlockScriptingDrive.java index a4331b05b..14d5fb00a 100644 --- a/src/main/java/org/cyclops/integratedscripting/block/BlockScriptingDrive.java +++ b/src/main/java/org/cyclops/integratedscripting/block/BlockScriptingDrive.java @@ -1,10 +1,8 @@ package org.cyclops.integratedscripting.block; -import com.mojang.serialization.MapCodec; import net.minecraft.core.Direction; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; @@ -25,8 +23,6 @@ */ public class BlockScriptingDrive extends BlockWithEntityGuiCabled { - public static final MapCodec CODEC = simpleCodec(BlockScriptingDrive::new); - public static final EnumProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public BlockScriptingDrive(Properties properties) { @@ -36,11 +32,6 @@ public BlockScriptingDrive(Properties properties) { .setValue(FACING, Direction.NORTH)); } - @Override - protected MapCodec codec() { - return CODEC; - } - @Override @Nullable public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { diff --git a/src/main/java/org/cyclops/integratedscripting/client/gui/component/input/WidgetTextArea.java b/src/main/java/org/cyclops/integratedscripting/client/gui/component/input/WidgetTextArea.java index 0ec62dc01..4f8e3426c 100644 --- a/src/main/java/org/cyclops/integratedscripting/client/gui/component/input/WidgetTextArea.java +++ b/src/main/java/org/cyclops/integratedscripting/client/gui/component/input/WidgetTextArea.java @@ -311,10 +311,8 @@ public boolean keyPressed(KeyEvent event) { @Override public boolean charTyped(CharacterEvent event) { - if (super.charTyped(event)) { - this.setFocused(true); - return true; - } else if (event.isAllowedChatCharacter()) { + // Don't delegate to EditBox, as it would insert into its own unused value instead of ours + if (event.isAllowedChatCharacter()) { this.textFieldHelper.insertText(event.codepointAsString()); this.clearDisplayCache(); this.setFocused(true); 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 fdf8acc7f..79ee109bc 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 @@ -39,7 +39,7 @@ import org.cyclops.integratedscripting.inventory.container.ContainerTerminalScripting; import org.cyclops.integratedscripting.network.packet.TerminalScriptingDeleteScriptPacket; import org.cyclops.integratedscripting.network.packet.TerminalScriptingModifiedScriptPacket; -import org.lwjgl.glfw.GLFW; +import com.mojang.blaze3d.platform.InputConstants; import javax.annotation.Nullable; import java.nio.file.Path; @@ -506,13 +506,13 @@ public boolean mouseDragged(MouseButtonEvent mouse, double offsetX, double offse @Override public boolean keyPressed(KeyEvent event) { // Make active dialog consume all input - if (event.key() != GLFW.GLFW_KEY_ESCAPE && pendingScriptRemovalDialog != null) { + if (event.key() != InputConstants.KEY_ESCAPE && pendingScriptRemovalDialog != null) { return false; } if (textArea.isFocused()) { boolean ret = textArea.keyPressed(event); - if (event.key() != GLFW.GLFW_KEY_ESCAPE) { + if (event.key() != InputConstants.KEY_ESCAPE) { return ret; } } 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 59f3c1e53..1c90b22dc 100644 --- a/src/main/java/org/cyclops/integratedscripting/inventory/container/ContainerTerminalScripting.java +++ b/src/main/java/org/cyclops/integratedscripting/inventory/container/ContainerTerminalScripting.java @@ -11,6 +11,7 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Prediction; import net.minecraft.util.StringUtil; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -132,7 +133,7 @@ public void removed(Player player) { if (!player.level().isClientSide()) { ItemStack itemStack = getContainerInventory().getItem(0); if(!itemStack.isEmpty()) { - player.drop(itemStack, false); + player.drop(itemStack, false, Prediction.SERVER_ONLY); } } } @@ -392,11 +393,11 @@ public IntList getAvailableDisks() { } public void writeToPacketBuffer(FriendlyByteBuf packetBuffer) { - packetBuffer.writeIntIdList(getAvailableDisks()); + packetBuffer.writeVarIntArray(getAvailableDisks().toIntArray()); } public static InitData readFromPacketBuffer(FriendlyByteBuf packetBuffer) { - return new InitData(packetBuffer.readIntIdList()); + return new InitData(IntList.of(packetBuffer.readVarIntArray())); } } diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml index fee87af99..e879ea03e 100644 --- a/src/main/resources/META-INF/neoforge.mods.toml +++ b/src/main/resources/META-INF/neoforge.mods.toml @@ -3,7 +3,7 @@ loaderVersion="${neoforge_loader_version_range}" issueTrackerURL="${issue_tracker_url}" displayURL="${display_url}" license="${license}" -logoFile="logo.png" +iconFile="logo.png" authors="${mod_author}" [[mods]] modId="${mod_id}" From 27d2535cb7786f252cc4fc311cd2f4d12a1c0ef5 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 20 Sep 2026 15:31:52 +0000 Subject: [PATCH 2/3] Update the scripting drive loot table to the 26.3 format 26.3 replaced the "functions"/"conditions" lists with a single "modifier"/"condition" holder, and the inline "function"/"condition" type keys with "type". The old format parses without errors but is ignored, so copy_name and survives_explosion had become no-ops. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01V35MFZ7JSgoLe79J4d1uxf --- .../loot_table/blocks/scripting_drive.json | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/resources/data/integratedscripting/loot_table/blocks/scripting_drive.json b/src/main/resources/data/integratedscripting/loot_table/blocks/scripting_drive.json index 0fd1b76a7..ba4dc641d 100644 --- a/src/main/resources/data/integratedscripting/loot_table/blocks/scripting_drive.json +++ b/src/main/resources/data/integratedscripting/loot_table/blocks/scripting_drive.json @@ -6,20 +6,16 @@ "entries": [ { "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:copy_name", - "source": "block_entity" - } - ], + "modifier": { + "type": "minecraft:copy_name", + "source": "block_entity" + }, "name": "integratedscripting:scripting_drive" } ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] + "condition": { + "type": "minecraft:survives_explosion" + } } ] -} \ No newline at end of file +} From dc40419603a9959146755a13258f009dae265be9 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 20 Sep 2026 16:05:11 +0000 Subject: [PATCH 3/3] Point the production server test at Minecraft 26.3 The mod jar is built for 26.3, but the step still spun up a 26.2 server, so the mod could not load and the job failed. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01V35MFZ7JSgoLe79J4d1uxf --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 37ae89c30..17d5df851 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -105,7 +105,7 @@ jobs: CYCLOPSMC_ENABLEDGAMETESTSGLOBAL: true with: java: ${{ env.java_version }} - mc: 26.2 + mc: 26.3 modloader: neoforge test-file: './mc-server-test.json' - name: 'Deploy to CurseForge'