Skip to content

feat(legacy): ornithe port - #1000

Merged
Wyvest merged 14 commits into
Polyfrost:legacyfrom
saadndm:legacy
Aug 24, 2026
Merged

feat(legacy): ornithe port#1000
Wyvest merged 14 commits into
Polyfrost:legacyfrom
saadndm:legacy

Conversation

@saadndm

@saadndm saadndm commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

General stuff

  • Requires legacy-lwjgl3, OSL, and java 25
  • Only supports legacy-lwjgl3 SDL3 backend (its the default, no reason to use GLFW)
  • Net diff excluding build setup and legacy compat (lines that can merge conflict in future): +1316 -103
  • I have only tested on linux wayland

Broken stuff

  • TinyFD isnt available at runtime, so stuff using it is broken rn. I'm gonna replace TinyFD with SDL in the v1 branch for >= 26.3 soon, 1.8.9 can use the same SDL implementation
  • legacy-lwjgl3 has IME issues, maybe we should fix
  • The MC Item selector using MinecraftItemCatalogService is kinda broken, I'll fix after perf(items): render item icons from a GPU atlas #982

Notes for each commit

feat(legacy): build setup

  • All publishing tasks (including compose-bundle) in this branch are restricted to Ornithe 1.8.9, normal builds and CI still cover all versions
  • log4j2.xml is needed to work around Fabric Loader JUnit failing in legacy MC

feat(legacy): legacy compat helpers

  • Originally I used stonecutter global replacements to map modern methods to legacy, but this was fragile and caused issues
  • Stonecutter global replacements are mostly limited to import replacements
  • Uses class tweakers so that modern methods work on legacy classes, avoiding inline stonecutter and reducing future merge conflicts
  • The interface injections are transitive, so the compatibility methods can be used in other mods using OneConfig
  • Access widens the private client task queue to implement modern's Minecraft.tell(), which always defers task execution

feat(legacy): port services

  • 1.8.9 framebuffers have no stencil attachment, so BackendRenderTarget.makeGL targets are created with stencilBits = 0

feat(legacy): port compose and rendering

  • Copied https://mcasset.cloud/1.13/assets/minecraft/font/default.json (first MC version to include it) to legacy_default.json so that SkiaFontRenderer can use it
  • Horizontal scrolling doesn't work unless we mixin into legacy-lwjgl3, but shouldn't matter
  • Skia renders directly into main render target
  • StoredGLState is taken from ohlunasa's suggested state wrapper with a few additions

feat(legacy): port mixins

  • F3 overlay is deferred in Mixin_DebugOverlayAboveUi and replayed after Skia rendering in Mixin_SkiaFrame

feat(legacy): port oneconfig

  • Everything works, profile deletion and other stuff that uses TinyFD is broken

feat(legacy): port commands

  • Uses brigadier and ClientCommandInternals.java taken and adapted from fabric-api
  • Client command suggestions are merged into vanilla tab completion
  • Mixin_LegacyChatCompletion applies above default mixin priority for compatibility with AxolotlClient

feat(legacy): port keybinds

  • Everything works except IME issues

feat(legacy): port hypixel mod api

feat(legacy): title panorama

  • Uses an access widener to access MC's private TitleScreen panorama
  • Renders and restores the same TitleScreen instance when opening and closing OneConfig, preventing panorama animation jumps
  • Copies MC TitleScreen's alpha test toggles and fillGradient()
  • Uses StoredGLState to restore GL state, otherwise the compose render afterwards gets corrupted

@Yedelo

Yedelo commented Aug 24, 2026

Copy link
Copy Markdown

this is a tuff 1,000th issue

@saadndm
saadndm force-pushed the legacy branch 3 times, most recently from ceb88ab to f12ca52 Compare August 24, 2026 14:21
@Wyvest
Wyvest merged commit af9bce9 into Polyfrost:legacy Aug 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants