P-LUMA Dokümantasyonu
P-LUMA, normalde beş ayrı modla kurulan şeyleri tek pakette toplayan, yalnızca istemci tarafında çalışan bir Fabric mod'udur: sürükle-bırak HUD düzenleyici, PvP'ye uygun modüller, aranabilir ve uzun sohbet geçmişi, kutudan çıktığı gibi çalışan bir performans kurulumu ve kendine ait menüler.
Kısaca
| Mod kimliği | pluma · paket org.klasfimo.pluma |
| Sürüm | Nova 1.4.5 — kod adı Nova, aşama final |
| Minecraft | 26.2 · 26.1 (26.1–26.1.2) · 1.21.11 · 1.21.10 · 1.21.8 · 1.21.7 · 1.21.6 — her sürüm için ayrı jar |
| Gerekenler | Fabric Loader 0.19.3 veya üstü, Fabric API. Java 25 (26.x) / Java 21 (1.21.x) |
| Gömülü | Lithium, FerriteCore, ImmediatelyFast (jar-in-jar) |
| Önerilen | Sodium, Iris, Entity Culling, More Culling, Dynamic FPS, Mod Menu |
| Lisans | All Rights Reserved · © 2026 klasfimo. Gömülü modlar kendi lisanslarını korur (LGPL-3.0, MIT) |
| Dağıtım | GitHub Releases — klasfimo/P-LUMA-Nova-Wiki |
Özellikler
HUD düzenleyici
Sağ Shift ile açılır. 23 element; sürükle, kenara yapıştır, köşeden boyutlandır.
23 HUD elementi
Koordinat, FPS, ping, TPS, zırh, tuş vuruşları, envanter, skor tablosu, boss çubuğu…
9 modül
Nişangah, blok çerçevesi, hitbox, zoom, serbest bakış, tam parlaklık, ViewModel, başarımlar, makrolar.
Sohbet
Sohbet içinde arama, 10.000 satıra kadar (veya sınırsız) geçmiş, sunucu değişince korunan sohbet.
Performans
Mesafe sınırları, parçacık tavanı, hazır ayarlar ve kendi kendine çalışan otomatik FPS yöneticisi.
Menüler
Kendi ana menüsü, duraklatma menüsü ve aranabilir ayar merkezi; her GUI ölçeğinde akıcı.
Temel ilkeler
P-LUMA'nın tasarımı birkaç değişmez kurala dayanır. Bunlar hem kullanıcının güvenini hem de diğer modlarla uyumu korur:
- Oyuncular asla gizlenmez. Hiçbir ayar, hiçbir mesafe, otomatik FPS yöneticisi dahil hiçbir mekanizma bir oyuncuyu (ve kamera varlığını) çizimden çıkarmaz.
- Arazi (chunk) render'ına dokunulmaz. Orası Sodium'un alanıdır; P-LUMA onunla yarışmaz, onu tamamlar.
- Diğer modlarla uyum. Tüm mixin'ler
@Injecttabanlıdır;@Overwriteve@Redirectyoktur. Aynı işi yapan bir mod kuruluysa P-LUMA'nın ilgili özelliği kendiliğinden devreden çıkar. - Ayar dosyaları güvenilmeyen girdidir. Bozuk bir dosya oyunu çökertmez; varsayılanlara dönülür ve
bozuk kopya
.corruptolarak saklanır. - Ödünç alınan her şey geri verilir. Parlaklık, görüş mesafesi gibi vanilla ayarları yalnızca gerektiği sürece değiştirilir; çökme sonrasında bile bir sonraki açılışta geri yüklenir.
Bu dokümantasyon nasıl okunur?
Oyuncuysan
İndirme ve Kurulum ile başla, ardından Kontroller, HUD Düzenleyici ve Modüller. Sorun yaşarsan SSS.
Geliştiriciysen
Mimari, Derleme ve Sürümler, Çoklu Sürüm Uyumu ve Genişletme Rehberi sayfalarını oku; kurallar Değişmezler'de.
Sağ üstteki arama kutusu (Ctrl K veya /) tüm sayfaları tarar. Bu dokümantasyon doğrudan kaynak koddan (Nova 1.4.5) derlenmiştir; varsayılan değerler, aralıklar ve davranışlar koddaki gerçek değerlerdir.
İndirme ve Kurulum
Her Minecraft sürümünün kendi jar'ı vardır. Doğru dosyayı seç, Fabric API ile birlikte
mods klasörüne koy.
Gereksinimler
| Mod yükleyici | Fabric Loader 0.19.3 veya üstü |
| Bağımlılık | Fabric API (aynı Minecraft sürümü için) |
| Java | 26.x için Java 25, 1.21.x için Java 21. Resmî başlatıcı, Prism, Modrinth App ve CurseForge doğru Java'yı kendisi getirir. |
| Taraf | Yalnızca istemci; her sunucuda çalışır, sunucuya kurulum gerekmez |
| İsteğe bağlı | Mod Menu (ayar ekranına mod listesinden erişim) |
Kurulum adımları
- Minecraft sürümün için Fabric Loader'ı kur.
- Fabric API'yi
.minecraft/modsklasörüne koy. - Minecraft sürümüne uyan P-LUMA jar'ını aynı klasöre koy (aşağıdaki tablo).
- Oyunu başlat. P-LUMA ana menüsü açılmalı. Sağ Shift oyun içinde HUD düzenleyiciyi açar.
Hangi dosya?
| Minecraft | Java | Dosya | Boyut |
|---|---|---|---|
| 26.2 | 25 | pluma-nova.1.4.5-26.2.jar | 1,2 MB |
| 26.1, 26.1.1, 26.1.2 | 25 | pluma-nova.1.4.5-26.1.jar | 1,4 MB |
| 1.21.11 | 21 | pluma-nova.1.4.5-1.21.11.jar | 1,4 MB |
| 1.21.10 | 21 | pluma-nova.1.4.5-1.21.10.jar | 1,4 MB |
| 1.21.8 | 21 | pluma-nova.1.4.5-1.21.8.jar | 1,4 MB |
| 1.21.7 | 21 | pluma-nova.1.4.5-1.21.7.jar | 1,2 MB |
| 1.21.6 | 21 | pluma-nova.1.4.5-1.21.6.jar | 1,2 MB |
Yanlış jar oyunun açılmasını engeller; Fabric Loader hangi sürümü beklediğini söyler. 1.21.x'te her yama ayrı jar'dır
çünkü gömülü Lithium tam olarak tek bir Minecraft sürümü beyan eder. 26.1 jar'ı ise ~26.1 beyan ettiği
için 26.1, 26.1.1 ve 26.1.2'nin hepsinde çalışır.
1.21.9 ve 1.21.5 veya daha eskisi desteklenmez; nedenleri SSS'de.
Dosyayı doğrulama (SHA-256)
Her yayında bir SHA256SUMS.txt bulunur. Windows'ta jar'ın bulunduğu klasörde PowerShell ile:
Get-FileHash .\pluma-nova.1.4.5-26.2.jar -Algorithm SHA256
Linux veya macOS'ta:
sha256sum -c SHA256SUMS.txt --ignore-missing
| Dosya | SHA-256 |
|---|---|
pluma-nova.1.4.5-26.2.jar | bef0fe343a81623d2252b6eea5262ecc0be644d8b5f86899e44fa2fccc861c66 |
pluma-nova.1.4.5-26.1.jar | 10c4fced90af8596985fe397ff1e7468f4c7e57803d40e04677122a600b633ae |
pluma-nova.1.4.5-1.21.11.jar | de427d83ca0fddc50dcc1cd8851a4747bcb4dadb2eb3f13338f304a4e77d0d6a |
pluma-nova.1.4.5-1.21.10.jar | 28e00e860676a76c539d6a79c983c1c6cf57b7f7e75f8c8809fe05193bbf0431 |
pluma-nova.1.4.5-1.21.8.jar | a00bd408994ef3cb3483988647128338a3249004da851093337858244f401a1a |
pluma-nova.1.4.5-1.21.7.jar | 56ec5981fc35bfbeb3fa8941e73e3166571bd2ca1fdc7622fb20155130769ad1 |
pluma-nova.1.4.5-1.21.6.jar | bdbb418ce643324c3d6b029eb5833ba899434f704e6a7be7d891094e045cba62 |
P-LUMA'yı yalnızca resmî GitHub yayınlarından indir. Başka sitelerdeki kopyalar eski veya değiştirilmiş olabilir.
Her jar'ın içinde ne var?
- P-LUMA'nın kendisi (
fabric.mod.json, istemci kodu, mixin'ler, dil dosyaları, dokular) - O Minecraft sürümü için derlenmiş Lithium, FerriteCore ve ImmediatelyFast (iç içe jar)
LICENSE_pluma-nova.txtve gömülü modların lisanslarını anlatanTHIRD_PARTY_NOTICES.md
Gömülü modlardan birinin daha yeni bir kopyasını mods klasörüne ayrıca koyarsan Fabric Loader yenisini kullanır.
Birlikte önerilenler
| Mod | Neden | Neden gömülü değil |
|---|---|---|
| Sodium | Arazi render'ı: alabileceğin en büyük FPS kazancı | PolyForm Shield lisansı yeniden dağıtıma izin vermez |
| Iris | Shader desteği (Sodium ister) | Sodium'a bağlı |
| Entity Culling | Görünmeyen varlıkları çizmez | tr7zw Protective Licence |
| More Culling | Blok yüzeylerini daha iyi eler | Ayrı kurulum |
| Dynamic FPS | Oyun arka plandayken FPS'i kısar | İçindeki native pil kütüphanesi ikinci kez iç içe konunca yüklenmiyor |
Güncelleme
Eski P-LUMA jar'ını mods klasöründen sil ve yenisini koy. Yalnızca bir P-LUMA jar'ı tut:
yan yana iki sürüm oyunun açılmasını engeller. config klasöründeki ayarların korunur; eski sürümlerin
dosyaları otomatik olarak taşınır (bkz. Yapılandırma Dosyaları).
Kontroller
Varsayılan tuşlar, HUD düzenleyici ve sohbet araması kısayolları, ayar merkezine giden tüm yollar.
Varsayılan tuşlar
| Tuş | Eylem | Not |
|---|---|---|
| Sağ Shift | HUD düzenleyiciyi aç | Oyunda, açık ekran yokken çalışır |
| C (basılı tut) | Yakınlaştır | Zoom modülü varsayılan olarak açık |
| Sol Alt | Serbest bakış | Modül açık olmalı; basılı tut veya aç/kapa |
| G | Tam parlaklığı aç/kapa | Modülü açıp kapatır ve eylem çubuğunda durumu yazar |
Hepsi Seçenekler → Kontroller → P-LUMA altında değiştirilebilir (tuş kategorisi key.category.pluma.pluma).
Başka bir zoom modu (Zoomify, Ok Zoomer, Logical Zoom, WI Zoom), serbest bakış modu veya tam parlaklık modu kuruluysa P-LUMA o özelliğin tuşunu hiç kaydetmez; böylece Kontroller ekranında çakışma oluşmaz. Ayrıntı: Mod Uyumluluğu.
Komut makroları
Makro tuşları vanilla Kontroller ekranında değil, Modüller → Komut makroları sayfasında atanır. Bir klavye tuşu veya orta / sağ / yan fare tuşu olabilir. Ayrıntılar: Komut makroları.
Ayar merkezine erişim
| Nereden | Nasıl |
|---|---|
| P-LUMA ana menüsü | P-LUMA Ayarları düğmesi; sağ üst köşede ızgara (HUD sayfası), gösterge (Performans), taşı (HUD düzenleyici) simgeleri |
| P-LUMA duraklatma menüsü | P-LUMA Ayarları ve P-LUMA HUD Düzenleyici düğmeleri; köşede ızgara ve gösterge simgeleri |
| Vanilla ana/duraklatma menüsü | Sağ üst köşedeki iki küçük simge: logo (P-LUMA menüsüne dön) ve kaydırıcılar (ayar merkezi) |
| Mod Menu | P-LUMA → yapılandırma düğmesi |
| HUD düzenleyici | Ortadaki P-LUMA Ayarları düğmesi veya seçili elementin dişlisi |
HUD düzenleyici
| Girdi | Sonuç |
|---|---|
| Tıkla | Elementi seç |
| Sürükle | Elementi taşı (6 px içinde kenarlara ve orta çizgiye yapışır) |
| Sağ alt tutamacı sürükle | Boyutlandır (0,5x – 3x; skor tablosu ve boss çubuğu en fazla 2x) |
| Sağ tık | Elementi aç/kapat |
| Dişli simgesi | Elementin ayar sayfasını aç |
| ← → ↑ ↓ | Seçili elementi 1 px kaydır (çapası korunur) |
| Shift + oklar | 10 px kaydır |
| Esc | Kaydet ve kapat |
Sohbet araması
| Girdi | Sonuç |
|---|---|
| Sohbet satırının sonundaki büyüteç | Aramayı aç |
| Yaz | Sohbet satırlarını süz (büyük/küçük harf duyarsız) |
| Bir satıra tıkla | Panoya kopyala |
| Shift + tıkla | Satırı sohbet giriş satırına ekle ve sohbete dön |
| Fare tekerleği | Kaydır (Shift ile 7 satır) |
| Page Up / Page Down | Sayfa sayfa kaydır |
| Enter / Esc | Sohbete geri dön |
Ayar merkezi
| Girdi | Sonuç |
|---|---|
| Fare tekerleği | İçeriği yumuşak kaydır (çentik başına 36 px) |
| Kenar çubuğundaki arama | Tüm ayarlar, modüller, modül seçenekleri ve HUD elementleri içinde ara |
| Bölüm başlığı | Bölümü katla/aç |
| Tab | Klavyeyle gezin (odaklanan kontrol mor bir halka ile gösterilir) |
| Tuş kutusu dinlerken Esc | Atamayı kaldır (ekranı kapatmaz) |
| Tuş kutusu dinlerken sol tık | Dinlemeyi iptal et, eski atama kalır |
HUD Düzenleyici
Oyun içinde Sağ Shift'e bas: HUD'un canlı önizlemesi üzerinde her elementi sürükleyebilir, boyutlandırabilir, açıp kapatabilir ve ayarlarına gidebilirsin.
Düzenleyiciyi açma
- Sağ Shift — oyundayken ve açık bir ekran yokken.
- P-LUMA duraklatma menüsündeki P-LUMA HUD Düzenleyici düğmesi, ana menüdeki köşe simgesi.
- Ayar merkezinde Genel → HUD düzenleyiciyi aç veya bir elementin Konum → HUD'u Taşı düğmesi (yalnızca bir dünyadayken).
Düzenleyici oyunu duraklatmaz; dünya arkada canlı kalır, üzerine hafif bir karartma (%70) gelir. Açılış ve kapanış kısa bir kayma animasyonuyla olur (Hareketi azalt açıksa anlık). Açıkken normal HUD katmanı çizilmez, elementleri düzenleyici kendisi çizer.
Ekrandaki öğeler
- Araç çubuğu (tam ortada, nişangahın yerinde): P-LUMA Ayarları düğmesi ve Kapalıları göster çipi.
- Seçim çerçevesi: fareyle üzerine gelinen element beyaz, seçili element mor bir çerçeve ve üstünde adıyla bir etiket alır.
- Boyutlandırma tutamacı: seçili elementin sağ alt köşesindeki 10×10 px kare.
- Dişli: seçili elementin sağında (sağ kenara dayalıysa solunda) elementin ayar sayfasını açan düğme.
- Kılavuz çizgileri: element yapıştığında yatay/dikey mor çizgi belirir ve yumuşakça kaybolur.
- İpucu satırı (altta): seçim yokken "Seçmek için tıkla - taşımak için sürükle - aç/kapa için sağ tıkla", seçimde "Boyutlandırmak için köşeyi sürükle - dişli ayarlarını açar - oklar kaydırır - Esc kaydeder".
Taşıma ve yapışma
Bir elementi sürüklerken ekran içine kelepçelenir ve 6 GUI pikseli yakınındaysa şu üç konumdan birine yapışır: sol/üst kenar, orta çizgi, sağ/alt kenar. Yapışma her eksende ayrı hesaplanır. Bırakıldığı anda element konumuna göre yeni bir çapa alır (aşağıda).
Ok tuşları ise yapışma uygulamadan 1 px (Shift ile 10 px) kaydırır ve elementin mevcut çapasını değiştirmez.
Çapa + ofset: konum nasıl saklanır?
P-LUMA konumları ekranın yüzdesi olarak değil, çapa + GUI-piksel ofseti olarak saklar. Her eksende
üç çapa vardır: START (sol/üst), CENTER (orta), END (sağ/alt). Ofset, ekranın çapa
noktasından elementin aynı noktasına olan mesafedir. Sağa çapalı bir elementin ofseti negatiftir: sağ kenarı ekranın sağ
kenarından o kadar soldadır.
- Köşedeki element her çözünürlükte ve GUI ölçeğinde o köşede kalır.
- Alt alta dizilmiş elementler aralarındaki boşluğu korur (boyut da boşluk da GUI pikselidir).
- Büyütülen element çapasından uzağa büyür: sağ kenara yapışık skor tablosu sola doğru büyür, kenardan taşmaz.
Bırakma anında çapa şöyle seçilir (HudMath.anchorFor): element bir kenara değiyorsa o kenar; değmiyorsa
merkezinin bulunduğu üçte bir (sol üçte bir → START, orta → CENTER, sağ → END).
Deneme alanı
Aşağıdaki araç, moddaki HudMath.topLeft ve anchorFor fonksiyonlarının aynısını çalıştırır.
Ekran genişliğini değiştirip çapalı bir elementin nerede kaldığını gör.
Boyutlandırma
Seçili elementin sağ alt tutamacını sürükle. Ölçek, farenin kat ettiği yolun elementin çevresine oranıyla hesaplanır;
dışarı doğru sürüklemek büyütür. Aralık 0,5x – 3x'tir (skor tablosu ve boss çubuğu vekilleri için
2x). Değer ±0,04 yakınındaysa şu duraklara yapışır: 0.5 · 0.75 · 1 · 1.25 · 1.5 · 2 · 3.
Kapalı ve verisiz elementler
Kapalı elementler ya da o an gösterecek verisi olmayanlar (dünya yok, sunucu yok, etki yok…) etiketli bir yer tutucu kart olarak çizilir: elementin adı ve yanında kapalı veya veri yok. Kart en az 17 px yüksekliğindedir (tek satırlık bir göstergenin boyu) ve gerçek elementten genişse çapasından uzağa taşar.
Kapalıları göster çipi kapalı elementleri düzenleyicide gizler/gösterir. Bu tercih yalnızca oturum boyunca hatırlanır, dosyaya yazılmaz (varsayılan: göster).
Kaydetme
Her değişiklik yaklaşık 10 tick (≈0,5 sn) sonra config/pluma-hud.json'a yazılır; peş peşe gelen değişiklikler tek
yazmada birleşir. Esc ile kapatınca bekleyen kayıt hemen diske yazılır. Düzenleyici bir menüden açıldıysa o menüye,
oyundan açıldıysa oyuna döner.
Element ayarları
Dişliden veya ayar merkezinin HUD sayfasındaki karttan bir elementin ayar sayfası açılır. Sağ tarafta elementin canlı önizlemesi durur. Sayfa şu bölümlerden oluşur:
Genel
| Ayar | Açıklama | Aralık / varsayılan |
|---|---|---|
| Etkin | Elementi açar/kapatır | Elemente göre |
| Ölçek | Elementin büyüklüğü; duraklara yapışır | 0,5x – 3x (vekillerde 2x) · 1x |
Görünüm
Skor tablosu ve boss çubuğunda bu bölüm yoktur; onları vanilla çizer.
| Ayar | Açıklama | Seçenekler / varsayılan |
|---|---|---|
| Arkaplan | Elementin arkasındaki panel | Sade göstergelerde kapalı, bileşik elementlerde açık |
| Panel gölgesi | Panelin altındaki yumuşak gölge (6 px yayılım, 1 px aşağı) | Açık |
| Metin efekti | Metnin arka plandan ayrışma biçimi | Yok · Gölge · Kontur — sade göstergelerde Kontur, diğerlerinde Gölge |
| Opaklık | Panelin saydamlığı | %0 – %100 · %78 (bileşik elementlerde %90) |
| Köşe | Panel köşesi | köşeli (0) · hafif (2 px, varsayılan) · yuvarlak (4 px) |
| Renk | Değer metninin ve çerçevenin rengi | Accent'i izle (mor) + 8 renk |
Arkaplan kapalı ve metin efekti "Yok" ise metin yine de gölgeli çizilir: panelsiz metin hiçbir zaman ayrışmasız kalmaz. Kontur glifleri dört yönden siyahla çevreler; kar, Nether duvarı veya parlak gökyüzü üzerinde bile okunur kalır.
Renk paleti
Element seçenekleri
Bazı elementlerin kendine özgü anahtarları vardır (ör. zırhta "Dayanıklılığı göster"). Hepsi HUD Elementleri sayfasında listelenir.
Konum
Bir dünyadayken HUD'u Taşı düğmesi düzenleyiciyi açar.
Elementi sıfırla
Sayfanın sağ üstündeki Elementi sıfırla düğmesi elementin ölçeğini, konumunu (çapa + ofset), açık/kapalı durumunu, rengini, stilini ve seçeneklerini gönderildiği hâline döndürür. Tüm HUD'u sıfırlamak için Genel → Tüm elementleri sıfırla.
Ayar merkezindeki HUD sayfası
- Süzgeç çipleri: Hepsi · Açık · Kapalı · Favoriler.
- Arama: element adı ve açıklamasında arar.
- Kartlar: her kartta elementin küçük canlı önizlemesi (verisi yoksa baş harfli bir rozet), kalp (favori), dişli (ayar sayfası) ve Açık/Kapalı düğmesi. Favoriler listenin başına çıkar.
- Kart sayısı pencere genişliğine göre 1–4 sütuna yayılır.
HUD Elementleri
23 element: 17 metin göstergesi, 4 bileşik element ve vanilla'dan taşınan 2 vekil. Temel olanlar açık gelir; niş göstergeler kapalı ama önceden yerleştirilmiştir, açtığında başka bir elementin üstüne düşmez.
Varsayılan düzen
1920×1080 ekranda GUI ölçeği 3 (640×360 GUI pikseli) için varsayılan yerleşim. Kesik çizgili kutular varsayılan olarak kapalıdır, mor kutular vanilla vekilleridir. Boyutlar yaklaşıktır; gerçek boyut içeriğe göre değişir. Üzerine gelince kimlik ve çapa görünür.
Tüm elementler
Konum sütunu X çapası ofset / Y çapası ofset biçimindedir. "Sade" elementler panelsiz ve konturlu gelir;
"Dolu" elementler %90 opak panelle gelir.
| Kimlik | Ad (TR / EN) | Varsayılan | Konum | Renk | Gösterdiği |
|---|---|---|---|---|---|
coords | Koordinatlar Coordinates | Açık | START 2 / START 2 | Accent | İki satır: XYZ x.x y.y z.z ve Yön (north, east…) |
server | Sunucu Server | Açık | START 2 / START 31 | Cyan Glass | Sunucu adresi; tek oyunculuda "Tek Oyunculu", bilinmiyorsa "bilinmiyor" |
facing | Pusula Compass | Açık | START 2 / START 49 | Orchid | Bakış yönü adı ve 0–359° sapma açısı |
biome | Biyom Biome | Kapalı | START 2 / START 67 | Orchid | Bulunduğun biyomun kimliği (ad alanı olmadan, ör. cherry_grove) |
light | Işık seviyesi Light level | Kapalı | START 2 / START 85 | Solar Amber | Bulunduğun bloktaki en yüksek yerel ışık (0–15) |
speed | Hız Speed | Kapalı | START 2 / START 103 | Signal Green | Yatay hız, m/s (tick başına hareket × 20) |
frametime | Kare süresi Frame time | Kapalı | START 2 / START 121 | Frost Blue | Son 240 karenin ortalama süresi (ms) ve %1 düşük FPS; en az 11 örnek birikince görünür |
memory | Bellek Memory | Kapalı | START 2 / START 150 | Slate Silver | Kullanılan / azami Java heap, GB |
entities | Varlık sayısı Entity count | Kapalı | START 2 / START 168 | Signal Green | İstemcide yüklü varlık sayısı |
session | Oturum süresi Session time | Kapalı | START 2 / START 186 | Slate Silver | Oyun açıldığından beri geçen süre (m:ss, bir saatten sonra h:mm:ss) |
gametime | Oyun içi saat In-game time | Kapalı | START 2 / START 204 | Solar Amber | Dünya saati HH:mm (tick 0 = 06:00) ve gün sayısı |
fps | FPS | Açık | END -2 / START 2 | Frost Blue | 144 FPS |
ping | Ping | Açık | END -2 / START 20 | Cyan Glass | Oyuncu listesindeki gecikmen, ms |
clock | Saat Clock | Açık | END -2 / START 38 | Solar Amber | Gerçek dünya saati, HH:mm |
tps | TPS | Kapalı | END -2 / START 56 | Signal Green | Sunucunun saniyedeki tick sayısı; tek oyunculuda ayrıca ms/tick (ayrıntı aşağıda) |
effects | İksir etkileri Potion effects | Açık | END -2 / START 76 | Rose Quartz | Vanilla etki ikonları, etki adı + seviye, kalan süre (m:ss veya ∞) · Dolu |
armor | Zırh Armor | Açık | START 2 / END -2 | Accent | Kask, göğüslük, pantolon, bot (+ eldeki eşya) ve dayanıklılık · Dolu |
durability | Eldeki eşya Held item | Kapalı | START 2 / END -40 | Ember Red | Eldeki hasar alabilen eşyanın adı, kalan dayanıklılık ve yüzdesi |
keystrokes | Tuş vuruşları Keystrokes | Açık | END -2 / END -2 | Accent | W A S D, LMB/RMB ve zıplama çubuğu; basılan tuş renkle dolar · Dolu |
cps | CPS | Açık | END -2 / END -88 | Signal Green | sol / sağ saniyedeki tıklama (son 1 saniye) |
inventory | Envanter Inventory | Kapalı | CENTER 0 / END -52 | Accent | 9×3 ana envanter (isteğe bağlı hotbar), vanilla eşya çizimiyle · Dolu |
scoreboard | Skor tablosu Scoreboard | Açık | END -1 / CENTER 0 | — | Vanilla kenar çubuğu, yalnızca taşınır ve ölçeklenir · Vekil |
bossbar | Boss çubuğu Boss bar | Açık | CENTER 0 / START 3 | — | Vanilla boss çubukları, yalnızca taşınır ve ölçeklenir · Vekil |
Veri yoksa element çizilmez. Örneğin dünyada değilken koordinatlar, etkin etki yokken iksir etkileri, elde hasar alabilen eşya yokken "Eldeki eşya" oyunda görünmez; düzenleyicide "veri yok" kartı olarak görünür.
Metin göstergeleri
17 element (coords … gametime, fps, ping, clock, tps, durability, cps) aynı sınıftan (TextWidget) gelir. Her satır
bir etiket ve bir değerdir: etiket yarı saydam beyaz (#B8FFFFFF), değer elementin rengindedir.
Veri kare başına en fazla bir kez hesaplanır; HUD yenileme sınırı açıksa daha seyrek.
TPS nasıl ölçülür?
- Sunucuda: sunucu yaklaşık saniyede bir dünya zamanı paketi gönderir. P-LUMA iki paket arasındaki oyun
tick farkını geçen gerçek süreye böler (20 ile sınırlı) ve son 5 örneğin ortalamasını gösterir. Henüz ölçüm yoksa
...yazar. Bağlantı kesilince ölçümler sıfırlanır. - Tek oyunculuda: gömülü sunucunun ortalama tick süresi doğrudan okunur; TPS = 1000 / max(50, mspt) ve
yanında
msdeğeri gösterilir.
Paket kancası ağ thread'inde değil istemci thread'inde (TAIL) çalışır; aksi hâlde her paket iki kez sayılırdı.
Kare süresi ve %1 düşük
Her HUD karesinde geçen süre (0–1000 ms arası) 240 örneklik halka tampona yazılır. Ortalama ms bu örneklerin ortalamasıdır; %1 düşük, en yavaş %1'lik karelerin ortalama süresinin FPS karşılığıdır.
CPS
Saldırı ve kullan tuşlarının basılma anları (kenar tetik) tick başına izlenir, son 1000 ms içindekiler sayılır (en fazla 64 örnek).
Bileşik elementler
İksir etkileri
Aktif her etki için vanilla'nın envanterde kullandığı ikonun birebir aynısı (mob_effect/<id> GUI sprite'ı),
etki adı (seviye 2+ ise numarasıyla) ve kalan süre. Bu element açıkken vanilla'nın sağ üstteki etki ikonları gizlenir;
aynı bilgi iki kez görünmez. Kapatınca vanilla ikonları geri gelir.
Zırh
| Seçenek | Varsayılan | Etkisi |
|---|---|---|
| Dayanıklılığı göster | Açık | Her eşyanın altında (dikeyde yanında) kalan dayanıklılık |
| Dayanıklılığı yüzde olarak göster | Kapalı | Sayı yerine % |
| Eldeki eşyayı dahil et | Açık | Ana eldeki eşyayı sona ekler |
| Dikey sırala | Kapalı | Eşyaları alt alta dizer |
Dayanıklılık %50'nin altına düşünce metin elementin renginden kırmızıya (#E23B44) doğru kayar; %15'te tamamen kırmızıdır.
Tuş vuruşları
W, A, S, D; sol ve sağ fare tuşu; zıplama çubuğu. Tuş basılıyken kutusu elementin rengiyle dolar ve harf koyulaşır. Tuş adları vanilla tuş atamalarından okunur, yani tuşları değiştirmişsen de doğru çalışır.
| Seçenek | Varsayılan | Etkisi |
|---|---|---|
| Fare tuşlarında CPS göster | Kapalı | LMB/RMB yerine N cps yazar. Ayrı CPS elementi açık geldiği için varsayılan kapalıdır. |
Envanter
Ana envanterin 27 slotu (satır başına 9) vanilla eşya çizimiyle: adet, dayanıklılık çubuğu ve bekleme süreleri envanter ekranındaki gibi görünür.
| Seçenek | Varsayılan | Etkisi |
|---|---|---|
| Hotbar'ı dahil et | Kapalı | Altına 4. satır olarak hotbar'ı ekler |
| Slot zeminleri | Açık | Her slotun arkasına koyu kare çizer |
Vanilla vekilleri: skor tablosu ve boss çubuğu
Bu iki element yeniden çizilmez; vanilla'nın kendisi çizer, P-LUMA yalnızca konumunu ve ölçeğini uygular. Böylece sunucu eklentilerinin renkleri, biçimleri, takım renkleri aynen korunur.
- Düzenleyicideki kutu elementin gerçek sınırlarıdır; vanilla'nın yerleşim hesabı satır satır kopyalanmıştır (skor tablosunda en fazla 15 satır, takım rengine göre kenar çubuğu; boss çubuklarında 182 px genişlik, 19 px aralık, ekranın üçte birinde durma).
- Varsayılan yerindeyse ve ölçek 1x ise vanilla hiç dokunulmadan çizilir.
- Taşındığında vanilla kutusu vekil kutusuna eşlenir: aynı sol üst köşe, o köşe etrafında ölçek. Bu yüzden sağ kenara yapışık skor tablosu her boyutta kenara yapışık kalır.
- Kapatılırsa vanilla elementi hiç çizilmez.
- Vanilla'nın çizecek bir şeyi yoksa (ör. hedef yok) düzenleyicide nominal kutu (90×70 veya 182×14) ve "vanilla" etiketi görünür.
- Panel, gölge, metin efekti ve renk ayarları yoktur; azami ölçek 2x'tir.
Modüller
HUD'da yeri olmayan ama ayarı olan özellikler. Ayar merkezinin Modüller sayfasında her biri bir kart: dişli ayar sayfasını açar, düğme modülü açıp kapatır.
Özet
| Modül | Varsayılan | Ne yapar | Tuş |
|---|---|---|---|
| Özel nişangah | Kapalı | Artı, nokta, daire, X veya artı+nokta; boyut, boşluk, kalınlık, renk, dış çizgi, ters renk, dinamik açılma | — |
| Blok çerçevesi | Kapalı | Baktığın bloğun çerçeve rengi, opaklığı, kalınlığı ve isteğe bağlı yarı saydam dolgu | — |
| Hitbox | Kapalı | Varlık kutuları, nişandaki varlığa ayrı renk, bakış çizgisi, göz hizası | — |
| Yakınlaştırma | Açık | Basılı tutunca zoom; tekerlekle ayar, yumuşak geçiş, düşük hassasiyet | C |
| Serbest bakış | Kapalı | Yürüme yönünü ve nişanı değiştirmeden karakterin etrafına bak | Sol Alt |
| Tam parlaklık | Kapalı | Mağara ve geceyi aydınlatır | G |
| ViewModel | Kapalı | CS2 tarzı el konumu, boyutu ve açısı | — |
| Başarımları kapat | Kapalı | Başarım bildirimi, sesi ve sohbet satırları; isteğe bağlı tarif bildirimleri | — |
| Komut makroları | Açık | Bir tuşa veya fare tuşuna komut ya da mesaj ata (liste boş gelir) | Makro başına |
Ortak davranış
- Başka bir mod aynı işi yapıyorsa modül tamamen devreden çıkar: kancaları çalışmaz, tuşu kaydedilmez, ilgili mixin'ler hiç uygulanmaz. Kartında Açık/Kapalı yerine "X kullanıyor" yazar; ayar sayfası nedenini açıklar. Oyuncunun ayarı dosyada olduğu gibi kalır ve o mod kaldırılınca yeniden geçerli olur.
- Modülü sıfırla düğmesi modülün açık/kapalı durumunu ve tüm seçeneklerini varsayılana döndürür.
- Renk seçenekleri şu paletten seçilir: beyaz, gri, siyah, Frost Blue, Signal Green, Solar Amber, Ember Red, Orchid, Cyan Glass, Rose Quartz. Dünyada çizilen şeylerde accent (mor) yoktur.
- Tüm değerler
config/pluma-modules.json'a kaydedilir; dosyadan okunan her değer geçerli aralığa kelepçelenir.
Özel nişangah
Vanilla nişangahın yerine kendi HUD elementi üzerinden çizilir; bu sayede hotbar, saldırı göstergesi seçeneği, F1 ve diğer HUD kancaları çalışmaya devam eder. Vanilla ile aynı koşullarda görünür: yalnızca birinci şahısta, izleyici modunda değilken ve F3'ün 3B hata ayıklama nişangahı açık değilken.
| Seçenek | Tür | Aralık (adım) | Varsayılan | Açıklama |
|---|---|---|---|---|
| Şekil | Seçim | Artı · Nokta · Daire · X · Artı+ | Artı | Nişangahın biçimi |
| Uzunluk | Kaydırıcı | 1 – 20 px (0,5) | 5 px | Kolların uzunluğu; dairede yarıçapa eklenir |
| Boşluk | Kaydırıcı | 0 – 12 px (0,5) | 2 px | Merkezdeki boşluk |
| Kalınlık | Kaydırıcı | 0,5 – 6 px (0,5) | 1 px | Çizgi kalınlığı |
| Renk | Renk | Palet | Beyaz | Nişangah rengi |
| Opaklık | Kaydırıcı | 0,1 – 1 (0,05) | 1 | Saydamlık |
| Dış çizgi | Anahtar | — | Açık | Siyah kontur; açık zeminde de görünür |
| Ters renk | Anahtar | — | Kapalı | Vanilla gibi arka planı tersler (dış çizgiyi devre dışı bırakır) |
| Dinamik | Anahtar | — | Kapalı | Hareket ederken kollar açılır |
Ayrıntılar
- Boyutlar GUI pikselidir ama fiziksel piksel çözünürlüğünde çizilir; bu yüzden yarım adımlar gerçektir ve GUI ölçeği 3'te 1 fiziksel piksellik çizgi mümkündür. Şekil, vanilla'nın 15 px'lik sprite'ını ortaladığı pikselin tam üstüne oturur.
- Önce tüm dış çizgiler, sonra tüm kollar çizilir; bir kolun konturu komşu kolun üstüne boyanmaz. Dış çizgi kalınlığı yarım GUI pikselidir.
- X şekli döndürülmüş dörtgenlerle değil kare bloklardan merdivenle çizilir; her ölçekte keskindir.
- Dinamik: yatay hız 7 blok/sn'ye göre normalize edilir, yumuşatılarak en fazla 3 GUI pikseli açılır.
- Vanilla'nın saldırı bekleme göstergesi "Nişangah" olarak ayarlıysa nişangahın altında aynen çizilir.
- Ayar sayfasında canlı önizleme vardır: HUD ile aynı çizim kodu, yarısı koyu yarısı açık bir zemin üzerinde, sığdığı ölçüde tam sayı büyütmeyle (1x–3x).
1.21.6: bu sürümde dokusuz bir "ters çevir" çizim hattı olmadığı için ters renk seçeneği nişangahı düz beyaz çizer. 1.21.7 ve sonrasında beklendiği gibi çalışır.
Blok çerçevesi
Baktığın bloğun çerçevesi. Fabric'in BEFORE_BLOCK_OUTLINE olayı kullanılır: vanilla'nın çizgisi atlanır ve P-LUMA'nınki aynı
render geçişinde (bloğa göre opak veya yarı saydam) çizilir. Mixin yoktur; aynı olayı dinleyen diğer modlar da çağrılmaya devam eder.
| Seçenek | Tür | Aralık (adım) | Varsayılan | Açıklama |
|---|---|---|---|---|
| Çizgi rengi | Renk | Palet | Beyaz | Çerçeve rengi |
| Çizgi opaklığı | Kaydırıcı | 0,1 – 1 (0,05) | 0,8 | Çerçevenin saydamlığı |
| Kalınlık | Kaydırıcı | 1x – 8x (0,5) | 2x | Vanilla çizgi kalınlığının katı |
| Dolgu | Anahtar | — | Kapalı | Bloğu yarı saydam boyar |
| Dolgu rengi | Renk | Palet | Beyaz | Dolgunun rengi |
| Dolgu opaklığı | Kaydırıcı | 0,05 – 0,8 (0,05) | 0,15 | Dolgunun saydamlığı |
- Dolgu, bloğun kendi yüzeyleriyle z-fighting yapmaması için bloktan 0,002 blok dışarı taşırılır; bloğun gerçek şekli (merdiven, levha…) kutu kutu boyanır.
- 26.2'de dünya "gönderilen düğümlerden" çizildiği için çerçeve ve dolgu doğrudan tampona değil
SubmitNodeCollector'a gönderilir.
Kalınlık yalnızca 1.21.11 ve sonrasında çalışır. 1.21.10 ve öncesinde dünya çizgilerinin vertex başına kalınlığı yoktur; çizgiler sabit genişlikte çizilir.
Hitbox
Vanilla'nın F3+B'sinden bağımsız, kendi renkleriyle varlık kutuları. Kutular varlığın çizildiği aynı interpolasyonlu konumda çizilir, hareket eden hedefin arkasında kalmaz. Nişangahın üzerindeki varlık (vurmak üzere olduğun) ayrı renk alır. Bu modül hiçbir şeyi gizlemez, yalnızca çizgi ekler.
| Seçenek | Tür | Aralık (adım) | Varsayılan | Açıklama |
|---|---|---|---|---|
| Hedefler | Seçim | Hepsi · Oyuncu · Canlı | Hepsi | Hangi varlıkların kutusu çizilir |
| Renk | Renk | Palet | Beyaz | Kutu rengi |
| Nişan rengi | Renk | Palet | Kırmızı | Nişangahtaki varlığın rengi |
| Opaklık | Kaydırıcı | 0,1 – 1 (0,05) | 0,9 | Kutuların saydamlığı |
| Kalınlık | Kaydırıcı | 1x – 6x (0,5) | 1,5x | Çizgi kalınlığı (1.21.11+) |
| Bakış çizgisi | Anahtar | — | Açık | Canlıların göz hizasından baktığı yöne 2 blokluk mavi çizgi |
| Göz hizası | Anahtar | — | Kapalı | Canlıların göz yüksekliğine kırmızı halka |
| Yerdeki eşyalar | Anahtar | — | Kapalı | Düşmüş eşyaların kutusunu da çizer (Hedefler seçiminden bağımsız) |
| Mesafe | Kaydırıcı | 8 – 128 blok (4) | 48 | Kutuların çizildiği son mesafe |
Birinci şahısta kendi kamera varlığının kutusu çizilmez. 26.x'te kutular kare başına tek bir özel geometri olarak COLLECT_SUBMITS olayında gönderilir.
Yakınlaştırma
OptiFine tarzı basılı tut-yakınlaştır. Yalnızca dünya FOV'u bölünür, elin FOV'u değişmez (eşya balon gibi şişmez). Fare hassasiyeti aynı oranda düşürülür, böylece nişan orantılı kalır. Yalnızca oyundayken ve açık ekran yokken çalışır.
| Seçenek | Tür | Aralık (adım) | Varsayılan | Açıklama |
|---|---|---|---|---|
| Yakınlık | Kaydırıcı | 2x – 10x (0,5) | 4x | Kaç kat yakınlaşır |
| Yumuşak geçiş | Anahtar | — | Açık | Yakınlaşma üstel bir eğriyle kayar (~45 ms zaman sabiti) |
| Tekerlekle ayar | Anahtar | — | Açık | Tuş basılıyken tekerlek hotbar yerine yakınlığı ×/÷ 1,25 değiştirir |
| Hassasiyeti düşür | Anahtar | — | Açık | Fare hareketi 1/yakınlık ile çarpılır |
| Sinematik kamera | Anahtar | — | Kapalı | Zoom süresince vanilla sinematik kamerayı açar |
| Eli gizle | Anahtar | — | Açık | Yakınlık 1,05x'i geçince birinci şahıs el çizilmez |
- Tekerlekle ayarlanan yakınlık 1,5x – 50x aralığındadır ve tuş bırakılınca unutulur; bir sonraki zoom ayardaki değerden başlar.
- Sinematik kamera yalnızca P-LUMA açtıysa kapatılır; zaten açıksa dokunulmaz.
- Hareketi azalt açıksa geçiş anlık olur.
- Tuş Seçenekler → Kontroller → P-LUMA altında değiştirilir.
Zoomify, Ok Zoomer, Logical Zoom veya WI Zoom kuruluysa modül tamamen çekilir: tuş kaydedilmez ve
FOV/fare mixin'leri (GameRendererMixin, MouseMixin) hiç uygulanmaz.
Serbest bakış
Tuş basılıyken (veya aç/kapa modunda açıkken) kamera üçüncü şahısta karakterin etrafında döner ve fare karakteri değil kamerayı çevirir. Karakter yürümeye ve baktığı yöne bakmaya devam eder; hareket, nişan ve hedeflenen blok değişmez. Bittiğinde önceki perspektif geri gelir.
| Seçenek | Tür | Seçenekler | Varsayılan | Açıklama |
|---|---|---|---|---|
| Kullanım | Seçim | Basılı tut · Aç/kapa | Basılı tut | Tuşun davranışı |
| Görünüm | Seçim | Arkadan · Önden | Arkadan | Kameranın konumu |
| Dikeyi ters çevir | Anahtar | — | Kapalı | Fare yukarı, kamera aşağı |
- Kamera, vanilla'nın oyuncuya uyguladığı oranla döner (fare birimi başına 0,15°); dikey açı ±90° ile sınırlıdır.
- Fare hareketi oyuncunun yaw/pitch'ine ulaşmadan yakalanır; kamera dönüşü vanilla oyuncudan açıyı aldıktan hemen sonra değiştirilir. Böylece üçüncü şahıs mesafe kontrolü ve ön görünüm çevirisi serbest açılarla doğru çalışır.
- Modül açık değilse veya dünyada değilsen aç/kapa durumu sıfırlanır.
Bazı sunucular serbest bakışı yasaklar. Bu yüzden modül kapalı gelir; kullanıp kullanmamak oyuncunun kararıdır.
Freelook / Perspective modlarından biri kuruluysa modül çekilir ve CameraMixin, EntityLookMixin uygulanmaz.
Tam parlaklık
Mağaralar ve gece, elinde meşale varmış gibi aydınlanır; dünyaya dokunulmaz. Vanilla her karede lightmap shader'ına tek bir parlaklık sayısı verir. Ayar kaydırıcısı 1,0'da durur ama shader durmaz; P-LUMA o seçeneğe daha büyük bir sayı yazar ve gerisini vanilla'nın kendi lightmap'i yapar. Sahte bir iksir etkisi yoktur, render kodu değiştirilmez.
| Seçenek | Tür | Aralık (adım) | Varsayılan | Açıklama |
|---|---|---|---|---|
| Yoğunluk | Kaydırıcı | 1 – 15 (0,5) | 10 | Vanilla sınırının (1,0) ne kadar ötesi |
- G modülü açıp kapatır ve eylem çubuğunda "Tam parlaklık: açık/kapalı" yazar.
- Ödünç alma sözleşmesi: ilk yazmadan önce oyuncunun kendi parlaklık değeri
pluma-perf.json'a (savedGamma) park edilir. Modül kapanınca, oyun kapanırken ve — arada çökme olabileceği için — bir sonraki açılışta geri verilir. - Değer zaten hedefteyse her tick yeniden yazılmaz.
- 1.4.4 öncesinde bu özellik Performans sayfasındaydı.
pluma-modules.json'da kaydı yoksa eskifullBright/fullBrightStrengthalanlarından bir kez tohumlanır.
fullbright, fullbrightness, gammautils, lambdabettergrass_fullbright veya brightness-slider kuruluysa modül çekilir ve tuttuğu parlaklığı iade eder: iki mod aynı değeri her tick birbirine karşı itmez.
ViewModel
CS2 tarzı görünüm modeli: eldeki eşyanın ve kolun ekrandaki yeri, büyüklüğü ve açısı. Vanilla'nın kendi birinci şahıs dönüşümlerinin üzerine uygulanır; sallama, kuşanma ve yürüme sallantısı animasyonları aynen oynar, yalnızca yeni bir yerden.
| Seçenek | Aralık (adım) | Varsayılan | Açıklama |
|---|---|---|---|
| Yatay konum | -1 – 1 (0,02) | 0 | Sağa-sola kaydırır |
| Yükseklik | -1 – 1 (0,02) | 0 | Yukarı-aşağı kaydırır |
| Derinlik | -1 – 1 (0,02) | 0 | İleri-geri kaydırır |
| Boyut | 0,1x – 2x (0,05) | 1x | Elin büyüklüğü |
| X dönüşü | -180° – 180° (5) | 0° | Öne-arkaya eğer |
| Y dönüşü | -180° – 180° (5) | 0° | Sağa-sola çevirir |
| Z dönüşü | -180° – 180° (5) | 0° | Yana yatırır |
| Sol eli aynala | Anahtar | Açık | Sol elde X konumu ile Y ve Z dönüşlerinin işareti çevrilir; iki elli düzen simetrik kalır |
Uygulama sırası: öteleme → X, Y, Z dönüşleri → ölçek. Zoom'un "Eli gizle" seçeneği aynı mixin çiftinde değerlendirilir; iptal edilen bir çizim hiçbir zaman matris yığınını itmez, bu yüzden yığın dengesi bozulmaz.
Başarımları kapat
Başarımları sessizleştirir: sağ üstteki bildirim kartı (ve onunla birlikte, kart ilk çizildiğinde çalan ses), "başarım kazandı" sohbet satırları ve isteğe bağlı olarak tarif bildirimleri.
| Seçenek | Varsayılan | Açıklama |
|---|---|---|
| Bildirim ve ses | Açık | Sağ üstteki başarım kartı ve sesi |
| Kendi mesajların | Açık | Senin başarım sohbet satırın |
| Başkalarının mesajları | Açık | Diğer oyuncuların başarımları |
| Tarif bildirimleri | Kapalı | Yeni tarif kartları |
Sohbet eşleşmesi metne göre değil çeviri anahtarına (chat.type.advancement.*) göre yapılır: her dilde çalışır
ve aynı kelimeleri yazan bir oyuncunun mesajını yutmaz. "Kendi" ayrımı, mesajın ilk argümanındaki oyuncu adının seninkiyle karşılaştırılmasıyla yapılır.
Komut makroları
Bir klavye tuşu veya fare tuşu bir komut ya da sohbet mesajı gönderir. / ile başlayan satır komut olarak, diğerleri sohbet
mesajı olarak gönderilir. Modülün kendi liste sayfası vardır: her satırda tuş kutusu, metin kutusu ve silme düğmesi; altta Makro ekle.
Tuş atama
- Satırdaki tuş kutusuna tıkla; kutu
> ... <gösterir. - Bir klavye tuşuna bas veya orta / sağ / yan fare tuşuna tıkla.
- Esc atamayı kaldırır ("Atanmadı"), sol tık dinlemeyi iptal eder ve eski atamayı korur.
Kurallar ve güvenlik
| Azami makro sayısı | 50 |
| Azami metin uzunluğu | 256 karakter; satır sonları boşluğa çevrilir, baştaki/sondaki boşluk kırpılır |
| Tetiklenme | Yalnızca tuşun basıldığı an (basılı tutmak tekrarlamaz) |
| Bekleme | Her makro 500 ms'de en fazla bir kez gönderir — takılı kalan bir tuş kimseyi spam'den attırmaz |
| Ne zaman | Yalnızca bir dünyadayken (tek oyunculu dahil) ve açık ekran yokken |
| Menü kapatma tuşu | Tuş durumu ekran açıkken de izlenir; bir menüyü kapatan tuş/tıklama makroyu tetiklemez (1.4.5 düzeltmesi) |
Makrolar vanilla KeyMapping olarak değil, her tick sorgulanan tuşlar olarak çalışır: makro listesi oyuncunun kendi verisidir ve
Kontroller ekranını elli satırla boğmamalıdır. Fare tuşları 1000 + n (GLFW fare tuşu 0–7 → 1000–1007) olarak saklanır; GLFW klavye
kodları 348'de bittiği için çakışma olmaz.
Sohbet
Sohbetin kendisi vanilla kalır — konumu, genişliği ve opaklığı normal sohbet ayarlarını izler. P-LUMA üç şey ekler: arama, uzun geçmiş ve sunucu değişince korunan sohbet.
Sohbet araması
Sohbeti açtığında (T) giriş satırının sağ ucunda küçük bir büyüteç belirir; giriş satırı ona yer açmak için 14 px daralır. Büyüteç P-LUMA'nın değil sohbetin görünümünü taşır: kendi çerçevesi yoktur, glifi senin sohbet metni opaklığınla, üzerine gelindiğinde zemini sohbet arka plan rengiyle çizilir. Sohbeti soluk bir katmana indirdiysen düğme de soluktur.
Aramaya ayar merkezinin Sohbet → Sohbet araması bölümünden de ulaşılır.
Arama ekranı
- Ayrı bir pencere değildir: tam olarak açık sohbetin olduğu yerde, senin sohbet genişliğin, ölçeğin, satır aralığın, metin ve arka plan opaklığınla çizilir; sohbetin "arama moduna" geçmesi gibi görünür. Bu sırada HUD sohbeti çizilmez, ikisi üst üste binmez.
- Yazdıkça süzer; eşleşme büyük/küçük harf duyarsız düz metin aramasıdır (en fazla 64 karakter). Boş sorgu tüm satırları gösterir.
- Eşleşen kısım açık renkli bir zeminle vurgulanır (accent kullanılmaz). Giriş satırının sağında "N sonuç" yazar.
- Sonuçlar en yeniden en eskiye sıralanır; her mesajın ilk sarılmış satırı gösterilir.
- Tıkla → satır panoya kopyalanır ("Panoya kopyalandı" yaklaşık 1,6 sn görünür).
- Shift + tıkla → satır, aramayı açtığın sohbet giriş satırına eklenir (yazdıklarının sonuna bir boşlukla, en fazla 256 karakter) ve sohbete dönülür.
- Tekerlek, Page Up/Page Down ile kaydırılır; Enter veya Esc sohbete döner.
Aramanın ayrı bir geçmiş kopyası yoktur; sohbet bileşeninin zaten tuttuğu listeyi okur. Yani aranabilir olan, tam olarak kaydırıp görebildiğin geçmiştir — aşağıdaki geçmiş sınırı dahil.
Sohbet geçmişi (MoreChatHistory)
Vanilla sohbet yalnızca son 100 satırı tutar. P-LUMA bu sınırı kaldırır.
| Ayar | Varsayılan | Açıklama |
|---|---|---|
| MoreChatHistory | Açık | Vanilla'nın 100 satır sınırını kaldırır. Kapalıysa 100. |
| Sınırsız geçmiş | Kapalı | Oturumun 50.000 satırına kadar tutulur |
| Geçmiş sınırı | 1000 | Sınırsız kapalıyken tutulan satır: 100 – 10.000, 100'lük adımlarla |
| Sunucu değişince koru | Açık | Dünyadan çıkınca veya sunucu değiştirince sohbet silinmez |
- Vanilla'nın iki kırpma döngüsü (mesaj listesi ve ekranda çizilen sarılmış satırlar) aynı değeri kullanır; ikisi hiçbir zaman uyuşmazlığa düşmez.
- "Sınırsız" gerçekte 50.000 satırdır: normal bir oturumun ulaşmayacağı ama yoğun bir sunucuda bir haftalık oturumun belleği sınırsız büyütmesini engelleyen bir tavan (1.4.5).
Sunucular arasında sohbeti koruma
Vanilla sohbeti iki yerde temizler: bağlantı kesilirken (clearMessages(true)) ve F3+D ile
(clearMessages(false)). P-LUMA yalnızca birincisini atlar; F3+D ile bilerek temizlemek çalışmaya devam eder.
Atlarken temizliğin diğer işleri yine yapılır: sohbet gecikmesiyle bekletilen mesajlar boşaltılır ve eski sunucunun imzalarına bağlı silme kuyruğu temizlenir.
Başka bir sohbet geçmişi modu kuruluysa
MoreChatHistory, Chat Patches, No Chat Reset veya Don't Clear Chat History kuruluysa: geçmiş sınırı mixin'i hiç uygulanmaz, etkin geçmiş 100 kabul edilir ve sunucular arası koruma devre dışı kalır. Ayar sayfasındaki Mod uyumluluğu bölümü hangi modun bu işi yaptığını yazar. Ayarların dosyada korunur.
Performans
Gömülü performans modları, arazi dışı mesafe sınırları, hazır ayarlar ve kare hızını kendi başına tutan otomatik FPS yöneticisi. Hepsi Sodium'la yarışmadan onun bıraktığı yerden devam eder.
Varlık mesafe sınırı, otomatik FPS yöneticisi dahil hiçbir ayar bir oyuncuyu veya kamera varlığını çizimden çıkarmaz. Sana ateş eden kişiyi gizleyerek kazanılmış bir kare, sahip olmaya değer bir kare değildir.
Gömülü modlar
| Mod | Yazar | Lisans | Ne yapar |
|---|---|---|---|
| Lithium | CaffeineMC | LGPL-3.0-only | Oyun mantığı ve tick optimizasyonu |
| FerriteCore | malte0811 | MIT | Bellek kullanımını düşürür |
| ImmediatelyFast | RaphiMC | LGPL-3.0-or-later | HUD, yazı ve varlık çizimini hızlandırır |
Değiştirilmeden, Fabric jar-in-jar olarak paketlenirler ve Fabric Loader tarafından ayrı modlar olarak yüklenir. Daha yeni bir kopyayı
mods'a koyarsan o kullanılır. Hangi sürümlerin gömüldüğü Derleme ve Sürümler sayfasında.
Hazır ayarlar
Performans sayfasının en üstünde üç düğme. Bir hazır ayar uygulandığında sayfadaki tüm kontroller yeni değerleri gösterecek şekilde yenilenir.
| Ayar | Vanilla | PvP | Maksimum FPS |
|---|---|---|---|
| Varlık gizleme | kapalı | 96 blok | 48 blok |
| Blok varlığı gizleme | kapalı | 64 blok | 32 blok |
| Tabela yazısı gizleme | kapalı | 16 blok | 8 blok |
| Eşya ve XP küresi gizleme | kapalı | 48 blok | 24 blok |
| İsim etiketi gizleme | kapalı | kapalı | 24 blok |
| Sadece baktığın isim etiketleri | kapalı | kapalı | açık |
| Tick başına parçacık | sınırsız | 250 | 0 |
| Hava durumunu kapat | hayır | evet | evet |
| Gökyüzünü kapat | hayır | hayır | evet |
| HUD yenilemesini sınırla | kapalı | 60 Hz | 30 Hz |
| Tam parlaklık modülü | kapalı | açık | açık |
| Otomatik FPS yöneticisi | kapalı | açık | açık |
| Agresif mod | kapalı | kapalı | açık |
Vanilla, P-LUMA'nın eklediği her şeyi kapatır ama mesafe kaydırıcılarının değerlerine dokunmaz. PvP, bilgi kaybettirmeyen kazançları seçer: uzak varlıklar ve düşmüş eşyalar gider, parçacıklar sınırlanır, hava durmaz; isim etiketleri ve gökyüzü kalır. Maksimum FPS fark edilecek olanlar dahil her kolu çeker.
Otomatik FPS yöneticisi
Arka planda çalışan kapalı bir döngü: kare hızını izler, hedefin altına düşünce kısıtları bir kademe sıkılaştırır, rahatlayınca geri gevşetir. Yeni kurulumda açık gelir — yumuşak kademeler normal oyunda fark edilmez ve zayıf makinelere kendiliğinden yardım eder; görünür değişiklik yapan agresif yarısı isteğe bağlıdır.
| Ayar | Varsayılan | Açıklama |
|---|---|---|
| Otomatik FPS yöneticisi | Açık (yeni kurulumda) | Kare hızını izler, kısıtları ayarlar |
| Agresif mod | Kapalı | Vanilla render ayarlarına da dokunur: görüş mesafesi, varlık mesafesi ölçeği, bulutlar, gökyüzü, HUD yenileme |
| Hedef FPS | monitör | Tutulacak FPS. Kaydırıcı 0–360; 30'un altı "monitör" demektir (ekranın yenileme hızı, okunamazsa 60). Dosyada 30–480. |
Ayarların altında canlı bir durum şeridi vardır: FPS 142 - ortalama 138 - hedef 144 - kademe 1/5 ve yöneticinin ne kadar ilerlediğini gösteren beş çentik.
Nasıl karar verir?
| Durum | Koşul | Süre | Sonuç |
|---|---|---|---|
| Ortalama | Üstel hareketli ortalama, α = 0,05 (20 tps'de ~1 sn hafıza) | her tick | — |
| Yavaş | ortalama < hedef × 0,92 | 40 tick (2 sn) | +1 kademe |
| Çok yavaş | ortalama < hedef × 0,50 | 10 tick (0,5 sn) | +2 kademe |
| Rahat | ortalama > hedef × 1,15 | 120 tick (6 sn) | −1 kademe |
| Soğuma | herhangi bir değişiklikten sonra | 60 tick (3 sn) | karar verilmez |
İki orta eşik bilerek birbirinden uzaktır ve gevşetmek sıkılaştırmanın üç katı sürer: düşen bir kare hızla yanıtlanır, şanslı sakin bir an onu üreten ayarları hemen çöpe atmaz. Bu boşluk olmasa döngü sınırda oturup her saniye gidip gelir, bu da yardım değil takılma gibi hissettirir. "Çok yavaş" eşiği, ilk dünya yüklemesinde hedefinin yarısında sürünen zayıf makinelerin gereken kademeye 20+ saniye yerine hızla ulaşması içindir.
Kademeler
| Kademe | Varlık | İsim etiketi | Eşya | Parçacık/tick | Hava | Agresif modda ek olarak |
|---|---|---|---|---|---|---|
| 0 | Hiçbir şey yapma | — | ||||
| 1 | 128 | 64 | 48 | sınırsız | açık | — |
| 2 | 96 | 48 | 32 | 500 | açık | — |
| 3 | 64 | 32 | 24 | 250 | kapalı | görüş −2, varlık ölçeği ≤ %75, bulutlar kapalı |
| 4 | 48 | 24 | 16 | 100 | kapalı | görüş −4, varlık ölçeği ≤ %50, bulutlar, gökyüzü kapalı, HUD 30 Hz |
| 5 | 32 | 16 | 12 | 0 | kapalı | görüş −6, varlık ölçeği ≤ %50, bulutlar, gökyüzü kapalı, HUD 30 Hz |
- Mesafeler bloktur. Kademeler şeylerin gerçek maliyet sırasına göre sıkılaşır: önce uzak varlıklar, sonra parçacıklar, sonra atmosfer, en sonda en görünür olan görüş mesafesi.
- Blok varlığı mesafesi de varlık kademesini izler (aynı "önce uzaktakiler" mantığı).
- Görüş mesafesi hiçbir koşulda 5 chunk'ın altına indirilmez.
- Yönetici kendi değerlerini ayar dosyasına yazmaz; bir katman olarak uygular. Kapatınca her şey tam bıraktığın yere döner.
"Katı olan kazanır"
Mixin'lerin okuduğu değer, senin ayarın ile yöneticinin o anki kademesinin daha sıkı olanıdır. Örneğin varlık gizleme mesafen 96 ve yönetici kademe 3'teyse (64) etkin mesafe 64'tür; kademe 1'e (128) inince yine seninki (96) geçerli olur. Hava ve gökyüzü için "herhangi biri kapatıyorsa kapalı".
Vanilla ayarlarının ödünç alınması
Agresif mod gerçek vanilla ayarlarını (görüş mesafesi, varlık mesafesi ölçeği, bulut modu) değiştirir. Bunlar oyuncuya aittir, bu yüzden ilk değişiklikten
önce özgün değerler pluma-perf.json'a park edilir (savedViewDistance, savedEntityScale, savedCloudMode,
autoOverrideActive) ve şu anlarda geri yüklenir:
- döngü tekrar gevşeyip vanilla değişikliği gerektirmeyen bir kademeye inince,
- dünyadan çıkınca (yönetici de sıfırlanır),
- yönetici kapatılınca (agresif mod kapatıldığında ise bir sonraki kademe değişiminde),
- oyun kapanırken,
- ve arada bir çökme olduysa bir sonraki açılışta, ilk kareden önce.
Render ayarları
Her biri kendi anahtarıyla gelir ve varsayılan olarak kapalıdır. Hiçbiri chunk mesh'ine veya arazi render'ına dokunmaz.
| Ayar | Mesafe aralığı | Varsayılan | Ne yapar |
|---|---|---|---|
| Varlık gizleme | 8 – 256 blok | kapalı · 64 | Uzaktaki varlıkları çizmez. Oyuncular ve kamera varlığı muaf. |
| Blok varlığı gizleme | 16 – 256 blok | kapalı · 64 | Uzaktaki sandık, tabela, afiş, kafa, yatak… çizmez. Bunlar Sodium'un kurduğu chunk mesh'inin parçası değildir; her biri her karede ayrı çizilir, yani üs dolusu sandık Sodium'un kurtaramadığı kareler yer. |
| Tabela yazısı gizleme | 4 – 64 blok | kapalı · 16 | Uzak tabelanın tahtası kalır, yazısı gider. Yüz başına dört satır glif, bir tabelanın çizim maliyetinin çoğudur. |
| Eşya ve tecrübe küresi gizleme | 8 – 128 blok | kapalı · 32 | Uzaktaki düşmüş eşyaları ve XP kürelerini çizmez; bunlar hızla birikir. |
| İsim etiketi gizleme | 4 – 128 blok | kapalı · 32 | Varlık çizilir, etiketi çizilmez: varlık gizlemenin ucuz yarısı. |
| Sadece baktığın isim etiketleri | — | kapalı | Görüş konisinin dışındaki etiketleri çizmez (aşağıda). |
| Tick başına parçacık | 0 – 1000 | 1000 = sınırsız | Bir tick'te oluşturulabilecek parçacık sayısına tavan. |
| Hava durumunu kapat | — | kapalı | Yağmur ve kar çizilmez. |
| Gökyüzünü kapat | — | kapalı | Gök kubbesi, güneş, ay, yıldızlar çizilmez. |
Bakış konisi nasıl hesaplanır?
Koni oyuncudan değil kameradan ölçülür: serbest bakış yalnızca kamerayı çevirir ve önden üçüncü şahıs kamerayı oyuncuya doğru çevirir; oyuncunun bakış yönü tam olarak ekrandaki etiketleri gizlerdi (1.4.5 düzeltmesi). Koninin yarı açısı, FOV ayarından ve pencerenin en-boy oranından hesaplanan ekran köşegeninin yarısı + 15°'dir; böylece geniş veya ultra geniş ekranlarda etiketler kenarda aniden kaybolmaz, koşarken artan FOV da payın içinde kalır. Açı yalnızca FOV veya pencere boyutu değişince yeniden hesaplanır.
HUD yenileme sınırı
| Ayar | Aralık | Varsayılan |
|---|---|---|
| HUD yenilemesini sınırla | — | kapalı |
| HUD yenileme hızı | 5 – 240 Hz | 60 Hz |
HUD elementlerinin verilerini ne sıklıkla yeniden hesapladığını sınırlar. Elementler her karede son ürettikleri değerden çizilmeye devam eder, hiçbir şey titremez; duran şey kare başına metin oluşturma, biyom sorgusu ve varlık sayımıdır. Bu yüzden görsel bir bedeli yoktur.
Mod uyumluluğu bölümü
Performans sayfasında hangi performans modlarının kurulu, hangilerinin gömülü olduğunu ve hangilerini eklemeye değer olduğunu gösteren bir liste vardır. Kurulu olanlar yeşil "Gömülü x.y.z" / "Kurulu x.y.z" etiketiyle, kurulu olmayanlar bir onay ekranından sonra tarayıcıda açılan Sayfası düğmesiyle gösterilir. Ayrıntılar: Mod Uyumluluğu.
Vanilla görüntü ayarları
Sık kullanılan vanilla ayarlarının kısayolları; doğrudan vanilla seçeneklerini değiştirirler.
| Ayar | Aralık |
|---|---|
| Maks FPS | 10 – 260 (260 = sınırsız) |
| Render mesafesi | 2 – 32 chunk |
| Simülasyon mesafesi | 5 – 32 chunk |
| Varlık mesafesi | %50 – %500, %25 adımlarla |
| VSync | açık/kapalı |
| Varlık gölgeleri | açık/kapalı |
| Bulutlar | Kapalı · Hızlı · Süslü |
Sodium ile birlikte
P-LUMA arazi render'ına hiç dokunmaz, bu yüzden Sodium (veya Embeddium) ile sorunsuz çalışır ve en iyi kare hızı için hâlâ önerilir. Genel sayfasının Hakkında bölümü Sodium'un algılanıp algılanmadığını yazar.
Mod Uyumluluğu
P-LUMA çevresindeki modları üç türe ayırır — gömülü, önerilen ve çakışan — ve aynı işi yapan bir mod varsa kavga etmek yerine yol verir.
Üç tür komşu
Gömülü
P-LUMA jar'ının içinde gelir (lisans izin verdiği için): Lithium, FerriteCore, ImmediatelyFast. Oyuncu ayrıca kurarsa Fabric Loader yeni olanı tutar.
Önerilen
Gömülemeyen veya bu sürüm için olmayan modlar; ayar sayfası onlara bağlantı verir: Sodium, Iris, Entity Culling, More Culling, Dynamic FPS.
Çakışan
P-LUMA'nın da yaptığı bir şeyi yapan modlar. Biri kuruluysa P-LUMA'nın özelliği aynı değer için onunla çekişmek yerine çekilir.
Çakışma kuralları
| Özellik | Bu mod kimliklerinden biri yüklüyse | Ne olur |
|---|---|---|
| Yakınlaştırma | zoomify, ok_zoomer, logical_zoom, wi_zoom | Modül çekilir, C kaydedilmez, GameRendererMixin ve MouseMixin uygulanmaz |
| Serbest bakış | freelook, perspective, perspectivemod, perspective_mod | Modül çekilir, Sol Alt kaydedilmez, CameraMixin ve EntityLookMixin uygulanmaz |
| Tam parlaklık | fullbright, fullbrightness, gammautils, lambdabettergrass_fullbright, brightness-slider | Modül çekilir, G kaydedilmez, tutulan parlaklık iade edilir |
| Sohbet geçmişi | morechathistory, chatpatches, nochatreset, dont-clear-chat-history | ChatHistoryMixin uygulanmaz, etkin geçmiş 100, sunucular arası koruma kapalı |
- Mixin kararları oyun açılırken, sınıflar dönüştürülürken bir kez verilir (
PlumaMixinPlugin); diğer kararlar çalışma anında aynı listelerle (ModCompat) verilir. - Çekilmek ayar dosyasına dokunmaz: oyuncunun anahtarı olduğu gibi kalır ve diğer mod kaldırıldığı anda yeniden geçerli olur.
- Modül kartı "X kullanıyor" der; ayar sayfası "X kurulu ve bu işi o yapıyor, bu yüzden P-LUMA'nın modülü devre dışı" açıklamasını gösterir. Performans sayfasında tam parlaklık ve sohbet geçmişi çakışmaları ayrıca not edilir.
Uyumluluk listesi
| Mod | Kimlik | Rol | Açıklama |
|---|---|---|---|
| Sodium | sodium | Önerilen | Arazi render'ı: en büyük FPS kazancı |
| Iris | iris | Önerilen | Shader desteği, Sodium ile çalışır |
| Entity Culling | entityculling | Önerilen | Görünmeyen varlıkları çizmez |
| More Culling | moreculling | Önerilen | Blok yüzeylerini daha iyi eler |
| Lithium | lithium | Gömülü | Oyun mantığı ve tick optimizasyonu |
| FerriteCore | ferritecore | Gömülü | Bellek kullanımını düşürür |
| ImmediatelyFast | immediatelyfast | Gömülü | HUD, yazı ve varlık çizimini hızlandırır |
| Dynamic FPS | dynamic_fps | Önerilen | Arka plandayken FPS'i kısar |
fabric.mod.json ayrıca modmenu (o jar'ın derlendiği sürüm ve üstü), sodium ve iris için suggests içerir.
Sodium algılaması Embeddium'u da kapsar.
Neden bazıları gömülü değil?
| Sodium | PolyForm Shield lisansı yeniden dağıtıma izin vermez |
| Iris | Sodium'a bağlıdır |
| Entity Culling | tr7zw Protective Licence |
| More Culling | Ayrı kurulum |
| ModernFix | Yayın anında desteklenen Minecraft sürümlerinin çoğu için Fabric sürümü yoktu |
| Dynamic FPS | İçinde iç içe bir native pil durumu kütüphanesi (net.lostluma.battery) taşır; ikinci kez iç içe konunca yüklenmez |
Diğer modlarla genel uyum
- Tüm mixin kancaları
@Inject'tir (HEAD/RETURN/TAIL veya belirli bir çağrıdan sonra). Aynı metoda kanca atan diğer modlar çalışmaya devam eder. @Overwriteve@Redirectkullanılmaz. Tek istisna sohbet geçmişi sınırındaki@ModifyConstant'tır ve o da çakışan mod varsa hiç uygulanmaz.- Blok çerçevesi ve hitbox mixin değil Fabric API olaylarıyla çizilir.
- HUD değişiklikleri Fabric'in
HudElementRegistry'si üzerinden yapılır; vanilla HUD elementleri yeniden yazılmaz, sarmalanır. - P-LUMA kendi başına hiçbir ağ bağlantısı kurmaz. Uyumluluk sayfasındaki bağlantılar yalnızca tıklayınca, bir onay ekranından sonra tarayıcıda açılır.
Yapılandırma Dosyaları
Ayar merkezinde değiştirdiğin her şey, değişiklikten kısa süre sonra oyunun config klasöründeki üç JSON dosyasına kendiliğinden kaydedilir.
Dosyalar
| Dosya | Şema sürümü | İçerik |
|---|---|---|
config/pluma-hud.json | 7 | HUD düzeni (her element için çapa + ofset), element stilleri ve seçenekleri |
config/pluma-perf.json | 3 | Performans, sohbet ve arayüz ayarları; otomatik FPS yöneticisi; ödünç alınan vanilla değerleri |
config/pluma-modules.json | 1 | Modüller, seçenekleri ve komut makroların |
Tasarım gereği güvenli
Dosyalar güvenilmeyen girdi olarak okunur; elle yapılan bir düzenleme veya bozuk bir dosya oyunu bozamaz:
- Bilinmeyen element, modül, seçenek veya bayrak kimlikleri yok sayılır.
- Her değer geçerli aralığa geri itilir;
NaNveyaInfinityvarsayılan değere döner. - Dosya ayrıştırılamıyorsa varsayılanlarla başlanır ve bozuk metin yanına
<dosya>.corruptolarak kopyalanır; bir sonraki kayıt tek kopyanın üzerine yazmadan önce düzenin kurtarılabilir. - Dosya okunamıyorsa (kilitli, izin yok) varsayılanlar kullanılır ve dosyaya dokunulmaz;
.corruptbırakılmaz. - Dosya daha yeni bir P-LUMA tarafından yazılmışsa yanına
.bakyedeği alınır, içeriği bozulmasın diye uygulanmaz ve varsayılanlarla devam edilir (özgün hâli.bak'ta kalır). - Dosya daha eski bir P-LUMA'dan geliyorsa önce
.bakyedeği alınır, sonra yeni biçime taşınıp kaydedilir. - Kayıtlar önce
<dosya>.tmp'ye yazılır, sonra tek adımda (atomik taşıma; desteklenmiyorsa normal taşıma) asıl dosyanın yerine konur. Kayıt sırasında çökme veya dolu disk yarım bir JSON bırakamaz. - Kayıt hatası istemciyi asla çökertmez.
Kayıt zamanlaması: değişiklik dosyayı "kirli" işaretler; 10 tick (≈0,5 sn) içinde yeni değişiklik gelmezse yazılır, böylece sürüklenen bir kaydırıcı tek bir yazmaya dönüşür. Ayar merkezi veya düzenleyici kapanınca ve oyun kapanırken bekleyen kayıtlar hemen yazılır.
pluma-hud.json
{
"version": 7,
"widgets": {
"fps": {
"anchorX": "END",
"anchorY": "START",
"offsetX": -2,
"offsetY": 2,
"scale": 1.0,
"enabled": true,
"background": false,
"panelShadow": true,
"textEffect": "OUTLINE",
"radius": 2,
"backgroundAlpha": 0.78,
"colorIndex": 0,
"favorite": false,
"flags": {}
},
"armor": {
"anchorX": "START",
"anchorY": "END",
"offsetX": 2,
"offsetY": -2,
"scale": 1.0,
"enabled": true,
"background": true,
"panelShadow": true,
"textEffect": "SHADOW",
"radius": 2,
"backgroundAlpha": 0.9,
"colorIndex": -1,
"favorite": false,
"flags": { "durability": true, "percent": false, "held": true, "vertical": false }
}
}
}
| Alan | Tür / aralık | Açıklama |
|---|---|---|
anchorX, anchorY | START · CENTER · END | Bilinmeyen değer elementin mevcut çapasına düşer |
offsetX, offsetY | tam sayı, ±4096 | GUI pikseli; canlı HUD ayrıca ekrana kelepçeler (kayıtlı değer değişmez) |
scale | 0,5 – 3 | NaN → 0,5 |
enabled, background, panelShadow | boolean | Yoksa elementin gönderildiği değer |
textEffect | NONE · SHADOW · OUTLINE | Bilinmeyen değer varsayılana düşer |
radius | 0 · 2 · 4 | 0–4'e kelepçelenip en yakın adıma yuvarlanır |
backgroundAlpha | 0 – 1 | Panel opaklığı |
colorIndex | -1 veya 0 – 7 | -1 = accent'i izle; diğerleri paletteki renk |
favorite | boolean | Ayar merkezinde listenin başına çıkarır |
flags | ad → boolean | Elementin beyan ettiği seçenekler; bilinmeyenler atılır |
Sürüm geçişleri
| Eski sürüm | Ne oldu | Taşıma |
|---|---|---|
| ≤ 4 | Tek bir shadow bayrağı hem paneli hem metni yönetiyordu | Bu değer hem panelShadow hem metin efektine (gölge/yok) uygulanır |
| ≤ 5 | Konumlar ekranın kesirleri (x/y) olarak saklanıyordu | Bilerek taşınmaz. 1.4.4'e kadar bir toplu çizim hatası element içeriğini 1/GUI-ölçeği boyutunda çiziyordu; o konumlar gerçek boyutun üçte biri kadar elementlere göre dizilmişti ve dönüştürülünce üst üste binerdi. Stil, renk ve açık/kapalı korunur; yerleşim yeni kenar çapalı varsayılanlara döner. |
| ≤ 6 | Köşe adımları 6/10/14 px idi | Taşınmaz (hepsi en yuvarlak yeni adıma yapışırdı); element yeni varsayılan hafif köşeye döner |
pluma-perf.json
| Alan | Varsayılan | Aralık |
|---|---|---|
entityCulling / entityDistance | false / 64 | 8 – 256 |
nameTagCulling / nameTagDistance | false / 32 | 4 – 128 |
nameTagLookOnly | false | — |
itemCulling / itemCullDistance | false / 32 | 8 – 128 |
blockEntityCulling / blockEntityDistance | false / 64 | 16 – 256 |
signTextCulling / signTextDistance | false / 16 | 4 – 64 |
particleLimit | 1000 (sınırsız) | 0 – 1000 |
disableWeather, disableSky | false | — |
hudRefreshLimit / hudRefreshHz | false / 60 | 5 – 240 |
reduceMotion | false | — |
moreChatHistory | true | — |
chatHistoryLimit | 1000 | 100 – 10000 |
chatHistoryUnlimited | false | true = 50.000 satır |
keepChatAcrossServers | true | — |
autoFps | true (yeni kurulumda) | — |
autoFpsTarget | 0 (monitör) | 0 veya 30 – 480 |
autoFpsAggressive | false | — |
customTitleScreen, customPauseScreen | true | — |
İç durum alanları
Bu alanlar oyuncunun ayarı değil, "ödünç alma" sözleşmesinin kaydıdır. Elle değiştirme.
gammaOverrideActive, savedGamma | Tam parlaklık parlaklığı tutarken oyuncunun kendi değeri (0 – 1) |
autoOverrideActive, savedViewDistance (0 – 64), savedEntityScale (0 – 5), savedCloudMode | Agresif mod vanilla ayarlarını tutarken özgün değerler. Bilinmeyen bulut modu "Süslü" kabul edilir. |
fullBright, fullBrightStrength | Tam parlaklığın 1.4.4 öncesindeki yeri; yalnızca modül kaydı yokken bir kez okunur |
chatHistory | Sürüm 2'nin tek geçmiş sayısı; okunup chatHistoryLimit'e taşınır, bir daha yazılmaz |
pluma-modules.json
{
"version": 1,
"modules": {
"zoom": {
"enabled": true,
"options": { "factor": 4.0, "smooth": 1.0, "scroll": 1.0, "sensitivity": 1.0, "cinematic": 0.0, "hide_hand": 1.0 }
},
"crosshair": {
"enabled": false,
"options": { "style": 0.0, "size": 5.0, "gap": 2.0, "thickness": 1.0, "color": -1.0, "opacity": 1.0,
"outline": 1.0, "invert": 0.0, "dynamic": 0.0 }
}
},
"macros": [
{ "key": 71, "text": "/spawn" },
{ "key": 1003, "text": "gg" }
]
}
Her seçenek türü dosyada tek bir sayıdır; dosya biçimi düz bir harita, doğrulama tek bir fonksiyondur:
| Tür | Saklama | Kelepçeleme |
|---|---|---|
| Anahtar | 0 / 1 | ≥ 0,5 → 1, değilse 0 |
| Kaydırıcı | sayı | Aralığa kelepçelenir ve adıma yuvarlanır |
| Seçim | seçeneğin sırası (0'dan) | Aralığa kelepçelenip tam sayıya yuvarlanır |
| Renk | ARGB tam sayı (ör. beyaz -1) | 32-bit tam sayı aralığına yuvarlanır |
| Tuş | GLFW tuş kodu, -1 = atanmadı, 1000–1007 = fare tuşları | -1 – 1007 |
Makrolar: en fazla 50 kayıt okunur; geçersiz tuş kodu "atanmadı"ya döner; metin tek satıra indirilir, kırpılır ve 256 karaktere kısaltılır.
Eksik enabled modülün mevcut durumunu korur.
Eski adla (Stratos) kurulumlar
P-LUMA'nın eski adıyla yazılmış stratos-hud.json ve stratos-perf.json dosyaları, yeni dosya henüz yoksa bir kez aynı
doğrulama yolundan geçirilip pluma-*.json olarak yazılır. Özgün dosyalar silinmez, .migrated uzantısıyla yeniden adlandırılır.
Sıfırlama
| Sıfırlanacak | Yapılacak |
|---|---|
| Tek bir HUD elementi | Elementin ayar sayfası → Elementi sıfırla |
| Tüm HUD | Genel → Tüm elementleri sıfırla |
| Tek bir modül | Modülün sayfası → Modülü sıfırla |
| Performans ayarları | Performans → Hazır ayarlar → Vanilla (mesafe değerleri korunur) |
| Her şey | Oyunu kapat ve üç pluma-*.json dosyasını sil |
Düzen paylaşma
pluma-hud.json'ı başka bir kurulumun config klasörüne kopyala. Konumlar ekran kenarlarına çapalı olduğu için düzen farklı çözünürlük
ve GUI ölçeklerinde de aynı görünür.
SSS ve Bilinen Sınırlamalar
Sık sorulan sorular, bilinen kısıtlar ve hata bildirme.
1.21.9 sürümü var mı?
Hayır. 1.21.9'un Fabric API'sinde (0.134.x) blok çerçevesi ve hitbox'ın çizildiği dünya render olayları yoktu ve 1.21.10 birkaç gün içinde onun yerini aldı. 1.21.10'u kullan.
1.21.5 ve öncesi?
Desteklenmez. Menüler ve HUD, Minecraft'ın 1.21.6'da getirdiği GUI render sistemine dayanır.
Forge veya NeoForge sürümü var mı?
Hayır, P-LUMA yalnızca Fabric içindir.
P-LUMA'yı ekledikten sonra oyun açılmıyor
- Jar'ın Minecraft sürümüne tam olarak uyduğundan emin ol (Hangi dosya?).
- Fabric API'nin kurulu ve aynı sürüm için olduğundan emin ol.
- 26.x'te oyunun Java 25 ile çalıştığından emin ol.
mods'da yalnızca bir P-LUMA jar'ı olduğundan emin ol.
Fabric Loader'ın hata ekranı genellikle eksik veya uyumsuz modun adını söyler.
Çizgi kalınlığı ayarı hiçbir şeyi değiştirmiyor
1.21.10 ve öncesinde dünya çizgileri sabit genişlikte çizilir; blok çerçevesi ve hitbox'ın kalınlık seçenekleri yalnızca 1.21.11 ve sonrasında çalışır.
Ters renkli nişangah beyaz
1.21.6'da düz şekiller için ters çevirme çizim modu yoktur; ters renkli nişangah beyaz çizilir. 1.21.7 ve sonrasında beklendiği gibi çalışır.
Zoom / serbest bakış / tam parlaklık modülüm "… kullanıyor" diyor
Aynı özelliği sağlayan başka bir mod kurulu, P-LUMA çakışmamak için kendi modülünü kapattı. P-LUMA'nınkini kullanmak istiyorsan diğer modu kaldır. Bkz. Mod Uyumluluğu.
Kullandığım için ban yer miyim?
P-LUMA istemci taraflıdır ve kendi başına haksız avantaj sağlamaz, ama her sunucu kendi kurallarını koyar. Bazı sunucular serbest bakışı, hitbox'ları veya tam parlaklığı yasaklar. Oynadığın sunucunun kurallarına bak. Bu yüzden bu modüller varsayılan olarak kapalıdır.
P-LUMA Sodium'un yerini tutar mı?
Hayır. P-LUMA, Sodium'un en büyük farkı yarattığı arazi render'ına dokunmaz. İkisini birlikte kur.
P-LUMA'nın ana menüsünü veya duraklatma menüsünü istemiyorum
Genel sayfasında P-LUMA ana menüsü ve P-LUMA duraklatma menüsü'nü kapat. Ayar merkezine vanilla ekranların köşesindeki küçük simgeden ve Mod Menu'den ulaşmaya devam edersin.
Menüler fazla animasyonlu
Genel → Hareketi azalt'ı aç.
FPS'im neden kendiliğinden değişen ayarlarla oynuyor?
Otomatik FPS yöneticisi yeni kurulumlarda açık gelir. Yalnızca P-LUMA'nın kendi kısıtlarını (varlık/etiket/eşya mesafesi, parçacık, hava) değiştirir; vanilla ayarlarına yalnızca agresif modda dokunur. İstemiyorsan Performans → Otomatik FPS yöneticisi'ni kapat — her şey bıraktığın yere döner.
Görüş mesafem düşük kaldı
Agresif mod görüş mesafesini ödünç alır ve dünyadan çıkınca, kapatınca veya bir sonraki açılışta geri verir. Oyun tam o sırada çöktüyse bir sonraki açılışta ilk kareden önce geri yüklenir.
P-LUMA bir yere veri gönderiyor mu?
Hayır. P-LUMA kendi başına hiçbir ağ bağlantısı kurmaz. Uyumluluk sayfasındaki bağlantılar yalnızca sen tıklayınca, bir onay ekranından sonra tarayıcında açılır.
Bilinen sınırlamalar
- 1.21.10 ve öncesinde blok çerçevesi ve hitbox çizgi kalınlığı etkisizdir.
- 1.21.6'da ters renkli nişangah beyazdır.
- Arama ekranında her sohbet mesajının yalnızca ilk sarılmış satırı gösterilir.
- Sunucudaki TPS, gelen zaman paketlerinden tahmin edilir (sunucu ms/tick paylaşmaz); tek oyunculudaki kadar kesin değildir.
- Tekerlekle ayarlanan zoom yakınlığı tuş bırakılınca unutulur.
- "Kapalıları göster" ve katlanan ayar bölümleri kalıcı değildir.
Henüz tam doğrulanmamış alanlar
Geliştirici notlarından: gerçek bir sunucuda TPS ve makrolar, Sodium + Iris ile açılış, GUI ölçeği 4 ve küçük pencere. Otomatik test aracı girdi (tıklama/tuş) simüle etmez; 1.21.6–1.21.8'in eski girdi imzaları derleyiciyle doğrulandı.
Hata bildirme
Bir hata veya mod çakışması bulduysan bir issue aç ve şunları ekle:
- Minecraft sürümü ve P-LUMA jar'ının tam adı (ör.
pluma-nova.1.4.5-26.2.jar) - Mod listen
logs/latest.log(çökme varsacrash-reports/altındaki dosya)- İlgiliyse
config/pluma-*.jsondosyaları
Mimari
Kod tabanını hiç görmemiş bir geliştiricinin hızla hâkim olması için: paketler, başlatma akışı, veri akışı ve sorumluluklar.
Künye
| Proje | P-LUMA — Minecraft Fabric istemci mod'u |
| Sürüm | Nova 1.4.5 (test derlemeleri 1.4.5-alpha.N / 1.4.5-beta.N, yayın 1.4.5) |
| İsimler | Mojang isimleri (Yarn yok — 26.x zaten obfuscate edilmemiş gelir) |
| Kaynak ağacı | Tek ağaç, 1.21.11 için yazılı; diğer sürümler derlemede Stonecutter ile türetilir |
| Paket kökü | org.klasfimo.pluma |
| Giriş noktaları | client: PlumaClient · modmenu: PlumaModMenu |
| Çalışma bağımlılığı | Fabric API. Mod Menu yalnızca derleme (compile-only). Lithium, FerriteCore, ImmediatelyFast jar-in-jar. |
| Duruş | Sodium'la yarışmayan, arazi render'ına dokunmayan; HUD düzenleyici, modüller ve arazi dışı performans kısıtları sunan, performans modlarını paketleyen istemci mod'u |
Depo yapısı
P-LUMA/
├── build.gradle.kts sürüm başına proje betiği (Loom, bağımlılıklar, jar adı, releaseJar)
├── settings.gradle.kts Stonecutter sürüm düğümleri, vcsVersion = 1.21.11
├── stonecutter.gradle.kts aktif sürüm, isim değişikliği replacements, buildAll
├── stonecutter.properties.toml tüm derleme özellikleri, sürüm başına bağımlılıklar
├── gradle.properties yalnızca Gradle seçenekleri (-Xmx2G, parallel=false)
├── src/
│ ├── main/resources/ fabric.mod.json, assets/pluma/icon.png (ortak set boş)
│ └── client/
│ ├── java/org/klasfimo/pluma/
│ │ ├── client/ tüm istemci kodu (aşağıdaki tablo)
│ │ └── mixin/ PlumaMixinPlugin + mixin/client/*
│ └── resources/
│ ├── pluma.client.mixins.json
│ └── assets/pluma/ lang/en_us.json, lang/tr_tr.json, textures/gui/{brand.png, icons/*.png}
├── tools/ GenerateIcons, GenerateLogo, GenerateShowcase (Java tek dosya)
├── branding/ logo-source.png, logo-mark.png, showcase/<dil>/*
├── versions/<mc>/ Stonecutter'ın sürüm başına derleme dizinleri (üretilir)
├── run/ tüm sürümlerin ortak geliştirme istemcisi dizini
└── README.md · README.tr.md · ARCHITECTURE.md · CHANGELOG.md · THIRD_PARTY_NOTICES.md · CLAUDE.md
loom { splitEnvironmentSourceSets() } kullanılır: gerçek kod src/client/java'dadır, ortak (main) set yalnızca kaynak dosyaları taşır.
Paketler
| Paket | Sorumluluk | Başlıca sınıflar |
|---|---|---|
client | Giriş noktası, sürüm kimliği, tuş kategorisi, atomik dosya yazma, Mod Menu köprüsü | PlumaClient, PlumaVersion, PlumaKeys, ConfigFiles, PlumaModMenu |
client.compat | Sürümler arasında yeri/adı değişen her çağrı | Mc, input.KeyEvent, input.MouseButtonEvent |
client.hud | Widget modeli, 23 element, düzenleyici, HUD yapılandırması, yerleşim aritmetiği, vanilla sınırları, ölçüm yardımcıları | PlumaHud, HudWidget, TextWidget, ArmorWidget, EffectsWidget, KeystrokesWidget, InventoryWidget, VanillaProxyWidget, VanillaBounds, HudEditorScreen, HudMath, TpsTracker, FrameStats, InputTracker |
client.module | Modül tabanı, kayıt ve yapılandırma, 9 modül | PlumaModule, PlumaModules, *Module |
client.option | Modül seçeneği beyanı ve değer deposu | Option, OptionValues |
client.perf | Performans ayarları, otomatik FPS, tam parlaklık, mod uyumu | PerfConfig, AutoPerf, AutoPerfMath, FullBright, ModCompat |
client.render | Şekil çizimi, doku atlası, tasarım token'ları, zamanlama | Draw, ShapeAtlas, Theme, Motion |
client.screen | Ayar merkezi, menüler, sohbet araması | PlumaSettingsScreen, PlumaMenuScreen, PlumaTitleScreen, PlumaPauseScreen, PlumaChatSearchScreen |
client.ui | Kontroller, simgeler, sohbet arama düğmesi | Controls, Icons, ChatSearchButton |
client.dev | Yalnızca geliştirme ortamında: ölçüm turu ve tanıtım görüntüleri | DevHarness, DevShowcase |
mixin | Mixin eklentisi ve 20 mixin | PlumaMixinPlugin, mixin.client.* |
Bağımlılık yönü: render hiçbir üst pakete bağlı değildir (tek istisna Motion → PerfConfig.reduceMotion).
hud, module, screen ve ui çizim için render'ı kullanır; mixin'ler karar için perf ve module'ü okur.
Başlatma akışı
PlumaClient.onInitializeClient() sırası önemlidir: yapılandırma önce, render kancaları sonra.
PlumaHud.load() → PerfConfig.load() → PlumaModules.load()Modüller, tam parlaklığı tohumlamak için PerfConfig'i okur
DevHarness.register(), DevShowcase.register()Yalnızca dev ortamı + sistem özelliği
key.pluma.hud_editor (Sağ Shift), kategori PlumaKeys.CATEGORYaddLast(pluma:hud); SCOREBOARD/BOSS_BAR vekille sarılır; STATUS_EFFECTS efekt elementi açıkken susturulurPlumaModules.init(): CROSSHAIR değiştirilir, dünya olayları, zoom/serbest bakış/tam parlaklık tuşlarıDISCONNECT → TpsTracker.reset(); CHAT arama ekranı açıkken susturulurAutoPerf.restoreAfterCrash, FullBright.restoreAfterCrashInputTracker → PlumaHud.tick → PerfConfig.tick → AutoPerf → FullBright → PlumaModules.tickAll → düzenleyici tuşuAutoPerf.reset, FullBright.restore, üç yapılandırmanın flush'ıTitleScreen → PlumaTitleScreen; menülü PauseScreen → PlumaPauseScreen (etkinse)ChatScreen giriş satırı daraltılır + ChatSearchButtonTemel kavramlar
HUD elementi (widget)
HudWidget soyut sınıfı: id (config anahtarı, değişmez), çapa/ofset, scale, enabled, background,
panelShadow, textEffect, radius, backgroundAlpha, colorIndex, favorite, flags.
Alt sınıflar yalnızca contentWidth, contentHeight ve renderContent'i uygular; ölçekten habersizdirler.
Genişlik/yükseklik (içerik + 2·4 px padding) · scale'dir. Çerçeve (gölge, panel, ince kenar) ve ölçek renderAt'ta uygulanır.
Veri tedarikçileri PlumaHud.frameId()'ye göre kare başına en fazla bir kez çalışır. HUD yenileme sınırı açıksa sayaç daha seyrek artar ve
elementler önbellekteki son değerden çizilir.
Modül
PlumaModule: id, simge, enabled, OptionValues options (declareOptions() kurucuda bir kez),
init(), tick(), ownedBy(), active() (= açık ve başka mod sahiplenmemiş), hasPreview()/renderPreview(),
hasCustomPage(), reset(). Ayar sayfası, arama dizini ve config dosyası tamamen beyan edilen seçenek listesinden kurulur.
"Etkin" değerler
Mixin'ler PerfConfig.effective*() okur: kullanıcının ayarı ile AutoPerf'un o anki kademesinin daha sıkı olanı.
Otomatik katman diske yazılmaz.
Ödünç alma sözleşmesi
AutoPerf (görüş mesafesi, varlık ölçeği, bulut) ve FullBright (parlaklık) oyuncuya ait vanilla değerlerini değiştirmeden önce
pluma-perf.json'a park eder; kapanışta, dünyadan çıkışta ve bir sonraki açılışta (CLIENT_STARTED) geri yükler.
Kullanılan Fabric API noktaları
| API | Kullanım |
|---|---|
HudElementRegistry.addLast | pluma:hud katmanı |
HudElementRegistry.replaceElement | SCOREBOARD, BOSS_BAR (taşı/ölçekle), STATUS_EFFECTS/MOB_EFFECTS, CHAT, CROSSHAIR |
WorldRenderEvents.BEFORE_BLOCK_OUTLINE / LevelRenderEvents (26.x) | Blok çerçevesi |
WorldRenderEvents.AFTER_ENTITIES / LevelRenderEvents.COLLECT_SUBMITS (26.x) | Hitbox |
ClientTickEvents.END_CLIENT_TICK | Tüm tick mantığı |
ClientLifecycleEvents.CLIENT_STARTED / CLIENT_STOPPING | Çökme sonrası geri yükleme, kapanışta flush |
ClientPlayConnectionEvents.DISCONNECT | TPS ölçümünü sıfırla |
ScreenEvents.BEFORE_INIT / AFTER_INIT, Screens | Menü değiştirme, köşe simgeleri, sohbet arama düğmesi |
KeyBindingHelper / KeyMappingHelper (26.x) | Tuş kaydı |
Derleme ve Sürümler
Tek kaynak ağacı, Stonecutter ile Minecraft sürümü başına bir jar. Python gerekmez; tüm araçlar Java'dır.
Araç zinciri
| Gradle | Wrapper 9.7.1 (9.5+ şart) · org.gradle.jvmargs=-Xmx2G, org.gradle.parallel=false |
| Stonecutter | dev.kikugie.stonecutter 0.9.8 |
| Loom | dev.kikugie.loom-back-compat 0.4.2 — 1.21.x'te remap'li, 26.x'te remap'siz Loom'u seçer · loomx.loom_version = 1.17-SNAPSHOT |
| Toolchain | org.gradle.toolchains.foojay-resolver-convention 1.0.0 — 26.x için Java 25 kurulu değilse indirir |
| Java | 26.x → 25, 1.21.x → 21 (release, sourceCompatibility ve mixin compatibilityLevel buna göre) |
| Fabric Loader | Geliştirmede 0.19.5, yayınlanan mod en az 0.19.3 beyan eder |
| İsimler | loomx.applyMojangMappings() |
Komutlar
./gradlew buildAll # tüm sürümler → build/libs/<mod.version>/pluma-nova.<version>-<mc>.jar
./gradlew :26.2:build # tek sürüm → versions/26.2/build/libs/
./gradlew :26.2:runClient # geliştirme istemcisi (run/ tüm sürümlerde ortak)
./gradlew :26.2:runHarness # ekranları gezer, FPS/quad ölçer → run/pluma-harness.txt, run/screenshots/harness-*.png, run/harness.jfr
./gradlew :26.2:runShowcase # tanıtım görüntüleri (-PshowcaseView=cherry_grove:90)
./gradlew :26.2:releaseJar # yayın jar'ı; release_stage final değilse hata verir
./gradlew :26.2:genSources # o sürümün decompile kaynakları (mixin hedeflerini doğrulamak için)
java src/client/java/org/klasfimo/pluma/client/hud/HudMath.java # çapa/snap/clamp self-check
java src/client/java/org/klasfimo/pluma/client/perf/AutoPerfMath.java # AutoPerf kademe self-check
java tools/GenerateIcons.java # çizgi ikonlarını (64x64, 16px grid) yeniden üretir
java tools/GenerateLogo.java # branding/logo-source.png → icon.png + brand.png + icons/logo.png + logo-mark.png
Gradle görevleri
| Görev | Nerede | Ne yapar |
|---|---|---|
buildAll | kök | Her sürüm düğümünün collectJar'ına bağlıdır; jar'ları build/libs/<mod.version>/'e toplar |
collectJar | sürüm | O sürümün yayın jar'ını build/collected'a kopyalar |
releaseJar | sürüm | build'e bağlıdır; release_stage != final ise GradleException fırlatır |
runHarness | sürüm | -Dpluma.dev.harness=true ve -XX:StartFlightRecording=filename=harness.jfr,settings=profile,dumponexit=true |
runShowcase | sürüm | -Dpluma.dev.showcase=true, -Dpluma.dev.showcase.view=<showcaseView> |
Sürümleme
Tüm derleme özellikleri stonecutter.properties.toml'dadır:
mod.id = "pluma"
mod.group = "org.klasfimo"
mod.archives_name = "pluma-nova"
mod.version = "1.4.5"
mod.release_stage = "final" # alpha | beta | final
mod.release_build = "0"
mod.codename = "Nova"
deps.fabric_loader = "0.19.5"
deps.fabric_loader_min = "0.19.3"
loomx.loom_version = "1.17-SNAPSHOT"
| Final | Test derlemesi (ör. beta 2) | |
|---|---|---|
| Mod sürümü | 1.4.5+26.2 | 1.4.5-beta.2+26.2 |
| Jar adı | pluma-nova.1.4.5-26.2.jar | pluma-nova.1.4.5-beta.2-26.2.jar |
| Kaynak jar'ı | pluma-nova.1.4.5-26.2-sources.jar | pluma-nova.1.4.5-beta.2-26.2-sources.jar |
Arayüzde (PlumaVersion.label()) | Nova 1.4.5 | Nova 1.4.5 · Beta 2 |
| Yayınlanabilir mi? | Evet (releaseJar) | Hayır, yalnızca test |
Minecraft sürümü semver "build metadata" olarak (+26.2) eklenir; böylece her jar Fabric Loader için aynı yayındır. release_stage
alpha, beta veya final dışında bir şeyse derleme başlamadan hata verir. PlumaVersion sürüm metnini
çalışma anında mod metadatasından okur; menüler, ayar başlığı ve alt bilgi hep aynı metni gösterir.
fabric.mod.json genişletmeleri
| Yer tutucu | Kaynak |
|---|---|
${version} | Proje sürümü (ör. 1.4.5+26.2) |
${minecraft_version} | mod.mc_compat (ör. ~26.1, 1.21.11) |
${loader_min_version} | deps.fabric_loader_min |
${modmenu_version} | deps.modmenu → suggests.modmenu: >=… |
${java_version} | 21 veya 25 → depends.java |
${codename}, ${stage} | Açıklamaya ve custom.pluma:codename / pluma:stage'e |
Mixin config'inde ${java} → JAVA_21 / JAVA_25. Her jar'a LICENSE_pluma-nova.txt ve THIRD_PARTY_NOTICES.md eklenir.
Sürüm matrisi
Proje adı jar adına, ikinci argüman derlenen Minecraft'a gider (version("26.1", "26.1.2")).
| Düğüm | Derlenen MC | mc_compat | Fabric API | Mod Menu | Lithium | FerriteCore | ImmediatelyFast |
|---|---|---|---|---|---|---|---|
| 1.21.6 | 1.21.6 | 1.21.6 | 0.128.2 | 15.0.2 | 0.17.0 XWGBHYcB | 8.0.4 LdlksamY | 1.10.3 9JPEk4KN |
| 1.21.7 | 1.21.7 | 1.21.7 | 0.129.0 | 15.0.2 | 0.18.0 77EtzYFA | 8.0.4 LdlksamY | 1.11.2 WbU84LUp |
| 1.21.8 | 1.21.8 | 1.21.8 | 0.136.1 | 15.0.2 | 0.18.1 qxIL7Kb8 | 8.0.4 LdlksamY | 1.12.6 zihthChu |
| 1.21.10 | 1.21.10 | 1.21.10 | 0.138.4 | 16.0.1 | 0.20.1 NsswKiwi | 8.1.0 bPLllEgi | 1.13.6 9hztj0xA |
| 1.21.11 | 1.21.11 | 1.21.11 | 0.141.6 | 17.0.0 | 0.21.4 Ow7wA0kG | 8.2.0 Ii0gP3D8 | 1.14.3 4EwhsTu7 |
| 26.1 | 26.1.2 | ~26.1 | 0.155.3 | 18.0.1 | 0.24.7 Oqq8TOAV | 9.0.0 d5ddUdiB | 1.15.3 xOA9hbpf |
| 26.2 | 26.2 | ~26.2 | 0.160.0 | 20.0.2 | 0.25.3 f7vZ0VWU | 9.0.0 d5ddUdiB | 1.16.4 vkW9vHhp |
Gri kodlar Modrinth sürüm kimlikleridir. Sürüm numaraları yükleyiciler arasında tekrar edebildiği için tam olarak tek bir dosyayı adlandıran kimlikler kullanılır.
Bağımlılıklar
minecraft("com.mojang:minecraft:${sc.current.version}")
loomx.applyMojangMappings()
modImplementation("net.fabricmc:fabric-loader:${prop("deps.fabric_loader")}")
modImplementation("net.fabricmc.fabric-api:fabric-api:${prop("deps.fabric_api")}")
modCompileOnly("com.terraformersmc:modmenu:${prop("deps.modmenu")}") // jar'a girmez
modLocalRuntime("com.terraformersmc:modmenu:${prop("deps.modmenu")}") // yalnızca dev istemcide
include(modRuntimeOnly("maven.modrinth:lithium:${prop("deps.lithium")}")!!)
include(modRuntimeOnly("maven.modrinth:ferrite-core:${prop("deps.ferritecore")}")!!)
include(modRuntimeOnly("maven.modrinth:immediatelyfast:${prop("deps.immediatelyfast")}")!!)
- Depolar
exclusiveContentile daraltılmıştır: Terraformers yalnızcacom.terraformersmc, Modrinth Maven yalnızcamaven.modrinthgrubu için. - Gömülü modlar dev istemcide de çalışır; böylece harness oyuncuların aldığıyla birebir aynı kurulumla ölçer.
- Mod Menu giriş noktası Mod Menu tarafından yüklenir; Mod Menu yoksa
PlumaModMenusınıfına hiç dokunulmaz.
Neden 1.21.x'te yama başına jar?
Gömülü Lithium tam olarak tek bir Minecraft sürümü beyan eder; iç içe bir modun bağımlılığı tutmazsa Fabric Loader oyunu açmaz. 26.1 jar'ı 26.1–26.1.2'yi
kapsar çünkü o Lithium ~26.1 beyan eder.
Yayın süreci
stonecutter.properties.toml'damod.version'ı güncelle,mod.release_stage = "final"yap.CHANGELOG.md,README.md/README.tr.mdve wiki sayfalarını güncelle../gradlew buildAllile tüm jar'larıbuild/libs/<sürüm>/'e topla; sürüm başınareleaseJarfinal olmayanı reddeder.- Jar'lar için
SHA256SUMS.txtüret. - Jar'ları ve
SHA256SUMS.txt'yiklasfimo/P-LUMA-Nova-Wikideposundav<sürüm>etiketli bir GitHub Release'e yükle.
Commit, push ve yayın işlemleri proje sahibine aittir; otomasyon (ör. yapay zekâ asistanı) dosyaları hazırlar ve çalıştırılacak komutları söyler.
Çoklu Sürüm Uyumu
src/ her zaman 1.21.11 için yazılı durur. Diğer sürümlerin kaynağı derlemede
versions/<ad>/build/generated/stonecutter/ altına üretilir. Sürüme göre değişen kod üç yoldan biriyle yazılır.
stonecutter active "1.21.11" ve vcsVersion = "1.21.11" sabittir. Çalışma kopyası başka bir sürüme çevrilip commit'lenirse tüm
koşullu bloklar ters döner.
Yol 1 — Yalnızca isim değiştiyse: replacements
stonecutter.gradle.kts içinde düz metin değiştirmeleri. Anahtarlar başka bir anahtarın içinde geçmeyecek şekilde seçilir; böylece dönüşüm tersine çevrilebilir kalır.
| Koşul | 1.21.11 kaynağında | Diğer sürümde |
|---|---|---|
| ≥ 1.21.9 | org.klasfimo.pluma.client.compat.input. | net.minecraft.client.input. |
mouseClicked(double clickX, double clickY, int clickButton) { MouseButtonEvent click = new … (ve onClick, onDrag, mouseDragged, mouseReleased, keyPressed benzerleri, super.* çağrıları) | mouseClicked(MouseButtonEvent click, boolean doubled) vb. | |
MultiBufferSource queue, int light | SubmitNodeCollector queue, int light | |
| ≥ 1.21.11 | ResourceLocation | Identifier |
key.location() | key.identifier() | |
net.minecraft.client.renderer.RenderType; | …rendertype.RenderTypes; | |
RenderType.lines(), RenderType.debugFilledBox() | RenderTypes.lines(), RenderTypes.debugFilledBox() | |
net.minecraft.world.level.GameRules; | …level.gamerules.GameRules; | |
BlockGetter area | Level area | |
| ≥ 26.1 | GuiGraphics | GuiGraphicsExtractor |
context.drawString( / renderItem( / renderItemDecorations( | context.text( / item( / itemDecorations( | |
void renderWidget(, super.renderWidget( | void extractWidgetRenderState(, super.extractWidgetRenderState( | |
public void render(, super.render(, void renderBackground(, .widget().render(, original.render( | extractRenderState / extractBackground karşılıkları | |
renderPanorama(context, renderBlurredBackground(context | extractPanorama(context, extractBlurredBackground(context | |
components.PlayerFaceRenderer, PlayerFaceRenderer.draw( | components.PlayerFaceExtractor, PlayerFaceExtractor.extractRenderState( | |
VanillaHudElements.STATUS_EFFECTS | VanillaHudElements.MOB_EFFECTS | |
net.minecraft.client.GuiMessage (nokta ve eğik çizgi biçimi) | net.minecraft.client.multiplayer.chat.GuiMessage | |
| ≥ 26.2 | "renderArmWithItem" | "submitArmWithItem" |
Yol 2 — Çağrı veya yer değiştiyse: Mc yardımcıları
client/compat/Mc, sürümler arasında adı ya da yeri değişen her Minecraft/Fabric çağrısını tek yerde toplar. Kodun geri kalanı her sürümde aynı kalır.
| Yardımcı | 1.21.11 | Farklılık |
|---|---|---|
screen(), setScreen(s) | mc.screen, mc.setScreen | 26.2: mc.gui.screen(), mc.gui.setScreen |
chat(), bossOverlay() | mc.gui.getChat(), getBossOverlay() | 26.2: mc.gui.hud.* |
flushChatQueue() | getChatListener().flushQueue() | <1.21.9: clearQueue(); 26.2: gui.chatListener() |
chatScreen() | new ChatScreen("", false) | <1.21.9: tek argüman |
disconnectFromWorld(reason) | mc.disconnectFromWorld | <1.21.9: PauseScreen.disconnectFromWorld(mc, …) |
debugCrosshair() | debugEntries.isCurrentlyEnabled(THREE_DIMENSIONAL_CROSSHAIR) | <1.21.9: debug overlay + reduced debug info kontrolü |
overlay(), mainRenderTarget(), mainCamera() | getOverlay(), getMainRenderTarget(), gameRenderer.getMainCamera() | 26.2: gui.overlay(), gameRenderer.mainRenderTarget()/mainCamera() |
cameraForward(camera) | camera.forwardVector() | <1.21.11: getLookVector() |
setHudHidden(b) | options.hideGui | 26.2: gui.hud.toggle() |
actionBar(msg), clientMessage(msg) | displayClientMessage(msg, true), chat().addMessage | 26.1+: sendOverlayMessage, addClientSystemMessage |
dayTime(level) | level.getDayTime() | 26.1+: getOverworldClockTime() |
teamSidebar(team) | DisplaySlot.teamColorToSlot(team.getColor()) | 26.2: team.getColor().map(c -> c.displaySlot()) |
optionsScreen(parent, inWorld) | new OptionsScreen(parent, options) | 26.1+: inWorld argümanı |
registerKey(key) | KeyBindingHelper.registerKeyBinding | 26.1+: KeyMappingHelper.registerKeyMapping |
windowHandle(), isKeyDown(key) | getWindow().handle(), InputConstants.isKeyDown(window, key) | <1.21.9: getWindow().getWindow(), handle ile |
baseLineWidth(), lineWidth(v, w) | getAppropriateLineWidth(), setLineWidth | <1.21.11: 1.0 ve işlem yok (vertex başına kalınlık yok) |
widgets(screen) | Screens.getButtons | 26.1+: Screens.getWidgets |
client/compat/input, 1.21.9 öncesi için vanilla MouseButtonEvent/KeyEvent ile aynı adlı kayıtlar (record) sağlar;
ekranların olay işleyici gövdeleri tıklamaları her sürümde aynı biçimde okur.
Yol 3 — Gövde değiştiyse: koşullu bloklar
//? if >=26.1 {
/*LevelRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, outline) -> { ... });
*///?} else if >=1.21.10 {
WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, outline) -> { ... });
//?} else {
/*WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, hit) -> { ... });
*///?}
Etkin olmayan dal /* */ içindedir; Stonecutter derlemede hedef sürüme göre yorumları açar/kapatır. Mixin'ler, blok çerçevesi/hitbox render yolları,
harness dünya ayarları ve PlumaKeys bu yolu kullanır.
Sürümler arası farklar
| Konu | 1.21.6–1.21.8 | 1.21.10 | 1.21.11 | 26.1 | 26.2 |
|---|---|---|---|---|---|
| GUI çizim tipi | GuiGraphics | ← | ← | GuiGraphicsExtractor | ← |
| Girdi | (double, double, int) | MouseButtonEvent/KeyEvent | ← | ← | ← |
| Tuş kategorisi | String | KeyMapping.Category | ← | ← | ← |
| Kaynak kimliği | ResourceLocation | ← | Identifier | ← | ← |
| Dünya render olayı | v1.WorldRenderEvents (hit result) | v1.world.WorldRenderEvents | ← | v1.level.LevelRenderEvents | ← (yalnız submitNodeCollector) |
| Çizgi kalınlığı | yok | yok | vertex başına | ← | ← |
| Açık ekran / sohbet | mc.screen, gui.getChat() | ← | ← | ← | gui.screen(), gui.hud.getChat() |
| Zoom FOV kancası | GameRenderer.getFov | ← | ← | Camera.calculateFov | ← |
| Serbest bakış kancası | Camera.setup (BlockGetter) | ← | Camera.setup (Level) | Camera.alignWithEntity | ← |
| El render | renderArmWithItem(… MultiBufferSource …) | (… SubmitNodeCollector …) | ← | ← | submitArmWithItem |
| Blok varlığı culling | BlockEntityRenderDispatcher.render | tryExtractRenderState | ← | ← | + boolean |
| Tabela yazısı | renderSignText | submitSignText(…, boolean front) | ← | submitSignText(…, SignText) | ← |
| Ters nişangah hattı | 1.21.6'da yok (beyaz) | GUI_INVERT | ← | ← | ← |
| Atlas alt bölge yükleme | var | ← | ← | ← | yok (tüm atlas yüklenir) |
Yeni Minecraft sürümü eklemek
settings.gradle.kts'eversion("<ad>", "<mc>")ekle.stonecutter.properties.toml'a o sürümün bloğunu ekle:mod.mc_compat,mod.mc_releases,deps.fabric_api,deps.modmenuve gömülü modların Modrinth sürüm kimlikleri../gradlew :<ad>:genSourcesile decompile kaynaklarını üret; her mixin hedefini (metot adı, descriptor, handler parametre tipleri) o sürümde ayrı doğrula.- Kırılan yerleri üç yoldan biriyle çöz: isim değişikliği → replacements; çağrı →
Mc; gövde →//? if. ./gradlew :<ad>:runHarnessile ekranları gez ve rapora bak; Fabric API'de gerekli render olaylarının olduğundan emin ol (1.21.9 bu yüzden yok).
Render Katmanı
Draw, ShapeAtlas, Theme, Motion ve Icons: P-LUMA'nın tüm arayüz çizimi bu beş sınıfın üzerine kuruludur.
Neden bir şekil atlası?
1.21.11'de her GuiGraphics.fill ayrı bir render-state nesnesidir ve GuiRenderState her yeni nesneyi mevcut katmanlardaki nesnelerle
kesişim testinden geçirerek yerleştirir. Yani bir karenin maliyeti şekil sayısının karesiyle büyür. Eski Draw her eğriyi fiziksel satır
başına bir fill ile tarıyordu; GUI ölçeği 3'te bir ekran binlerce nesne üretiyor, HUD düzenleyici ~10 FPS'e düşüyordu.
Tüm şekil çizimi Draw üzerinden, framebuffer uzayında ve ShapeAtlas ile yapılır: şekil başına sabit sayıda quad,
hepsi tek doku / tek pipeline. Satır satır fill ile tarama yapma.
ShapeAtlas
- Çalışma anında üretilen tek bir
DynamicTexture: 1024'ten başlar, 4096 tavanına kadar ikiye katlanır. - Girdi anahtarı
(tür, fiziksel yarıçap, kalınlık/bulanıklık). Türler: dolgu köşesi, halka köşesi, gölge köşesi. - Maskeler beyazdır, kapsama alfadadır; renk vertex tint'inden gelir. 4×4 süper örnekleme ile rasterlenir.
- Raf (shelf) paketleme, girdiler arasında 2 texel boşluk (en yakın örneklemede kenar taşmasın), yeni girdi için yalnızca alt bölge yüklenir (26.2'de tüm atlas).
- 4×4'lük tam opak beyaz bir blok "solid" bölgedir; düz kısımlar onun merkez texel'ini germe ile çizilir, böylece köşelerle aynı doku/pipeline'da kalır.
- Nesiller: büyüme yeni bir kimlikle (
pluma:dynamic/shapes_N) yeni bir doku açar; önceki nesil bir sonraki büyümeye kadar yaşar ki bu kare kuyruğa girmiş quad'lar kapanmış bir dokuyu göstermesin. Tavanda büyüme aynı boyutta yeni nesil açar ve önbellek boşalır (GUI ölçeği değişince eski girdiler böyle temizlenir). - Gölge köşesinin son satırı/sütunu düz kenarın düşüş profilidir; kenarlar bunu tekrar kullanır.
Draw
Şekiller fiziksel piksel matrisinde çizilir: bir GUI pikseli scaleFactor fiziksel piksel olduğu için GUI uzayında basamaklanan bir eğri
ekranda 2–3 px'lik bloklar hâlinde basamaklanırdı. Her şekil kendisi için matrisi 1/ölçek küçültür ve biter bitmez geri alır.
| Metot | Quad | Not |
|---|---|---|
roundedRect | 7 (yarıçap 0'da 1) | 4 köşe + 3 span |
roundedOutline | 8 | Kalınlık GUI pikseli (her ölçekte aynı ağırlık), yalnızca eğri fiziksel çözünürlükte basamaklanır |
shadow | 9 | 6 GUI px yayılım, 1 px aşağı, güç 1'de tepe alfa 48/255, karesel düşüş |
panel | 24 | shadow + roundedRect + roundedOutline |
roundedGradient | ≤ 14 | Soldan sağa; köşeler kenar renginde, ortada en fazla 8 dilim |
verticalGradient | 1 | Tek vanilla fillGradient |
- Negatif bölge genişliği/yüksekliği örneği aynalar: tek bir sol-üst köşe maskesi dört köşeye yeter.
pushBatch/popBatchölçek faktörünü batch başına bir kez okur ve iç içe güvenle çalışır. Matrise dokunmaz. 1.4.4 öncesinde batch matrisi küçültüyordu; şekiller bunu telafi ediyor ama metin/ikon/eşya etmiyordu → GUI ölçeği 3'te HUD içeriği üçte bir boyutta çıkıyordu.drainQuadCount()son çağrıdan beri üretilen quad sayısını döndürür ve sıfırlar; harness kare başına quad ölçer.- Yardımcılar:
withAlpha(argb, çarpan),alpha(argb, 0–255),lerpColor(a, b, t).
Theme — tasarım token'ları
Renk, köşe yarıçapı, boşluk, kontrol yüksekliği ve geçiş süresi yalnızca Theme.java'dadır; hiçbir yerde sabit kodlanmış renk yoktur.
Yüzeyler ve metin
Accent ve durum
| Token | Değer | Kullanım |
|---|---|---|
BORDER / BORDER_STRONG | beyaz %10 / %20 | İnce kenar; hangi yüzeydeyse "bir ton açık" okunur |
HUD_LABEL | #B8FFFFFF | HUD etiketleri: gri yerine alfalı beyaz, karda/gökyüzünde kaybolmaz |
TEXT_OUTLINE | #FF000000 | Kontur metin efekti |
SCRIM | #B3000000 | Canlı oyun üstündeki tam ekran karartma |
TRACK, SCROLL_TRACK, SCROLL_THUMB | beyaz %12 / %6 / %35 | Kaydırıcı rayı, kaydırma çubuğu |
EDITOR_HOVER | beyaz %45 | Düzenleyicide üzerine gelinen element |
PREVIEW_DARK / PREVIEW_LIGHT | #05070B / #C9D4DF | Önizleme zeminleri |
SWATCHES | 8 renk | HUD elementi paleti (colorIndex 0–7) |
PICKER_COLORS | 10 renk | Modül renk seçenekleri: beyaz, gri, siyah + ilk 7 palet rengi; accent yok |
Boyutlar ve hareket
| Token | Değer |
|---|---|
RADIUS_NONE / SM / MD / LG | 0 / 2 / 3 / 4 px — çip/giriş 2, düğme 3, kart/çerçeve 4, çubuklar 0. Hap şekli (height/2) kullanılmaz. |
RADII, HUD_RADIUS | HUD elementi adımları {0, 2, 4}; varsayılan 2 |
SPACE_1…6 | 4 / 8 / 12 / 16 / 24 px (4 px taban birim) |
CONTROL_HEIGHT, MENU_BUTTON_HEIGHT, ICON_BUTTON | 18 / 20 / 16 px |
SIDEBAR_ROW, ROW_HEIGHT, CONTROL_PAD_X | 22 / 32 / 10 px |
SCALE_STOPS | 0.5, 0.75, 1, 1.25, 1.5, 2, 3 |
MOTION_SCREEN_IN / OUT | 180 / 120 ms |
MOTION_GUIDE_IN / OUT, MOTION_TOGGLE, MOTION_HOVER, MOTION_HOVER_FADE | 80 / 120, 120, 100, 90 ms |
MOTION_SHIFT, MOTION_PAGE_SHIFT | 4 / 8 px dikey kayma |
Motion
progress(start, süre) 0→1, easeOut (kübik), easeIn (karesel), approach(şimdiki, hedef, delta, süre) ve
reduced() (= PerfConfig.reduceMotion). Hareket yalnızca bir kullanıcı eylemine yanıt verir; hiçbir şey kendi başına döngüye girmez.
Kontroller kare hızından bağımsız Controls.Fade kullanır; hedef değişmedikçe iş yapmaz.
Icons
- 34 çizgi simgesi:
logo, gear, sliders, grid, gauge, monitor, search, close, chevron_left/right/down, heart, play, user, users, exit, move, reset, resize, crosshair, zoom, hitbox, cube, trophy, sword, keyboard, inventory, layers, chat, shield, sun, eye, plus, trash. - Diskte 64×64, arayüzde 16 GUI pikseli: GUI piksel başına 4 texel, böylece ölçek 3–4'te bile fiziksel piksel başına bir texel kalır.
- Her PNG yanında
blur: true, clamp: trueiçeren bir.png.mcmetataşır; doğrusal filtreleme olmadan Minecraft her dördüncü texel'i örnekler. - Simgeler beyazdır,
Icons.draw(..., color)ile renklendirilir.logo.pngdışındakilertools/GenerateIcons.java'nın çıktısıdır. brand.png(şövalye kaskı, tam renk, şeffaf) 64×64'tür ve her zaman doğal boyutunda (20 px) çizilir: Minecraft gevşek GUI dokularını mipmap'ler, küçültme fotoğrafik logoyu bozar.
Mixin Referansı
20 mixin; hepsi @Inject (+ @Accessor/@Shadow). Hedefler 1.21.11 Mojang isimleriyle; sürüm farkları not edildi.
Yapılandırma
{
"required": true,
"minVersion": "0.8",
"package": "org.klasfimo.pluma.mixin.client",
"plugin": "org.klasfimo.pluma.mixin.PlumaMixinPlugin",
"compatibilityLevel": "${java}", // JAVA_21 veya JAVA_25
"client": [ ... 20 mixin ... ],
"injectors": { "defaultRequire": 1 },
"overwrites": { "requireAnnotations": true }
}
defaultRequire: 1: bir enjeksiyon hedefini bulamazsa açılışta hata verir; sessizce çalışmayan bir kanca olmaz.
Tüm mixin'ler
| Mixin | Hedef | Kanca | Ne yapar |
|---|---|---|---|
EntityRenderManagerMixin | EntityRenderDispatcher.shouldRender | HEAD, iptal edilebilir | Varlık ve eşya/XP küresi mesafe culling. Oyuncular ve kamera varlığı muaf. |
NameTagRenderMixin | EntityRenderer.shouldShowName | HEAD | İsim etiketi mesafesi ve kamera tabanlı bakış konisi (FOV + en-boy köşegeni + 15°) |
BlockEntityRenderManagerMixin | BlockEntityRenderDispatcher.tryExtractRenderState | HEAD → null | Blok varlığı mesafe culling. 26.2: ek boolean parametre; <1.21.9: render HEAD iptal |
SignTextMixin | AbstractSignRenderer.submitSignText | HEAD | Uzak tabelanın yazısı. <1.21.9: renderSignText |
ParticleManagerMixin | ParticleEngine.add(Particle), tick | HEAD, HEAD | Tick başına parçacık bütçesi (tick'te sıfırlanır) |
WorldRendererMixin | LevelRenderer.addWeatherPass, addSkyPass | HEAD | Hava ve gökyüzü geçişlerini atla |
SplashOverlayMixin | LoadingOverlay.<clinit> | TAIL | BRAND_BACKGROUND tedarikçisini siyahla değiştirir (@Mutable @Shadow @Final) |
SimpleOptionAccessor | OptionInstance.value | @Accessor | Doğrulayıcıyı atlayarak parlaklık yazma (tam parlaklık) |
ChatHistoryMixin | ChatComponent.addMessageToQueue, addMessageToDisplayQueue | @ModifyConstant(100) | Sohbet geçmişi sınırı → effectiveChatHistory() |
ChatHudMixin | ChatComponent.addMessage(Component, MessageSignature, GuiMessageTag), clearMessages | HEAD, HEAD | Başarım sohbet satırlarını gizle; bağlantı kesilirken sohbeti koru. 26.1+: addMessage ek GuiMessageSource |
ChatHudAccessor | ChatComponent.allMessages | @Accessor | Sohbet araması için mesaj listesi (en yeni önce) |
ChatScreenAccessor | ChatScreen.input, initial | @Accessor | Giriş satırını daralt; Shift+tık metnini geri yaz |
BossBarHudAccessor | BossHealthOverlay.events | @Accessor | Boss çubuğu sayısı (vekil kutusu için) |
ClientPlayNetworkHandlerMixin | ClientPacketListener.handleSetTime | TAIL | TPS ölçümü. HEAD olsaydı ağ thread'inde de çalışıp her paketi iki kez sayardı |
GameRendererMixin | GameRenderer.getFov (yalnızca changingFov) | RETURN | Zoom FOV'u. 26.x: @Mixin(Camera), calculateFov |
MouseMixin | MouseHandler.turnPlayer, onScroll | HEAD, HEAD | Zoom hassasiyeti; zoom sırasında tekerlek |
HeldItemRendererMixin | ItemInHandRenderer.renderArmWithItem | HEAD / RETURN | Zoom'da eli gizle; ViewModel dönüşümü (push/pop). 26.2: submitArmWithItem |
CameraMixin | Camera.setup → setRotation(FF)V ordinal 0 ve 1 | INVOKE, AFTER | Serbest bakış kamera açısı. Ordinal 2 (ön görünüm çevirisi) dokunulmaz. 26.x: alignWithEntity |
EntityLookMixin | Entity.turn | HEAD, iptal edilebilir | Serbest bakışta fare hareketini yerel oyuncu yerine kameraya yönlendir |
ToastManagerMixin | ToastManager.addToast | HEAD, iptal edilebilir | Başarım/tarif bildirimi kuyruğa hiç girmez (sesi de çalmaz) |
PlumaMixinPlugin
Aynı özelliği sahiplenen başka bir mod kuruluysa ilgili mixin'i hiç uygulamaz; iki mod aynı bytecode için yarışmaz. Karar sınıf dönüştürme anında,
kurulu mod listesinden bir kez verilir ve çalışma anı kurallarıyla (perf/ModCompat) senkron tutulur.
| Mixin | Şu modlardan biri yüklüyse atlanır |
|---|---|
ChatHistoryMixin | morechathistory, chatpatches, nochatreset, dont-clear-chat-history |
GameRendererMixin, MouseMixin | ModCompat.ZOOM_MODS: zoomify, ok_zoomer, logical_zoom, wi_zoom |
CameraMixin, EntityLookMixin | ModCompat.FREELOOK_MODS: freelook, perspective, perspectivemod, perspective_mod |
Kurallar
@Overwriteve@Redirectyok. Diğer modlarla uyum şart. Tek istisnaChatHistoryMixin'in@ModifyConstant'ı.@Redirectayrıca şu nedenle yasak: Loomat = @At(...)'yı tek elemanlı bir diziye derler ve Fabric Loader 0.19.3 ile gelen MixinExtras 0.5.4 bu üyeyi doğrudan tek bir annotation düğümüne cast eder; moddaki herhangi bir@Redirecto loader'da oyunu açılışta çökertirdi. (0.5.5 düzeltti; düzeltmeye bağımlı olmamak daha iyi.)SplashOverlayMixinbu yüzden yönlendirme yerine alan değişimidir.- Yeni kanca: HEAD/RETURN
@Inject+ bir ayar kapısı +pluma$öneki +pluma.client.mixins.jsonkaydı. - Hedef (metot adı, descriptor, handler parametre tipleri) her sürümde ayrı
./gradlew :<sürüm>:genSourcesile doğrulanır. Handler parametreleri hedefle birebir aynı tipte olmalı; üst tip kabul edilmez (Camera.setup'ınBlockGetter→Leveldeğişimi bu yüzden replacements'ta). - Aynı metotta birden fazla davranış (ör. eli gizleme + ViewModel) tek bir HEAD/RETURN çiftinde birleştirilir; iptal edilen çağrı hiçbir zaman matris yığınına push yapmamalı,
@Uniquesayaç RETURN'e pop edecek bir şey olup olmadığını söyler.
Arayüz Bileşenleri
Controls içindeki kontroller ve ayar merkezinin (PlumaSettingsScreen) kuruluş mimarisi.
Kontroller
| Sınıf | Görünüm ve davranış |
|---|---|
Button | İsteğe bağlı öncü simge. Stiller: PRIMARY (parlak nötr dolgu), SECONDARY (koyu dolgu + ince kenar), GHOST (hover'a kadar dolgusuz), SUCCESS (yeşil "açık"), MUTED (gri "kapalı"). fitWidth(label, icon), leftAlign(), labelColor(), iconColor(), radius() |
Slider | Solda etiket (+açıklama), 48 px'lik sabit değer çipi, ardından 3 px'lik düz ray ve 8 px topuz. Değer çipi sabit olduğu için yoğun iki sütunlu sayfada sayı hiç kaymaz. |
Toggle | 24×13 anahtar; kapalı nötr gri, açık yeşil, topuz easeOut ile kayar |
Chip | Süzgeç çipi; aktif parlak nötr dolgu + güçlü kenar |
Segmented | Açılır menü yerine yan yana seçenekler. İsimler sığmazsa etiket üste çıkar ve şerit tüm genişliği alır; bir seçenek asla "Cros" diye kesilmez. |
IconButton | Kare simge düğmesi; active(), tint(), framed(false) (kalp gibi durumunu glifte gösteren) |
KeyButton | Tuş atama çipi. Tıklanınca dinler; bir tuş veya orta/sağ/yan fare tuşu atar, Esc kaldırır, sol tık iptal eder. Aynı anda yalnızca bir düğme dinler; ekran önce capture/captureMouse'a sormalı. |
TextInput | Vanilla EditBox'ın tüm düzenleme davranışı (seçim, pano, imleç), yalnızca kutusu P-LUMA görünümünde; placeholder |
Swatch | Palet rengi; seçili beyaz halka, hover soluk halka |
- Açıklama satırları tam boyuttadır (
SMALL_SCALE = 1.0). Bir zamanlar 0,8'di; Minecraft'ın piksel fontu kesirli ölçekte bozulur. Hiyerarşi yalnızca renkle kurulur. Sığmayan açıklama "…" ile kısaltılır ve tam metin araç ipucuna asılır (kurulumda bir kez, her karede değil). - Odak halkası (
focusRing): klavye odağındaki kontrolün etrafında 1 px accent çerçeve. - Tüm kontroller erişilebilirlik için anlatım (narration) metni üretir.
Ayar merkezi mimarisi
İki geçiş: kurma ve çizme
rebuild() sayfayı kurar: etkileşimli kontrolleri yerleştirir ve bunu yaparken statik mobilyayı (bölüm başlıkları, etiketler, notlar) labels listesine kaydeder.
render() bu etiketleri kaydedilen konumlarda çizer. İki geçiş aynı koordinatları aynı koddan okuduğu için kaydırırken bir kontrol başlığından asla kaymaz.
Kaydırmada rebuild yok
- Sayfa bir kez,
scroll = 0koordinatlarıyla kurulur. Kaydırılabilir alana eklenen her kontroladdContentile eklenir (widget + taban Y kaydı). - Her kare
animateScroll()hedefe üstel olarak yaklaşır (1 - e^(-Δ/52), ~120 ms'de %90),applyScroll()her kontrolün Y'sini ve görünürlüğünü günceller. - İçerik viewport scissor'ı içinde elle çizilir. Viewport dışına düşen tıklamalarda kaydırılabilir kontroller geçici olarak pasifleştirilir; yarısı görünen bir kontrolün gizli yarısı başlığın üstünden tıklanamaz.
- Sayfa girişi 8 px'lik kayma, matrisle değil kaydırma ofsetine katlanarak yapılır; animasyon sırasında da çizim ve tıklama aynı yerdedir.
- Eskiden her tekerlek çentiği tüm kontrolleri yeniden yaratıyor (ve her araç ipucunu yeniden ölçüyordu); yumuşak kaydırmayı imkânsız kılan buydu.
render()veya bir olay işleyicisi içinderebuild()doğrudan çağrılmaz;needsRebuild = trueişaretlenir ve bir sonraki karenin başında kurulur. Yazı yazılan arama alanları rebuild'den sağ çıkar ve odağını korur.
Form
İç sınıf Form satırları bir veya iki sütuna yerleştirir: section (katlanabilir başlık, yeni satır ızgarası), toggle, slider,
segmented, button, swatches, colors, keyBind, compat (uyumluluk satırı), macroRow,
note (sarılan metin), gap (render geçişinin kendisi çizeceği boşluk, ör. otomatik FPS şeridi), wide (renk paleti ve 3'ten fazla seçenekli seçimleri tam genişliğe alır).
Modül sayfası otomatik kurulumu
switch (option.kind()) {
case TOGGLE -> form.toggle(label, desc, values.on(key), v -> set(key, v ? 1 : 0));
case SLIDER -> form.slider(label, desc, min, max, values.get(key), v -> option.format(option.clamp(v)), v -> set(key, v));
case CHOICE -> form.segmented(label, desc, option.choiceLabels(), () -> values.integer(key), i -> set(key, i));
case COLOR -> form.colors(label, () -> values.color(key), c -> set(key, c));
case KEY -> form.keyBind(label, desc, values.integer(key), code -> set(key, code));
}
Yani yeni bir modülün ayar sayfası, arama girdileri ve config serileştirmesi yalnızca declareOptions()'dan gelir.
Menü kabuğu
PlumaMenuScreen iki menünün ortak kabuğudur: arka plan (alt sınıf), dikey karartma, logo, tek sütun düğme (180 px, 20 px yükseklik, 4 px aralık), hesap çipi,
köşe simgeleri (18 px), alt bilgi ve giriş animasyonu. GUI ölçeği 4'te ~200 px yükseklik kaldığı için sütun genişliği min(180, width-40)'a, düğme yüksekliği 12 px'e kadar küçülebilir;
logo konumundan önce boyutundan vazgeçer. Dar pencerede hesap çipi köşe düğmelerine yer açmak için gizlenir.
Genişletme Rehberi
Yeni HUD elementi, modül, performans ayarı, simge veya çeviri eklemenin adım adım yolları. Çoğu tek satırlık bir kayıtla başlar; geri kalanı otomatik gelir.
Yeni HUD elementi
Yeni element = PlumaHud.WIDGETS içinde tek satır. Düzenleyici, ayar sayfası, arama ve config otomatik gelir.
new TextWidget("altitude", "pluma.widget.altitude.label", "pluma.widget.altitude.desc",
PlumaHud::altitudeLines).at(START, 2, START, 222).defaults(false, 5).plain(),
private static List<TextWidget.Line> altitudeLines() {
Minecraft mc = Minecraft.getInstance();
if (mc.player == null) {
return List.of(); // veri yoksa element çizilmez
}
return List.of(new TextWidget.Line(tr("pluma.data.altitude"), String.format("%.0f", mc.player.getY())));
}
at(çapaX, ofsetX, çapaY, ofsetY): gönderilen konum. Sağa/alta çapalı ofset negatiftir. Mevcut sütunlarla çakışmayacak bir yer seç (tek satır 17 px, iki satır 28 px).defaults(açık, renkIndeksi):-1accent'i izler, 0–7 palet.plain(): panelsiz + konturlu metin (kısa göstergeler için).solid(): %90 opak panel (bileşik elementler için).idconfig anahtarıdır; bir kez yayınlandıktan sonra asla değiştirme.- Dil anahtarları:
pluma.widget.<id>.label,pluma.widget.<id>.desc(hemen_us.jsonhemtr_tr.json).
Bileşik element
HudWidget'tan türet; contentWidth, contentHeight, renderContent'i uygula. İçerik ölçekten habersizdir ve padding'in içinden (0,0)'dan başlar.
Veriyi PlumaHud.frameId()'ye göre önbelleğe al. Metni drawHudText ile çiz ki elementin metin efekti uygulansın. Şekiller için yalnızca Draw kullan.
Seçenekler için declaredFlags()'ı geçersiz kıl:
@Override
public List<Flag> declaredFlags() {
return List.of(new Flag("compact", "pluma.flag.compact", false));
}
// renderContent içinde: if (flag("compact")) { ... }
Yeni modül
Yeni modül = PlumaModules.MODULES içinde tek satır + sınıfı. Ayar sayfası, arama ve config seçenek beyanından kurulur.
public final class AutoSprintModule extends PlumaModule {
private static final String ID = "auto_sprint";
AutoSprintModule() {
super(ID, Icons.Icon.PLAY, false); // id, simge, varsayılan açık mı
}
@Override
protected List<Option> declareOptions() {
return List.of(
Option.toggle(ID, "only_forward", true),
Option.slider(ID, "delay", 0, 20, 1, 0, " tick"),
Option.choice(ID, "mode", 0, "hold", "toggle"),
Option.color(ID, "indicator", Theme.TEXT),
Option.keyBind(ID, "key", Option.UNBOUND)
);
}
@Override
public void init() {
// olayları, tuşları, HUD kancalarını burada kaydet (client init sırasında bir kez)
}
@Override
public void tick(Minecraft client) {
if (!active()) {
return; // her kanca active()'i kontrol eder
}
// options.on("only_forward"), options.integer("delay"), options.color("indicator") ...
}
}
public static final AutoSprintModule AUTO_SPRINT = new AutoSprintModule();
public static final List<PlumaModule> MODULES = List.of(
CROSSHAIR, BLOCK_OVERLAY, HITBOX, ZOOM, FREE_LOOK, FULL_BRIGHT, VIEW_MODEL, DISABLE_ACHIEVEMENTS,
COMMAND_MACROS, AUTO_SPRINT); // sıra = ayar sayfası sırası
Dil anahtarları
"pluma.module.auto_sprint.label": "Otomatik koşma",
"pluma.module.auto_sprint.desc": "İleri basınca koşar",
"pluma.option.auto_sprint.only_forward": "Yalnızca ileri",
"pluma.option.auto_sprint.only_forward.desc": "Yana giderken koşmaz",
"pluma.option.auto_sprint.mode.hold": "Basılı tut",
"pluma.option.auto_sprint.mode.toggle": "Aç/kapa"
İsteğe bağlı
- Sahiplik: aynı işi yapan modlar varsa
ownedBy()'yuModCompat.firstLoaded(listeniz)ile geçersiz kıl;init()'te sahip varsa tuş kaydetme. İlgili mixin'leriPlumaMixinPlugin.SKIP_IF_LOADED'a ekle. - Önizleme:
hasPreview()true verenderPreview(context, x, y, w, h); sayfa tek sütun + sağda önizleme olur. - Özel sayfa:
hasCustomPage()true; ayar ekranında satırları kendin kur (makro listesi gibi). - Tuş notu gösterilecekse
pluma.module.<id>.key_noteekle ve ayar ekranındaki koşula modülü ekle.
Seçenek türleri
| Fabrika | Kontrol | Değer okuma |
|---|---|---|
Option.toggle(owner, key, def) | Toggle | options.on(key) |
Option.slider(owner, key, min, max, step, def, unit) | Slider (adım 1 → tam sayı; ≥0,1 → 1 ondalık; aksi 2) | options.get(key), integer(key) |
Option.choice(owner, key, defIndex, names...) | Segmented (>3 seçenek tam genişlik) | options.integer(key) |
Option.color(owner, key, defArgb) | Renk paleti (tam genişlik) | options.color(key) |
Option.keyBind(owner, key, defKey) | KeyButton | options.integer(key); Option.isMouse(code) |
Yeni performans ayarı
PerfConfig'e alan ekle (varsayılanıyla) veclamp()'e kelepçesini yaz —NaN/Infinityiçinclamp(value, min, max, fallback)kullan.- Mixin'lerin okuyacağı bir
effective*()metodu ekle;AutoPerfile birleşiyorsa "katı olan kazanır". - Mixin'i yaz: HEAD/RETURN
@Inject,pluma$önekli handler, ayar kapısı;pluma.client.mixins.json'a kaydet; hedefi her sürümde doğrula. PlumaSettingsScreen.buildPerformance()'a satırı ekle.SEARCH_INDEX'eSearchEntryekle.- Dil anahtarları (
pluma.perf.<ad>,.desc) ve gerekiyorsa hazır ayarlara değer. - Dosya biçimi uyumsuz değiştiyse
CONFIG_VERSION'ı artır veload()'a geçiş yaz.
Hiçbir performans ayarı oyuncuları gizleyemez ve chunk/arazi render'ına dokunamaz.
Yeni simge
tools/GenerateIcons.java'ya 16 birimlik ızgarada çizen bir fonksiyon veicons.put("ad", GenerateIcons::ad)ekle.java tools/GenerateIcons.javaçalıştır (64×64 PNG +.png.mcmetaüretir).Icons.Iconenum'unaAD("ad")satırı ekle.
Yeni çeviri
src/client/resources/assets/pluma/lang/ altına Minecraft dil kodu adıyla bir JSON ekle (ör. de_de.json) ve en_us.json'daki tüm anahtarları çevir.
Etiketler her çağrıda çözümlenir; oyun içinde dil değişimi yeniden başlatma gerektirmez.
Dosyaları PowerShell 5.1 Get-Content/Set-Content ile yeniden yazma: UTF-8'i bozar (Türkçe karakterler kaybolur). UTF-8 destekleyen bir editör kullan.
Kontrol listesi
- Renk, köşe, boşluk, yükseklik, süre yalnızca
Theme'den mi geliyor? - Şekiller
Drawüzerinden mi (sabit quad)? - Accent yeni bir yerde kullanılmadı mı?
- Config'den okunan her değer kelepçeleniyor mu?
- Mixin
@Injectmı, hedef her sürümde doğrulandı mı? - Animasyonlar
Motion.reduced()'a uyuyor mu? - İki dil dosyası da güncel mi?
HudMath/AutoPerfMathdeğiştiyse self-check'ler geçiyor mu?
Araçlar ve Test
Ölçüm turu (harness), tanıtım görüntüsü üretici (showcase), bağımsız self-check'ler ve varlık üreten Java tek dosya araçları.
DevHarness — ölçüm turu
./gradlew :<sürüm>:runHarness. Yalnızca geliştirme ortamında ve -Dpluma.dev.harness=true ile kaydolur; yayınlanan jar'da hiç çalışmaz.
Pencereyi 1600×900 yapar, FPS tavanını 260'a çeker, VSync'i kapatır, odak kaybında duraklamayı kapatır ve şu adımları sırayla gezer:
| Adım | Oturma / ölçüm (tick) | Ne olur |
|---|---|---|
title | 60 / 60 | Ana menü |
settings-hud, settings-performance | 30 / 60 | Ayar merkezi sayfaları |
settings-general, settings-modules | 30 / 40 | Ayar merkezi sayfaları |
world-load | 0 / 1 | Sürüm başına test dünyası (pluma-harness-<mc>): yoksa yaratıcı, barışçıl, komutlar açık |
world-setup | 60 / 1 | Skor tablosu hedefi, bir husk, hız etkisi; nişangah, blok çerçevesi (dolgulu), hitbox açılır; skor tablosu sağ kenara 1,5x yapıştırılır |
ingame-hud | 100 / 80 | Oyun içi HUD |
free-look | 20 / 20 | Serbest bakış aç/kapa modunda, 90° dönüş |
full-bright-night | 30 / 20 | Gece yarısı + tam parlaklık |
hud-editor | 30 / 80 | HUD düzenleyici |
chat, chat-search | 20 / 20 | Test satırları eklenir, sohbet ve arama ekranı |
settings-ingame | 30 / 80 | Oyun içinde ayar merkezi |
module-crosshair | 30 / 30 | Nişangah modül sayfası (önizlemeli) |
Çıktılar: run/pluma-harness.txt (her adım için ad fps=… quads/frame=… screen=…), run/screenshots/harness-<adım>.png ve
run/harness.jfr (Flight Recorder profili; jfr print ile yavaş ekran incelenir). Tamamlanınca istemci kapanır.
- Her tick
getFramerateLimitTracker().onInputReceived()çağrılır; yoksa vanilla 60 sn girdisizlikte FPS'i 30'a keser (10 dk'da 10) ve ölçümler anlamsızlaşır. - Dünya sürüm başınadır:
run/ortak olduğu için yeni sürüm eski dünyayı açarken yükseltme onayında takılıyordu. - Arka arkaya koşularda bir kez dünya içi ekran görüntüleri tamamen siyah geldi (pencere görünmezken); siyah görüntü önce tekrar koşularak doğrulanmalı.
- Harness girdi (tıklama/tuş) simüle etmez.
DevShowcase — tanıtım görüntüleri
./gradlew :26.2:runShowcase [-PshowcaseView=<biyom>:<yaw>]; Iris, Sodium ve bir shader paketiyle run/ içinde çalıştırılmak üzere tasarlanmıştır.
1920×1080, GUI ölçeği 3, render mesafesi 16, sabit tohum 20260916.
- Keşif geçişi (
viewboş):cherry_grove(zaman 12300),meadow(23300),jagged_peaks(5000) biyomlarının en yakınını bulur, üstüne çıkar ve 0/90/180/270 yaw'da HUD'suz dört görüntü alır →showcase-<biyom>-<yaw>.png. - Arayüz geçişi (
view=cherry_grove:90): seçilen görünüme döner, netherite/elmas zırh, hotbar eşyaları, "Knight Network" skor tablosu, zırhlı bir zombi hazırlar; FPS elementini kapatır (entegre GPU'daki shader FPS'i reklam edilecek FPS değildir) veshowcase-ui-hud,-pause,-settings-hud,-settings-modules,-settings-performance,-crosshair,-hud-editorgörüntülerini alır.
Self-check'ler
Minecraft sınıflarından bağımsız tutulan iki matematik sınıfı doğrudan java ile çalıştırılabilir; main()'deki assert'ler başarısız olursa AssertionError fırlatır.
java src/client/java/org/klasfimo/pluma/client/hud/HudMath.java
# HudMath: all checks passed
java src/client/java/org/klasfimo/pluma/client/perf/AutoPerfMath.java
# AutoPerfMath: all checks passed
| Sınıf | Doğrulananlar |
|---|---|
HudMath | Kelepçe (NaN dahil); snap: kenar, merkez, serbest konum, ekran dışı, ekrandan geniş element; anchorFor: kenar ve üçte birler; her çapa için ofset gidiş-dönüşü; sağ çapanın sola büyümesi ve geniş ekranı izlemesi |
AutoPerfMath | Çok yavaşta 2 kademe atlama, orta yavaşta 1, rahatta 1 gevşeme, tavanda kalma, kararlı durum, tabanda gevşememe, çift atlamanın tavana kelepçelenmesi |
Varlık araçları
| Araç | Kullanım | Çıktı |
|---|---|---|
GenerateIcons.java | java tools/GenerateIcons.java [çıktıDizini] | 33 çizgi simgesi (logo hariç): 16 birim ızgara, 64×64, piksel başına 4×4 örnek, 1,6 birim çizgi, yuvarlak uçlar, alfa kapsamalı beyaz; her birine .png.mcmeta |
GenerateLogo.java | java tools/GenerateLogo.java [kaynak] [çıktıKökü] | icon.png 128×128 (mod simgesi), brand.png 64×64 + mcmeta, icons/logo.png 64×64 beyaz siluet + mcmeta, branding/logo-mark.png 1024×1024 |
GenerateShowcase.java | java tools/GenerateShowcase.java <manzara> [en|tr] [banner manzarası] | branding/showcase/<dil>/: hero.png 1920×1080, social-preview.png 1280×640, banner.png 1600×400, her arayüz görüntüsü için feature-*.png |
Logo anahtarlama: kaynak şeffaf değilse arka plan satır başına sol ve sağ kenar şeritlerinden (genişliğin %4'ü) tahmin edilip interpolasyonla yayılır; pikselin alfası rengin bu tahminden uzaklığından gelir (22 altı tamamen arka plan, 70 üstü tamamen çizim), renk arka plandan ayrıştırılır ki kenarlarda mor saçak kalmasın. Kask plakaları arasındaki boşluklar da anahtarlanır; kare kırpmada %6 kenar payı bırakılır.
Araçlar Python yerine Java'dır: mod nerede derleniyorsa orada çalışırlar ve ImageIO her PNG türünü (RGB, RGBA, paletli, 16-bit) ve JPEG'i okur.
Değişmezler
Bunlar hiçbir koşulda bozulmaz. Bir değişiklik bunlardan biriyle çelişiyorsa değişiklik yanlıştır.
Oyuncu ve dünya
- Oyuncular gizlenmez — hiçbir ayarla, hiçbir mesafede, otomatik FPS yöneticisi dahil. Kamera varlığı da muaftır.
- Chunk/arazi render'ına dokunulmaz — orası Sodium'un alanı.
Uyumluluk
- Tüm mixin kancaları
@Inject(+@Accessor/@Shadow); tek istisnaChatHistoryMixin'in@ModifyConstant'ı.@Overwriteve@Redirectyok. - Aynı işi yapan mod varsa
PlumaMixinPluginmixin'i uygulamaz,perf/ModCompatözelliği çalışma anında devre dışı bırakır. - Mixin hedefi her sürümde ayrı doğrulanır; handler parametreleri hedefle birebir aynı tipte olmalı.
Veri
- Config dosyaları güvenilmeyen girdidir: bilinmeyen kimliği at, tüm değerleri geçerli aralığa kelepçele (NaN/Infinity dahil), bozuk dosyada varsayılana dön ve
.corruptkopyasını bırak. - Yazma yalnızca
ConfigFiles.writeile (atomik). HudWidget.idve modülid'si config anahtarıdır; değiştirilmez.- HUD konumu çapa + GUI-piksel ofsetidir (
HudMath), kesir değil. Kenara yapışık element o kenardan büyür.renderContentölçekten habersizdir. - Ödünç alınan vanilla değerleri önce park edilir ve her zaman geri verilir (çökme sonrası dahil).
- Veri yoksa element çizilmez.
Görünüm
- Renk, radius, spacing, kontrol yüksekliği, geçiş süresi yalnızca
Theme.java'da; hiçbir yerde sabit kodlanmış renk yok. - Görünüm sade: köşeler 2/3/4 px (
RADIUS_SM/MD/LG), çubuklarRADIUS_NONE; hap şekli (height / 2) kullanılmaz. - Ayar ekranında accent yalnızca üç yerde: seçili kenar çubuğu öğesi, klavye odak halkası ve HUD elementinin "accent'i izle" renk çipi.
- Gevşek GUI dokuları (simgeler, brand) 64×64 üretilir (16 px tasarım ızgarasında, GUI pikseli başına 4 texel) ve her biri
.png.mcmeta(blur: true, clamp: true) taşır. focusRingve anlatım (narration) erişilebilirlik için korunur.
Performans
- Tüm şekil çizimi
Draw'da, framebuffer uzayında veShapeAtlasüzerinden: şekil başına sabit quad, tek doku/tek pipeline. Satır satırfilltaraması yok. Draw.pushBatchmatrise dokunmaz; batch içinde çizilen metin/ikon/eşya normal boyutta kalır.- Ayar ekranı kaydırmada rebuild etmez: içerik bir kez kurulur,
addContentile eklenen kontroller kaydırılır.render()/olay içinde doğrudanrebuild()çağrılmaz. - Animasyon kendiliğinden dönmez;
reduceMotionher geçişi anlık yapar.
Kod ve süreç
- Yeni HUD elementi =
PlumaHud.WIDGETS'ta tek satır; yeni modül =PlumaModules.MODULES'ta tek satır. Editör/ayar sayfası/arama/config otomatik gelir. src/her zaman 1.21.11 için yazılıdır; aktif sürüm değiştirilmez. Sürüme göre değişen kod: replacements →Mc→//? if.- Yeni sürüm =
settings.gradle.kts'eversion(...)+stonecutter.properties.toml'a blok. 1.21.x'te her yama ayrı jar. - Yalnızca
release_stage = "final"yayınlanır. - Dosyalar PowerShell 5.1
Get-Content/Set-Contentile yeniden yazılmaz (UTF-8 bozulur).
Sürüm Notları
Her sürümün indirmeleri yayınlar sayfasında.
Nova 1.4.5
Minecraft 26.2 · 26.1–26.1.2 · 1.21.11 · 1.21.10 · 1.21.8 · 1.21.7 · 1.21.6
Arayüz
- Daha düz, daha temiz görünüm: yuvarlak haplar yerine düğmelerde, kartlarda, girişlerde ve anahtarlarda sıkı köşeler; düz kaydırıcı rayları ve kaydırma çubuğu.
- Ayar merkezindeki HUD kartları nötr kenarlık kullanır; elementin rengi artık yalnızca önizlemesinde görünür.
- HUD elementi köşeleri artık köşeli, hafif veya yuvarlak (varsayılan hafif). Mevcut düzenler bir kez hafife geçer; elementin ayarlarından başka bir adım seçilebilir.
Düzeltmeler
- "Sadece baktığın isim etiketleri" artık kamerayı izler: serbest bakışta ve önden üçüncü şahısta ekrandaki etiketler kaybolmaz. Koni FOV'a ve pencere şekline uyar; geniş ekranların kenarında etiketler aniden belirip kaybolmaz.
- Bir menüyü kapatan tuş veya fare tuşu aynı zamanda bir makroya atanmışsa makro artık tetiklenmez.
- Ayar dosyaları güvenle yazılır: kayıt ortasında çökme yarım dosya bırakamaz; bozuk dosya varsayılanlarla ezilmek yerine
.corruptolarak saklanır. - Elle düzenlenen
pluma-perf.json'dakiNaNveyaInfinityvarsayılana döner. - Sınırsız sohbet geçmişi en fazla 50.000 satır tutar; çok uzun oturumlar belleği sınırsız büyütemez.
- Her jar derlendiği Mod Menu sürümünü önerir; mod ana sayfasını ve hata izleyicisini listeler.
Nova 1.4.4
İlk herkese açık sürüm.
Sürümler
- Minecraft 26.2, 26.1 (26.1–26.1.2), 1.21.11, 1.21.10, 1.21.8, 1.21.7 ve 1.21.6 derlemeleri.
HUD
- 23 elementli sürükle-bırak HUD düzenleyici, kenar yapışma ve her çözünürlükte/GUI ölçeğinde tutan çapalı konumlar.
- Yeni elementler: TPS, envanter.
- Skor tablosu ve boss çubuğu gerçek boyutlarıyla taşınıp ölçeklenebilir.
- İksir etkileri elementi açıkken vanilla etki ikonlarını gizler.
Modüller
- Canlı önizlemeli özel nişangah.
- Blok çerçevesi, hitbox, zoom, serbest bakış, tam parlaklık, ViewModel.
- Başarımları kapat.
- Fare tuşları dahil komut makroları.
- Aynı özelliği sağlayan başka bir mod varsa modüller kendiliğinden kenara çekilir.
Sohbet
- Sohbet giriş satırından sohbet araması.
- Daha uzun veya sınırsız sohbet geçmişi, sunucu değiştirirken korunur.
Performans
- Lithium, FerriteCore ve ImmediatelyFast gömülü.
- Varlık, blok varlığı, tabela yazısı, düşmüş eşya ve isim etiketi için mesafe sınırları.
- Hazır ayarlar ve otomatik FPS yöneticisi.
- Mod uyumluluğu sayfası.
Menüler
- Yeni ana menü, duraklatma menüsü ve ayar merkezi; her GUI ölçeğinde akıcı.
Lisans ve Üçüncü Taraf
P-LUMA All Rights Reserved'dır. Gömülü modlar kendi yazarlarının eseridir ve kendi lisanslarını korur.
P-LUMA
Copyright (c) 2026 klasfimo
All rights reserved.
fabric.mod.json'da lisans All-Rights-Reserved, yazar klasfimo. Her jar bu metni LICENSE_pluma-nova.txt olarak taşır.
Gömülü modlar
P-LUMA jar'ı aşağıdaki modları değiştirilmeden iç içe jar (Fabric jar-in-jar) olarak taşır. Fabric Loader bunları ayrı modlar olarak yükler;
herhangi birinin daha yeni bir kopyası mods klasörüne konursa gömülü olanın yerini alır.
| Mod | Yazarlar | Lisans | Kaynak |
|---|---|---|---|
| Lithium | CaffeineMC | GNU LGPL-3.0-only | github.com/CaffeineMC/lithium |
| FerriteCore | malte0811 | MIT | github.com/malte0811/FerriteCore |
| ImmediatelyFast | RaphiMC | GNU LGPL-3.0-or-later | github.com/RaphiMC/ImmediatelyFast |
LGPL lisanslı modlar değiştirilmeden dağıtılır; eksiksiz karşılık gelen kaynak kodları yukarıdaki depolardadır ve aynı modun başka herhangi bir derlemesiyle değiştirilebilirler.
Her P-LUMA jar'ı kendi Minecraft sürümü için yapılmış derlemeleri taşır; tam Modrinth sürüm kimlikleri sürüm matrisinde.
Lisans metinleri her jar'da THIRD_PARTY_NOTICES.md içindedir.
Gömülü olmayanlar
| Sodium | PolyForm Shield lisansı yeniden dağıtıma izin vermez |
| Iris | Sodium'a bağlı |
| Entity Culling | tr7zw Protective Licence |
| More Culling | Ayrı kurulum |
| ModernFix | Yayın anında desteklenen Minecraft sürümlerinin çoğu için Fabric sürümü yoktu |
| Dynamic FPS | İç içe native pil durumu kütüphanesi ikinci bir iç içe geçme seviyesinde yüklenmiyor |
Bağlantılar
- Yayınlar: github.com/klasfimo/P-LUMA-Nova-Wiki/releases
- Wiki: github.com/klasfimo/P-LUMA-Nova-Wiki
- Hata bildirimi: github.com/klasfimo/P-LUMA-Nova-Wiki/issues
P-LUMA Dokümantasyonu · Nova 1.4.5 kaynak kodundan derlendi · © 2026 klasfimo. Minecraft, Mojang AB'nin ticari markasıdır; P-LUMA Mojang veya Microsoft ile bağlantılı değildir.
P-LUMA