Skip to content

✨ Update to Minecraft 26.3 - #638

Draft
cacaview wants to merge 2 commits into
MrCrayfish:multiloader/26.2from
cacaview:multiloader/26.3
Draft

cacaview wants to merge 2 commits into
MrCrayfish:multiloader/26.2from
cacaview:multiloader/26.3

Conversation

@cacaview

@cacaview cacaview commented Sep 18, 2026 •

Copy link
Copy Markdown

Draft — ported to Minecraft 26.3 (both loaders). NeoForge ✅ runs; Fabric ⚠️ compiles but is
blocked by an upstream 26.3 toolchain crash. REI still pending.

Ports Controllable to Minecraft 26.3 for both NeoForge 26.3.0.3-beta and Fabric
0.161.0+26.3
, following the existing per-version branch convention. Based on multiloader/26.2.

26.3 moved the client input layer from GLFW to SDL and renamed/removed several client APIs,
so this is more than a version bump.

Still needed before merge

  • REI: re-enable once a 26.3 RoughlyEnoughItems build exists (see note below).
  • Fabric runtime: compiles cleanly, but :fabric:runClient is currently blocked by an
    upstream Fabric/Mixin 26.3 crash (see Test results below) — re-test once a working
    Fabric 26.3 toolchain ships.

Changes

Input (GLFW → SDL / InputConstants)

  • Removed the GLFW backend (client/input/glfw/*, InputLibrary.GLF) — 26.3 no longer ships
    org.lwjgl.glfw.
  • Key/mouse constants now come from com.mojang.blaze3d.platform.InputConstants.
  • MouseHandler.onMove mixin updated to the new 4-double signature (the 26.3 load-time crash).
  • Fabric: FabricClientHelper drops the GLFW backend — key/mouse action constants are now plain
    ints (0=release, 1=press, 2=repeat) and KeyEvent.scancode() is gone, so it passes 0.

API renames

  • Window.toggleFullScreen()/isFullscreen() → setFullscreen(boolean) + options.fullscreen().
  • LivingEntity.drop(boolean) → drop(ItemStack, boolean, Prediction.PREDICTED).
  • AbstractContainerScreen: getGuiLeft/getGuiTop/getXSize/getYSize/getSlotUnderMouse →
    getLeftPos/getTopPos/getImageWidth/getImageHeight/getHoveredSlot.
  • JEI IngredientGrid/IngredientGridWithNavigation/IngredientListRenderer/
    IIngredientListOverlayContents moved to mezz.jei.gui.overlay.ingredients.*.
  • neoforge.mods.toml: logoFile/logoBlur → iconFile.

Versions

  • java_version 25 → 26; minecraft_version/neo_form_version 26.2 → 26.3.
  • NeoForge: neoforge_version 26.2.0.3-beta → 26.3.0.3-beta; neoforge_version_range → [26.3,).
  • Fabric: fabric_version 0.152.2+26.2 → 0.161.0+26.3; fabric_loader_version 0.19.3 → 0.19.5;
    fabric_minecraft_version_range ~26.2- → ~26.3-.
  • JEI → 31.0.0.7 / 26.3.
  • Build plugins: moddev 2.0.141 → 2.0.147, foojay-resolver-convention 0.10.0 → 1.0.0.

Fabric — no other code changes needed

  • The Fabric mixins and access-widener field accesses (screen.topPos, leftPos, imageWidth,
    imageHeight, hoveredSlot) are unchanged: the 26.3 getter renames did not affect the widened
    field names.

⚠️ Breaking changes / notes

  1. REI support is disabled — no 26.3 build of RoughlyEnoughItems exists yet, so the REI
    dependency, PointHelperMixin, and its mixins.json entry were removed. JEI still works.
    To re-enable once 26.3 REI ships: uncomment the REI lines in common/build.gradle and
    neoforge/build.gradle, restore PointHelperMixin.java + its mixins.json entry, and bump
    rei_version to the 26.3 build.
  2. GLFW input option removed — InputLibrary now only has SDL2; any existing config with
    inputLibrary=GLFW must be set to SDL2.

Test results (26.3)

  • NeoForge — ✅ launches & runs. :neoforge:jar builds cleanly; :neoforge:runClient boots on
    26.3: SDL window created (LWJGL 3.4.3, OpenGL backend), the mod initializes —
    Successfully updated 180 gamepad mappings — ResourceManager reloads mod/controllable,
    sound engine starts, main menu reached, no crash / no InvalidInjectionException.
    (In-game controller play also confirmed separately.)
  • Fabric — ⚠️ compiles, runtime blocked upstream. :fabric:jar builds cleanly;
    :fabric:runClient crashes at launch on 26.3 in Fabric API's fabric-content-registries-v0
    (@ModifyExpressionValue on LivingEntity.aiStep → Mixin ClassInfo.findInterface NPE while
    computing common supertypes). Reproduces on both 0.160.7+26.3 and 0.161.0+26.3, so it's an
    upstream Fabric/Mixin 26.3 toolchain issue, not a Controllable code defect (Controllable's
    Fabric mixins don't touch LivingEntity or use @ModifyExpressionValue).

Intended to be merged as a new multiloader/26.3 branch ("Create a branch on merge") — not into multiloader/26.2.

26.3 moved the client input layer from GLFW to SDL and renamed several
client APIs, so this is more than a version bump. The NeoForge target is
fully ported and verified via :neoforge:runClient (SDL window opens, mod
initializes, no InvalidInjectionException, no crash).

Input
- Remove the GLFW backend (client/input/glfw/*, InputLibrary.GLF) — 26.3
  no longer ships org.lwjgl.glfw.
- Use com.mojang.blaze3d.platform.InputConstants for key/mouse constants.
- MouseHandler.onMove mixin updated to the new 4-double signature.

API renames
- Window.toggleFullScreen()/isFullscreen() -> setFullscreen() + options.fullscreen().
- LivingEntity.drop(boolean) -> drop(ItemStack, boolean, Prediction.PREDICTED).
- AbstractContainerScreen: getGuiLeft/getGuiTop/getXSize/getYSize/getSlotUnderMouse
  -> getLeftPos/getTopPos/getImageWidth/getImageHeight/getHoveredSlot.
- JEI ingredient classes moved to mezz.jei.gui.overlay.ingredients.*.
- neoforge.mods.toml: logoFile/logoBlur -> iconFile.

Versions
- java 25 -> 26, minecraft/neo_form 26.2 -> 26.3, neoforge 26.2.0.3-beta ->
  26.3.0.3-beta, neoforge_version_range -> [26.3,), JEI 31.0.0.7 / 26.3.
- moddev 2.0.141 -> 2.0.147, foojay-resolver 0.10.0 -> 1.0.0 (Java 26).

Known limitations (follow-ups, see PR description)
- REI support disabled: no 26.3 REI artifact yet (REI deps + PointHelperMixin
  removed). JEI still works.
- Fabric target not ported (fabric versions still 26.2); only NeoForge
  updated and tested.
Companion to the NeoForge 26.3 port. FabricClientHelper drops the GLFW backend (26.3 removed org.lwjgl.glfw): key/mouse action constants are now plain ints (0=release, 1=press, 2=repeat) and KeyEvent.scancode() is gone, so pass 0. gradle.properties bumps fabric_version 0.152.2+26.2 -> 0.161.0+26.3, fabric_loader_version 0.19.3 -> 0.19.5, fabric_minecraft_version_range ~26.2- -> ~26.3-. The Fabric mixins and access-widener field accesses compiled unchanged (the 26.3 getter renames did not affect the widened fields). Verified with :fabric:jar (clean build).
@cacaview cacaview changed the title ✨ Update to Minecraft 26.3 (NeoForge) ✨ Update to Minecraft 26.3 Sep 19, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant