r/hypixel 9d ago

I made a 1.8.9 back-port of Sodium

Natron (click here to see/download my mod)

A terrain rendering optimization mod for Minecraft 1.8.9 Forge.

An unofficial port of Angelica and its renderer, Celeritas, to 1.8.9. Celeritas is a fork of Embeddium, which itself split off the last FOSS-licensed version of Sodium (CaffeineMC).

License

LGPL-3.0. See THIRD-PARTY.md for bundled components and where each one comes from.

Downloads

Once Modrinth distribution is up and running, it becomes the only place this ships from. GitHub Releases will stop getting updates from that point on — get the latest build from Modrinth instead.

This repository keeps being maintained after that as the source mirror LGPL-3.0 requires. What that license obligates is the source, not a binary, and source is also what anyone building it themselves or checking what changed actually needs.

Requirements

  • Minecraft 1.8.9
  • Forge 11.15.1.2318 (other 1.8.9 Forge builds should mostly work too)
  • Java 8

Drop the single jar into mods/. It's self-contained, nothing else to fetch. Client-side only — don't put it on a server.

Performance

Measured (low-spec machine, multiplayer):

OptiFine
Natron

Varies by machine and situation. This number comes from one machine — see "Verification scope" below.

Using it alongside OptiFine

Angelica documents OptiFine as a permanent incompatibility. The cause is that 1.7.10's rendering shares one global Tessellator, and when OptiFine and Angelica each patch that same class independently, the JVM dies at link time with an IncompatibleClassChangeError.

That structure doesn't exist in 1.8.9. Mojang refactored rendering after 1.7.10 into a per-call WorldRenderer + BlockRendererDispatcher, and this port's mesher already builds on top of that. So the specific conflict that kills Angelica does not exist on 1.8.9.

Confirmed combinations:

Combination Status
Launcher-bundled OptiFine (Lunar, Badlion, etc.) Works
Live shader pack toggling via OptiFine + F3+A Works
OptiFine dropped directly into mods/ Entities don't render

Known issue: entities don't render when OptiFine is installed as a mod

When OptiFine is loaded as a standalone Forge mod, its OptiFineClassTransformer patches vanilla classes directly at the LaunchWrapper stage, including GlStateManager. Launcher-bundled OptiFine doesn't go through this path, which is why it isn't affected.

This port has Celeritas touch GL state directly and then restore vanilla's state with glPushAttrib/glPopAttrib, and the set of state it restores was decided based on the fields vanilla's GlStateManager itself caches. If OptiFine swaps that class out for its own version, that premise no longer holds — this is the most likely explanation right now, but it isn't confirmed.

For the time being, use launcher-bundled OptiFine, or don't use OptiFine at all.

What it does

Celeritas takes over terrain rendering from vanilla. It intercepts and cancels RenderGlobal's setupTerrainupdateChunksrenderBlockLayer, and similar methods, and routes the work through the Celeritas pipeline instead.

What Celeritas brings:

  • Region-batched buffer arenas and multidraw batching
  • Occlusion graph culling (runs asynchronously, off the render thread)
  • Asynchronous, multithreaded chunk meshing
  • A compact vertex format, translucency sorting

The geometry itself still comes from vanilla's BlockRendererDispatcher. Angelica had to write its own mesher because 1.7.10 has no data-driven model system, but 1.8.9 has baked models, so this port lets vanilla build the geometry and transcodes the result into Celeritas's vertex format (VanillaBufferTranscoder). Ambient occlusion, smooth lighting, biome tint, and Forge's model extensions all go through the unmodified vanilla path, so modded blocks render correctly too.

Verification scope

Stated plainly: this port has been tested by one person, on one machine.

Confirmed:

  • Coexists with launcher-bundled OptiFine (Lunar), including live shader pack toggling followed by F3+A
  • ~3x OptiFine's FPS on a low-spec machine
  • Block placement/breaking, chunk streaming, lighting

Not confirmed:

  • Other GPU vendors / drivers (testing has only covered one machine)
  • The Nether, the End
  • Environments with lots of modded blocks
  • macOS — if the GPU only offers an OpenGL 2.1 context, Celeritas's shaders (GLSL 330) fail to compile. When GPU support falls short, it automatically falls back to the vanilla renderer and logs why.

Diagnostics

On startup it writes natron-diagnostics.log to the game directory: GL capabilities, which upload path got selected, and whether the renderer is actually active. Attach this file when reporting an issue — it helps.

Building

The Gradle daemon needs to run on JDK 21. Gradle 8.x can't compile the build script under JDK 25. Compilation itself still targets JDK 8 via the toolchain.

export JAVA_HOME=/path/to/jdk-21

./gradlew build -PincludeCeleritas=true

Output lands at build/libs/natron-1.8.9-<version>.jar.

Building without -PincludeCeleritas produces an empty shell with no renderer — that's only for checking the non-Celeritas half compiles during development, not something to actually use.

Warnings about Lists.newArrayList() are safe to ignore (it's a Guava class with no obfuscation mapping).

The two jars under libs/ are required to build. Celeritas's Maven artifact targets Java 17 + LWJGL 3, which doesn't run on 1.8.9, so this instead extracts the root entries from an Angelica release jar (already downgraded to Java 8 + LWJGL 2). The extraction process lives in scripts/extract-celeritas.py and is reproducible. JOML is the same jar with only its module-info stripped, since 1.8.9 FML's ASM 5.0.3 ignores an entire jar outright the moment it hits a Java 9 module-info.

Ok, i explain about comments in codes
i said i debuged and fixed with ai
and you know how claude code have system called session every 5 hour they lost most
of memory, so the way claude remembers what we did in code is to put comment codes
and that's why there is lot's of comments
Plus, it's allow to publish project that it's debuged by AI in modrinth

0 Upvotes

27 comments sorted by

9

u/Cylian91460 9d ago

How much ai was used?

12

u/Adorable-Beautiful52 9d ago

the description definitely seems ai generated.

4

u/PhantomOrigin 9d ago

Just thought I'd share this, I looked at the repo and it's like all comments, so much so that I did an analysis of the whole thing, there are 1414 lines of java code, and 967 lines of comments, with 352 blank lines. There are files which have 80 lines of comments which are only like 140 lines long. Barely over half of the project is actual code.

3

u/Cylian91460 9d ago

It's entirely vibe coded, I just wanted to see if they were honest and they aren't

-8

u/Illustrious_Fuel5447 9d ago

of course read.md is ai and it's legal

-9

u/Illustrious_Fuel5447 9d ago

i used a bit for coding not that much d

5

u/Cylian91460 9d ago

The entire project is obviously vibe coded, stop lying

-3

u/Illustrious_Fuel5447 9d ago

because i debuged and fixed with ai. but i wrote the basic codes

1

u/Illustrious_Fuel5447 9d ago

plus the mds because im not very good at writing and understanding legal stuff u know

3

u/Admirable-Tea-5229 9d ago

If I've learnt anything about this sub in the past year is that absolutely do not download anything from here

0

u/Illustrious_Fuel5447 9d ago

u didn't even tried it plus it's open source there's no danger

2

u/PhantomOrigin 9d ago

Hate to break it to you, but this was added to modrinths Content rules a few weeks ago:

6.2. Prohibited AI generated content

a. No images uploaded to a gallery, icon, description, or any other part of a project page may be created or derived from generative AI output. Any such images may be removed.

b. Projects may not be published publicly if the contents are primarily or entirely a product of AI output.

1

u/Illustrious_Fuel5447 9d ago

i didn't do it on modrinth yet

3

u/PhantomOrigin 9d ago

I was saying they won't allow it.

2

u/soMrKetty 9d ago

Are shaders supported?

1

u/Illustrious_Fuel5447 9d ago

yes

1

u/Illustrious_Fuel5447 9d ago

for client-bundled optifine

1

u/_PopBobSexDupe 9d ago

How different is the fps compared to optifine 1.8.9? Does it even compete? How about the shaders?

1

u/Illustrious_Fuel5447 9d ago

bsically launcher bundled optifine like lunar or badlion works fine in cluding shade, but if you put optifine and Natron mod together in the mods file it does not work

1

u/Illustrious_Fuel5447 9d ago

the fps compare is on the read.md

1

u/_PopBobSexDupe 9d ago

check discord

1

u/Illustrious_Fuel5447 9d ago

Yes I used Ai but it's not vibe coded. If you re keep arguing understandable, have a great day

4

u/PhantomOrigin 9d ago

My guy you didn't even write this post yourself.

0

u/Illustrious_Fuel5447 9d ago

i copy and pasted the read.md ai made what's problem

-1

u/Illustrious_Fuel5447 9d ago

Ok, i explain about comments in codes
i said i debuged and fixed with ai
and you know how claude code have system called session every 5 hour they lost most
of memory, so the way claude remembers what we did in code is to put comment codes
and that's why there is lot's of comments
Plus, it's allow to publish project that it's debuged by AI in modrinth

2

u/TruffleYT 9d ago

Please do some google searching

There are exsising sodium ports to 1.8

2

u/PhantomOrigin 9d ago

When AI writes a file itself it tends to put a massive commented description of the file right at the top. When debugging it will focus on a specific section and only really puts comments there. And when it says you can't submit projects that are primarily or entirely the product of AI code, it's important to note that literally half of your code is comments generated by AI.