Links
Creators
Details
1.3.4
Compatibility
Required content
Changes
English
Intelium 1.3.4 — the OpenGL correctness update. Minecraft 26.2 ships OpenGL as its default renderer, with Vulkan as an experimental opt-in. Intelium's 26.x jar had been written and documented the other way round, and several of its decisions followed from that mistake. This release fixes the premise and everything that rested on it. Vulkan support is unchanged; OpenGL is now the first-class target it should always have been.
Profiles now do what their names say
- "Max FPS" no longer costs you FPS. Every profile used to force Sodium's one-frame chunk deferral, so Max FPS and Smooth produced identical upload behaviour and the label was simply wrong. Chunk uploads run on the render thread: forcing them buys faster chunk appearance and pays for it in frame time. Max FPS now uses Sodium's conservative deferral — the same setting Lunar Client's own FPS guidance recommends — while Smooth keeps one-frame deferral because streaming terrain ahead of the player is what that profile is for.
- Balanced is the only adaptive one. It uses one-frame deferral while there is headroom and falls back to conservative deferral under sustained, measured pressure, with the existing hysteresis. Max FPS and Smooth are fixed decisions, so the governor is no longer left holding state it will never apply.
- Turbo is still exactly what you asked for. Zero-frame deferral remains a user decision, never adaptively slowed, on any backend under any profile.
Chunk workers on low-core Intel parts
availableProcessors()was overstating the machine. An HD Graphics 520 lives in a two-core, four-thread mobile CPU. The old policy handed two of those four logical processors to chunk meshing on Balanced and three on Smooth, so mesh threads and the render thread contended for the same two physical cores — which is how a mod meant to remove hitches can cause them.- On Gen 9 / Gen 9.5 with at most four logical processors, on OpenGL, Auto now caps workers at 1 for Max FPS and 2 for Balanced and Smooth. It is a ceiling only: a machine that would already have been given fewer keeps its lower number, newer generations and other backends are untouched, and a manual
1–16value is still honoured exactly.
Real frame-time measurement
- A new
FrameTimeTracker, fed by a verified per-frame hook.Minecraft#getFps()is a trailing whole-second average that cannot represent a 40 ms hitch at all — it reports 58 instead of 60 — and Intelium's adaptive systems were being steered by it. Frame intervals are now measured atMinecraft.renderFrame, giving median, p95, p99, 1% low and 0.1% low. - It does not cost the frames it measures. The hot path is a subtract and two array stores into a preallocated ring buffer, with no allocation. Percentiles are computed at most once per new sample, and only when something actually asks — in normal play the sort never runs.
- Bad samples cannot steer anything. Unfocused frames, menu-capped frames and frames with no world loaded are dropped and restart the warm-up; loading a world restarts it too. VSync and FPS caps are flagged rather than discarded, because discarding them would starve the tracker on the majority of machines while throwing away the spikes that matter most.
Render-path cost and what must never be culled
- No more
Minecraft.getInstance()per entity, per frame. The camera entity's id is published once per tick, so the hook's "am I the camera?" test is an int compare. - No more
System.nanoTime()per block entity. The per-frame hook announces real frame boundaries, so the block-entity budget stops inferring them from call timing. The timing heuristic remains as a fallback if the hook ever cannot be applied. - A nearby chest can no longer vanish while a distant one draws. The per-frame ceiling was first-come-first-served, so whichever block entities the iteration reached last were refused — and which ones blinked changed as you turned. Anything within 12 blocks is now drawn unconditionally and the ceiling applies only to the distant population.
- PvP and UHC exemptions are explicit. Players, the camera entity, projectiles (arrows, tridents, thrown potions), named entities and holograms, glowing/outlined entities, and vehicles together with their riders are never culled at any distance.
Honest capability reporting
- Full method descriptors are verified, not just names. A hook whose target changed signature used to be applied anyway, match nothing, pass silently under
require = 0, and leave the settings screen offering a feature that did nothing. Every target is now checked by exact descriptor against the running game. - Eight capabilities fail independently. GPU detection, worker tuning, defer tuning, entity culling, the block-entity budget, the particle limiter, menu detection and the frame boundary each record their own state and reason. One missing hook disables one feature, never the mod, and never silently.
- One environment report, once. Minecraft, Fabric Loader, Fabric API, Sodium and Iris versions, detected backend, GPU and generation, and every capability's state — logged once after detection settles, never per tick.
One thing deliberately not added
A one-click preset for Sodium's own performance options — Block Face Culling, Fog Occlusion, Entity Culling, Animate Only Visible Textures, Hidden Fluid Culling, Block Transparency — was investigated and rejected on the evidence. Checked against the resolved Sodium 0.9.1 jar, every one of them already ships at its optimal value: the five performance flags default to true, hiddenFluidCulling defaults to true, quadSplittingMode defaults to SAFE, and chunkBuildDeferMode defaults to ALWAYS. Forcing them would be a no-op for almost everyone and, for the few who changed one deliberately, would silently overwrite their choice. A switch that does nothing is worse than no switch.
Compatibility
- The 26.x jar now declares
>=26.2 <26.3. It compiles directly against 26.2 class and method names, and 26.1 support was never runtime-tested. The old>=26.1 <26.3range was a claim the build could not back, so it is gone rather than left to fail confusingly on someone's machine. - A device reporting no backend name resolves to OpenGL, because on 26.x that is what it is running — Vulkan identifies itself. A name that is present but unrecognised still resolves to Unknown and keeps the conservative policy.
- Lunar Client: no Sodium, Fabric, Iris or Lunar files are bundled, no private or guessed client APIs are used, no invented mod ids are probed, and Lunar's own HUD caching, entity handling, FPS limits and present path are left alone. The same jar runs on stock Fabric 26.2. A jar-contents test now enforces that nothing gets bundled.
- Iris loaded or not, startup is unaffected: the mixin plugins still look classes up as classpath resources rather than loading them, so Iris's own Sodium mixins are never pre-empted.
No config migration is required. Existing profiles, captured-option restoration and compatibility gates are retained. FPS gains remain scene-, driver- and hardware-dependent; the measured claims here are about where work was removed, not a promised percentage.
Türkçe (Turkish)
Intelium 1.3.4 — OpenGL doğruluğu güncellemesi. Minecraft 26.2 varsayılan olarak OpenGL ile gelir; Vulkan deneysel bir seçenektir. Intelium'un 26.x jar'ı bunun tersini varsayacak şekilde yazılmış ve belgelenmişti ve bazı kararları bu hatadan geliyordu. Bu sürüm önce varsayımı, sonra ona dayanan her şeyi düzeltiyor. Vulkan desteği değişmedi; OpenGL artık baştan beri olması gereken birinci sınıf hedef.
Profiller artık adının söylediği şeyi yapıyor
- "Maksimum FPS" artık FPS'e mal olmuyor. Eskiden bütün profiller Sodium'un bir-kare ertelemesini zorluyordu; böylece Maksimum FPS ile Akıcı aynı upload davranışını üretiyordu ve etiket basitçe yanlıştı. Chunk upload'ları render thread üzerinde çalışır: onları zorlamak chunk'ların hızlı görünmesini satın alır ve bedelini kare süresiyle öder. Maksimum FPS artık Sodium'un korumalı ertelemesini kullanıyor — Lunar Client'ın kendi FPS rehberinin de önerdiği ayar — Akıcı ise bir-kare ertelemeyi koruyor, çünkü araziyi oyuncunun önünde tutmak zaten o profilin varlık sebebi.
- Uyarlamalı olan tek profil Dengeli. Boşluk varken bir-kare erteleme kullanır, sürekli ve ölçülmüş baskı altında mevcut histerezisle korumalı ertelemeye döner. Maksimum FPS ve Akıcı sabit kararlar olduğu için yönetici artık hiç uygulamayacağı bir durumu tutmuyor.
- Turbo hâlâ tam olarak istediğiniz şey. Sıfır-kare erteleme kullanıcı kararıdır; hangi backend ve profil olursa olsun uyarlamalı olarak yavaşlatılmaz.
Düşük çekirdekli Intel sistemlerde chunk işçileri
availableProcessors()makineyi olduğundan büyük gösteriyordu. HD Graphics 520, iki çekirdekli dört thread'li bir mobil işlemcinin içinde yaşar. Eski politika bu dört mantıksal işlemcinin ikisini Dengeli'de, üçünü Akıcı'da chunk meshing'e veriyordu; mesh thread'leri ile render thread aynı iki fiziksel çekirdek için yarışıyordu — takılmaları kaldırması gereken bir mod böyle takılma üretir.- Gen 9 / Gen 9.5 ve en fazla dört mantıksal işlemcili OpenGL sistemlerde Otomatik artık işçi sayısını Maksimum FPS için 1, Dengeli ve Akıcı için 2 ile sınırlıyor. Bu yalnızca bir tavandır: zaten daha azını alacak bir makine düşük değerini korur, yeni nesiller ve diğer backend'ler etkilenmez, elle girilen
1–16değeri aynen uygulanır.
Gerçek kare süresi ölçümü
- Doğrulanmış bir kare kancasıyla beslenen yeni
FrameTimeTracker.Minecraft#getFps()bir saniyelik gecikmeli ortalamadır ve 40 ms'lik bir takılmayı hiç gösteremez — 60 yerine 58 yazar — oysa Intelium'un uyarlamalı sistemleri bu sinyalle yönetiliyordu. Kare aralıkları artıkMinecraft.renderFramenoktasında ölçülüyor: medyan, p95, p99, %1 düşük ve %0,1 düşük. - Ölçtüğü karelere maliyet çıkarmıyor. Sıcak yol bir çıkarma ve önceden ayrılmış halka tampona iki dizi yazmasıdır; allocation yoktur. Yüzdelikler her yeni örnek için en fazla bir kez ve yalnızca gerçekten sorulursa hesaplanır — normal oyunda sıralama hiç çalışmaz.
- Geçersiz örnekler hiçbir şeyi yönlendiremez. Odak dışı kareler, menü sınırlı kareler ve dünya yüklü değilken alınan kareler atılır ve ısınmayı baştan başlatır; dünya değişimi de baştan başlatır. VSync ve FPS sınırları atılmaz, işaretlenir; çünkü atmak makinelerin çoğunda izleyiciyi aç bırakır ve en önemli olan sivrilmeleri de beraberinde çöpe atardı.
Render yolu maliyeti ve asla gizlenmeyecekler
- Her entity için her karede
Minecraft.getInstance()yok. Kamera entity'sinin kimliği tick başına bir kez yayımlanıyor; kancanın "kamera ben miyim?" testi bir int karşılaştırmasına dönüşüyor. - Her block entity için
System.nanoTime()yok. Kare kancası gerçek kare sınırlarını bildirdiği için block-entity bütçesi artık sınırı çağrı zamanlamasından tahmin etmiyor. Kanca uygulanamazsa eski zamanlama yöntemi yedek olarak duruyor. - Yakındaki bir sandık artık uzaktaki çizilirken kaybolamaz. Kare tavanı "önce gelen alır" şeklindeydi; iterasyonun en son ulaştığı block entity'ler reddediliyordu ve hangilerinin kaybolacağı siz döndükçe değişiyordu. 12 blok içindeki her şey artık koşulsuz çiziliyor; tavan yalnızca uzaktaki nüfusa uygulanıyor.
- PvP ve UHC muafiyetleri açıkça tanımlı. Oyuncular, kamera entity'si, mermiler (ok, trident, atılan iksir), isimli entity'ler ve hologramlar, parlayan/çerçevelenmiş entity'ler ve binekler ile binicileri hiçbir mesafede gizlenmez.
Dürüst yetenek raporlaması
- Yalnızca ad değil, tam method descriptor'ı doğrulanıyor. Hedefinin imzası değişen bir kanca eskiden yine de uygulanıyor, hiçbir şeyle eşleşmiyor,
require = 0altında sessizce geçiyor ve ayarlar ekranı hiçbir şey yapmayan bir özelliği sunmaya devam ediyordu. Artık her hedef, çalışan oyuna karşı tam descriptor ile kontrol ediliyor. - Sekiz yetenek bağımsız olarak düşebilir. GPU algılama, işçi ayarı, erteleme ayarı, entity culling, block-entity bütçesi, particle limiter, menü algılama ve kare sınırı kendi durumunu ve sebebini tutar. Eksik bir kanca tek bir özelliği kapatır; modu kapatmaz ve asla sessiz kalmaz.
- Tek bir ortam raporu, bir kez. Minecraft, Fabric Loader, Fabric API, Sodium ve Iris sürümleri, tespit edilen backend, GPU ve nesil, ve her yeteneğin durumu — algılama oturduktan sonra bir kez loglanır, her tick değil.
Bilerek eklenmeyen bir şey
Sodium'un kendi performans seçenekleri için tek tıklık bir preset — Block Face Culling, Fog Occlusion, Entity Culling, Animate Only Visible Textures, Hidden Fluid Culling, Block Transparency — incelendi ve kanıta dayanarak eklenmedi. Çözümlenen Sodium 0.9.1 jar'ında kontrol edildiğinde hepsinin zaten en iyi değerinde geldiği görüldü: beş performans bayrağı true, hiddenFluidCulling true, quadSplittingMode SAFE ve chunkBuildDeferMode ALWAYS varsayılanına sahip. Bunları zorlamak neredeyse herkes için hiçbir şey yapmaz; bilerek değiştirmiş olan azınlık içinse tercihlerini sessizce ezerdi. Hiçbir şey yapmayan bir anahtar, hiç anahtar olmamasından kötüdür.
Uyumluluk
- 26.x jar'ı artık
>=26.2 <26.3bildiriyor. Doğrudan 26.2 sınıf ve method adlarına derleniyor ve 26.1 desteği hiçbir zaman çalışma anında test edilmedi. Eski>=26.1 <26.3aralığı derlemenin arkasında duramadığı bir iddiaydı; birinin makinesinde kafa karıştırıcı şekilde patlamasındansa kaldırıldı. - Backend adı bildirmeyen bir cihaz OpenGL olarak çözümlüyor, çünkü 26.x'te çalıştığı şey odur — Vulkan kendini tanıtır. Var olan ama tanınmayan bir ad hâlâ Bilinmiyor olarak çözümlür ve korumalı politikayı sürdürür.
- Lunar Client: Sodium, Fabric, Iris veya Lunar dosyaları paketlenmez, özel veya tahminî istemci API'leri kullanılmaz, uydurma mod ID'leri sorgulanmaz ve Lunar'ın kendi HUD önbelleği, entity işleme, FPS sınırları ve present yolu ellenmez. Aynı jar standart Fabric 26.2'de de çalışır. Bir jar içerik testi artık hiçbir şeyin paketlenmediğini zorunlu kılıyor.
- Iris açık ya da kapalı, başlangıç etkilenmez: mixin eklentileri sınıfları yüklemek yerine classpath kaynağı olarak aradığı için Iris'in kendi Sodium mixin'lerinin önü kesilmez.
Yapılandırma geçişi gerekmiyor. Mevcut profiller, yakalanan ayarların geri yüklenmesi ve uyumluluk kapıları korunuyor. FPS kazancı sahneye, sürücüye ve donanıma göre değişir; buradaki iddialar işlerin nereden kaldırıldığıyla ilgilidir, vaat edilen bir yüzdeyle değil.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:25HFc7Mf:2FriHurx"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:25HFc7Mf:2FriHurx"
}

