Skip to content

Port to Minecraft 26.3 - #121

Open
SirStig wants to merge 1 commit into
AppliedEnergistics:mainfrom
SirStig:port-26.3
Open

SirStig wants to merge 1 commit into
AppliedEnergistics:mainfrom
SirStig:port-26.3

Conversation

@SirStig

@SirStig SirStig commented Sep 20, 2026

Copy link
Copy Markdown

Ports GuideME to Minecraft 26.3 / NeoForge 26.3.0.7-beta. There's no 26.3 branch upstream yet, so
this is aimed at main (26.1.2) — happy to retarget if you'd rather it sat on its own branch.

271 compile errors, most of them mechanical. The parts that weren't:

Build

  • ModDevGradle 2.0.134 -> 2.0.147. The pinned version cannot recompile the patched 26.3 sources at
    all: it fails inside HolderSet before reaching GuideME's code, so 26.3 can't even start building
    without this.
  • compileOnly on lwjgl-tinyfd. It's no longer on Minecraft's compile classpath but is still
    present at runtime, so StructureCommands' file dialogs keep working.

Rendering

  • The blaze3d GPU layer moved to com.mojang.renderpearl.api.* (RenderPipeline, VertexFormat,
    GpuTexture, CommandEncoder, buffers). A lot of the error count was just this.
  • 26.3 uses a reversed-Z depth buffer. DepthStencilState.DEFAULT is now
    GREATER_THAN_OR_EQUAL and depth clears to 0.0. Explicit CompareOps are flipped accordingly.
    Worth knowing because it compiles fine either way and silently inverts depth tests.
  • MultiBufferSource is gone. The scene renderer submits through SubmitNodeCollector now. The
    structural bit: PictureInPictureRenderer#prepare calls renderToTexture (submit only) and then
    runs prepareFrame + renderAllFeatures itself, so projection/lightmap/fake-player state has to
    stay installed across the whole of prepare() instead of just around the draw.
  • VertexFormatElement is a record keyed by semantic name now, so Mesh/SceneExporter look
    elements up via DefaultVertexFormat.UV0_SEMANTIC_NAME and read offset() off the element.

Input and screens

  • GLFW is gone (SDL3): Blaze3D.getTime(), InputConstants.isKeyDown(int),
    Type.KEYSYM -> Type.KEYBOARD, Blaze3D.openUri. Note the key values are SDL scancodes now, so
    existing keybind configs for the guide hotkey will be reinterpreted.
  • Minecraft.screen / setScreen / getOverlay moved onto Minecraft.gui.
  • FuelValues and PotionBrewing were removed upstream, so the GuidebookLevel overrides and
    Platform.fuelValues() went with them.
  • Access transformer: Minecraft.mainRenderTarget now lives on GameRenderer, and
    LayerRenderState.quads is exposed in place of the removed prepareQuadList().

One regression you should decide on

Exporting 3D scenes to the static website is disabled. SceneExporter#renderToMeshes throws
with an explanation instead of silently producing empty scenes.

There's no interception point left: MultiBufferSource is gone, FeatureRenderDispatcher takes no
buffer source, vertex data goes into RenderBuffers#stagedVertexBuffer() which uploads and frees the
CPU staging slices during prepareFrame, and the Draw -> RenderType mapping only exists inside the
private RenderTypeFeatureRenderer.Group — so even reading the staging memory loses the material
info Mesh needs. MeshBuildingBufferSource has a javadoc listing the three approaches I could see
(capture submitCustomGeometry only; record the render pass and read buffers back via
CommandEncoder#readBuffer; or AT the dispatcher internals). I didn't pick one — that's your call.

The in-game guidebook is unaffected; this only touches the website export.

Testing

Built and running in a ~70 mod NeoForge 26.3.0.7-beta pack alongside AE2 (which I also ported
locally, since it depends on this).

Builds against 26.3 / NeoForge 26.3.0.7-beta. 271 compile errors, mostly
mechanical; the notes below cover the parts that are not.

Build:
- minecraft_version 26.1.2 -> 26.3, neoforge_version -> 26.3.0.7-beta
- ModDevGradle 2.0.134 -> 2.0.147. 2.0.134 cannot recompile the patched
  26.3 sources; it fails inside HolderSet before touching our code
- compileOnly lwjgl-tinyfd, which is no longer on Minecraft's compile
  classpath but is still present at runtime

Rendering:
- com.mojang.blaze3d GPU classes moved to com.mojang.renderpearl.api
  (RenderPipeline, VertexFormat, GpuTexture, CommandEncoder, buffers)
- 26.3 uses a reversed-Z depth buffer: depth clears to 0.0 and
  DepthStencilState.DEFAULT is GREATER_THAN_OR_EQUAL, so explicit
  CompareOps are flipped
- MultiBufferSource is gone. The guidebook scene renderer now submits
  through SubmitNodeCollector, and PictureInPictureRenderer#prepare runs
  the render pass itself, so scene state is installed across prepare()
  rather than around renderToTexture
- Sheets.cutoutBlockSheet/translucentBlockSheet -> *BlockItemSheet

Input, screens, misc:
- GLFW is gone (SDL3): Blaze3D.getTime, InputConstants.isKeyDown(int),
  Type.KEYSYM -> Type.KEYBOARD, Blaze3D.openUri
- Minecraft.screen/setScreen/getOverlay moved onto Minecraft.gui
- FuelValues and PotionBrewing were removed upstream
- accesstransformer: Minecraft.mainRenderTarget moved to GameRenderer;
  LayerRenderState.quads exposed in place of the removed prepareQuadList

Known regression: exporting 3D scenes to the static website is disabled.
See SceneExporter#renderToMeshes and MeshBuildingBufferSource for why and
for the three possible approaches. The in-game guidebook is unaffected.
@shartte

shartte commented Sep 20, 2026

Copy link
Copy Markdown
Member

Hi, since this isn't based on the 26.2 branch this isn't really all that useful to me, sorry.

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.

2 participants