P-LUMADokümantasyon Nova 1.4.5
P-LUMA Nova 1.4.5

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.

P-LUMA Nova 1.4.5 tanıtım görseli: kiraz korusu manzarası üzerinde şövalye kaskı logosu
Sürüm Nova 1.4.5 (final) Minecraft 26.2 · 26.1–26.1.2 · 1.21.11 · 1.21.10 · 1.21.8 · 1.21.7 · 1.21.6 Loader Fabric 0.19.3+ Taraf yalnızca istemci

Kısaca

Mod kimliğipluma · paket org.klasfimo.pluma
SürümNova 1.4.5 — kod adı Nova, aşama final
Minecraft26.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
GerekenlerFabric 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)
ÖnerilenSodium, Iris, Entity Culling, More Culling, Dynamic FPS, Mod Menu
LisansAll Rights Reserved · © 2026 klasfimo. Gömülü modlar kendi lisanslarını korur (LGPL-3.0, MIT)
DağıtımGitHub Releases — klasfimo/P-LUMA-Nova-Wiki

Özellikler

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 @Inject tabanlıdır; @Overwrite ve @Redirect yoktur. 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 .corrupt olarak 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.

Başlarken

İ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ükleyiciFabric Loader 0.19.3 veya üstü
BağımlılıkFabric API (aynı Minecraft sürümü için)
Java26.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.
TarafYalnı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ı

  1. Minecraft sürümün için Fabric Loader'ı kur.
  2. Fabric API'yi .minecraft/mods klasörüne koy.
  3. Minecraft sürümüne uyan P-LUMA jar'ını aynı klasöre koy (aşağıdaki tablo).
  4. Oyunu başlat. P-LUMA ana menüsü açılmalı. Sağ Shift oyun içinde HUD düzenleyiciyi açar.

Hangi dosya?

MinecraftJavaDosyaBoyut
26.225pluma-nova.1.4.5-26.2.jar1,2 MB
26.1, 26.1.1, 26.1.225pluma-nova.1.4.5-26.1.jar1,4 MB
1.21.1121pluma-nova.1.4.5-1.21.11.jar1,4 MB
1.21.1021pluma-nova.1.4.5-1.21.10.jar1,4 MB
1.21.821pluma-nova.1.4.5-1.21.8.jar1,4 MB
1.21.721pluma-nova.1.4.5-1.21.7.jar1,2 MB
1.21.621pluma-nova.1.4.5-1.21.6.jar1,2 MB
Her jar yalnızca kendi sürümünde çalışır

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
DosyaSHA-256
pluma-nova.1.4.5-26.2.jarbef0fe343a81623d2252b6eea5262ecc0be644d8b5f86899e44fa2fccc861c66
pluma-nova.1.4.5-26.1.jar10c4fced90af8596985fe397ff1e7468f4c7e57803d40e04677122a600b633ae
pluma-nova.1.4.5-1.21.11.jarde427d83ca0fddc50dcc1cd8851a4747bcb4dadb2eb3f13338f304a4e77d0d6a
pluma-nova.1.4.5-1.21.10.jar28e00e860676a76c539d6a79c983c1c6cf57b7f7e75f8c8809fe05193bbf0431
pluma-nova.1.4.5-1.21.8.jara00bd408994ef3cb3483988647128338a3249004da851093337858244f401a1a
pluma-nova.1.4.5-1.21.7.jar56ec5981fc35bfbeb3fa8941e73e3166571bd2ca1fdc7622fb20155130769ad1
pluma-nova.1.4.5-1.21.6.jarbdbb418ce643324c3d6b029eb5833ba899434f704e6a7be7d891094e045cba62

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.txt ve gömülü modların lisanslarını anlatan THIRD_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

ModNedenNeden gömülü değil
SodiumArazi render'ı: alabileceğin en büyük FPS kazancıPolyForm Shield lisansı yeniden dağıtıma izin vermez
IrisShader desteği (Sodium ister)Sodium'a bağlı
Entity CullingGörünmeyen varlıkları çizmeztr7zw Protective Licence
More CullingBlok yüzeylerini daha iyi elerAyrı kurulum
Dynamic FPSOyun 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ı).

Başlarken

Kontroller

Varsayılan tuşlar, HUD düzenleyici ve sohbet araması kısayolları, ayar merkezine giden tüm yollar.

Varsayılan tuşlar

TuşEylemNot
Sağ ShiftHUD düzenleyiciyi açOyunda, açık ekran yokken çalışır
C (basılı tut)YakınlaştırZoom modülü varsayılan olarak açık
Sol AltSerbest bakışModül açık olmalı; basılı tut veya aç/kapa
GTam parlaklığı aç/kapaModü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

NeredenNası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 MenuP-LUMA → yapılandırma düğmesi
HUD düzenleyiciOrtadaki P-LUMA Ayarları düğmesi veya seçili elementin dişlisi

HUD düzenleyici

GirdiSonuç
TıklaElementi seç
SürükleElementi taşı (6 px içinde kenarlara ve orta çizgiye yapışır)
Sağ alt tutamacı sürükleBoyutlandır (0,5x – 3x; skor tablosu ve boss çubuğu en fazla 2x)
Sağ tıkElementi aç/kapat
Dişli simgesiElementin ayar sayfasını aç
← → ↑ ↓Seçili elementi 1 px kaydır (çapası korunur)
Shift + oklar10 px kaydır
EscKaydet ve kapat

Sohbet araması

GirdiSonuç
Sohbet satırının sonundaki büyüteçAramayı aç
YazSohbet satırlarını süz (büyük/küçük harf duyarsız)
Bir satıra tıklaPanoya kopyala
Shift + tıklaSatırı sohbet giriş satırına ekle ve sohbete dön
Fare tekerleğiKaydır (Shift ile 7 satır)
Page Up / Page DownSayfa sayfa kaydır
Enter / EscSohbete geri dön

Ayar merkezi

GirdiSonuç
Fare tekerleğiİçeriği yumuşak kaydır (çentik başına 36 px)
Kenar çubuğundaki aramaTüm ayarlar, modüller, modül seçenekleri ve HUD elementleri içinde ara
Bölüm başlığıBölümü katla/aç
TabKlavyeyle gezin (odaklanan kontrol mor bir halka ile gösterilir)
Tuş kutusu dinlerken EscAtamayı kaldır (ekranı kapatmaz)
Tuş kutusu dinlerken sol tıkDinlemeyi iptal et, eski atama kalır
Özellikler

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

AyarAçıklamaAralık / varsayılan
EtkinElementi açar/kapatırElemente göre
ÖlçekElementin büyüklüğü; duraklara yapışır0,5x – 3x (vekillerde 2x) · 1x

Görünüm

Skor tablosu ve boss çubuğunda bu bölüm yoktur; onları vanilla çizer.

AyarAçıklamaSeçenekler / varsayılan
ArkaplanElementin arkasındaki panelSade göstergelerde kapalı, bileşik elementlerde açık
Panel gölgesiPanelin altındaki yumuşak gölge (6 px yayılım, 1 px aşağı)Açık
Metin efektiMetnin arka plandan ayrışma biçimiYok · Gölge · Kontur — sade göstergelerde Kontur, diğerlerinde Gölge
OpaklıkPanelin saydamlığı%0 – %100 · %78 (bileşik elementlerde %90)
KöşePanel köşesiköşeli (0) · hafif (2 px, varsayılan) · yuvarlak (4 px)
RenkDeğer metninin ve çerçevenin rengiAccent'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

Accent'i izle-1 · #8F6BFF
Frost Blue0 · #5FA8FF
Signal Green1 · #3ED67A
Solar Amber2 · #F5C242
Ember Red3 · #E23B44
Orchid4 · #C97CF2
Cyan Glass5 · #4DD8E0
Rose Quartz6 · #F291B8
Slate Silver7 · #D5D9DE

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.
Özellikler

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.

Varsayılan açık Varsayılan kapalı Vanilla vekili

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.

KimlikAd (TR / EN)VarsayılanKonumRenkGösterdiği
coordsKoordinatlar
Coordinates
AçıkSTART 2 / START 2Accentİki satır: XYZ x.x y.y z.z ve Yön (north, east…)
serverSunucu
Server
AçıkSTART 2 / START 31Cyan GlassSunucu adresi; tek oyunculuda "Tek Oyunculu", bilinmiyorsa "bilinmiyor"
facingPusula
Compass
AçıkSTART 2 / START 49OrchidBakış yönü adı ve 0–359° sapma açısı
biomeBiyom
Biome
KapalıSTART 2 / START 67OrchidBulunduğun biyomun kimliği (ad alanı olmadan, ör. cherry_grove)
lightIşık seviyesi
Light level
KapalıSTART 2 / START 85Solar AmberBulunduğun bloktaki en yüksek yerel ışık (0–15)
speedHız
Speed
KapalıSTART 2 / START 103Signal GreenYatay hız, m/s (tick başına hareket × 20)
frametimeKare süresi
Frame time
KapalıSTART 2 / START 121Frost BlueSon 240 karenin ortalama süresi (ms) ve %1 düşük FPS; en az 11 örnek birikince görünür
memoryBellek
Memory
KapalıSTART 2 / START 150Slate SilverKullanılan / azami Java heap, GB
entitiesVarlık sayısı
Entity count
KapalıSTART 2 / START 168Signal Greenİstemcide yüklü varlık sayısı
sessionOturum süresi
Session time
KapalıSTART 2 / START 186Slate SilverOyun açıldığından beri geçen süre (m:ss, bir saatten sonra h:mm:ss)
gametimeOyun içi saat
In-game time
KapalıSTART 2 / START 204Solar AmberDünya saati HH:mm (tick 0 = 06:00) ve gün sayısı
fpsFPSAçıkEND -2 / START 2Frost Blue144 FPS
pingPingAçıkEND -2 / START 20Cyan GlassOyuncu listesindeki gecikmen, ms
clockSaat
Clock
AçıkEND -2 / START 38Solar AmberGerçek dünya saati, HH:mm
tpsTPSKapalıEND -2 / START 56Signal GreenSunucunun saniyedeki tick sayısı; tek oyunculuda ayrıca ms/tick (ayrıntı aşağıda)
effectsİksir etkileri
Potion effects
AçıkEND -2 / START 76Rose QuartzVanilla etki ikonları, etki adı + seviye, kalan süre (m:ss veya ∞) · Dolu
armorZırh
Armor
AçıkSTART 2 / END -2AccentKask, göğüslük, pantolon, bot (+ eldeki eşya) ve dayanıklılık · Dolu
durabilityEldeki eşya
Held item
KapalıSTART 2 / END -40Ember RedEldeki hasar alabilen eşyanın adı, kalan dayanıklılık ve yüzdesi
keystrokesTuş vuruşları
Keystrokes
AçıkEND -2 / END -2AccentW A S D, LMB/RMB ve zıplama çubuğu; basılan tuş renkle dolar · Dolu
cpsCPSAçıkEND -2 / END -88Signal Greensol / sağ saniyedeki tıklama (son 1 saniye)
inventoryEnvanter
Inventory
KapalıCENTER 0 / END -52Accent9×3 ana envanter (isteğe bağlı hotbar), vanilla eşya çizimiyle · Dolu
scoreboardSkor tablosu
Scoreboard
AçıkEND -1 / CENTER 0—Vanilla kenar çubuğu, yalnızca taşınır ve ölçeklenir · Vekil
bossbarBoss çubuğu
Boss bar
AçıkCENTER 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 ms değ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çenekVarsayılanEtkisi
Dayanıklılığı gösterAçıkHer eşyanın altında (dikeyde yanında) kalan dayanıklılık
Dayanıklılığı yüzde olarak gösterKapalıSayı yerine %
Eldeki eşyayı dahil etAçıkAna eldeki eşyayı sona ekler
Dikey sıralaKapalı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çenekVarsayılanEtkisi
Fare tuşlarında CPS gösterKapalı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çenekVarsayılanEtkisi
Hotbar'ı dahil etKapalıAltına 4. satır olarak hotbar'ı ekler
Slot zeminleriAçıkHer 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.
Özellikler

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ülVarsayılanNe yaparTuş
Özel nişangahKapalıArtı, nokta, daire, X veya artı+nokta; boyut, boşluk, kalınlık, renk, dış çizgi, ters renk, dinamik açılma—
Blok çerçevesiKapalıBaktığın bloğun çerçeve rengi, opaklığı, kalınlığı ve isteğe bağlı yarı saydam dolgu—
HitboxKapalıVarlık kutuları, nişandaki varlığa ayrı renk, bakış çizgisi, göz hizası—
YakınlaştırmaAçıkBasılı tutunca zoom; tekerlekle ayar, yumuşak geçiş, düşük hassasiyetC
Serbest bakışKapalıYürüme yönünü ve nişanı değiştirmeden karakterin etrafına bakSol Alt
Tam parlaklıkKapalıMağara ve geceyi aydınlatırG
ViewModelKapalıCS2 tarzı el konumu, boyutu ve açısı—
Başarımları kapatKapalıBaşarım bildirimi, sesi ve sohbet satırları; isteğe bağlı tarif bildirimleri—
Komut makrolarıAçıkBir 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

id: crosshairVarsayılan kapalı

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.

Artı
Nokta
Daire
X
Artı+
SeçenekTürAralık (adım)VarsayılanAçıklama
ŞekilSeçimArtı · Nokta · Daire · X · Artı+ArtıNişangahın biçimi
UzunlukKaydırıcı1 – 20 px (0,5)5 pxKolların uzunluğu; dairede yarıçapa eklenir
BoşlukKaydırıcı0 – 12 px (0,5)2 pxMerkezdeki boşluk
KalınlıkKaydırıcı0,5 – 6 px (0,5)1 pxÇizgi kalınlığı
RenkRenkPaletBeyazNişangah rengi
OpaklıkKaydırıcı0,1 – 1 (0,05)1Saydamlık
Dış çizgiAnahtar—AçıkSiyah kontur; açık zeminde de görünür
Ters renkAnahtar—KapalıVanilla gibi arka planı tersler (dış çizgiyi devre dışı bırakır)
DinamikAnahtar—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

id: block_overlayVarsayılan kapalı

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çenekTürAralık (adım)VarsayılanAçıklama
Çizgi rengiRenkPaletBeyazÇerçeve rengi
Çizgi opaklığıKaydırıcı0,1 – 1 (0,05)0,8Çerçevenin saydamlığı
KalınlıkKaydırıcı1x – 8x (0,5)2xVanilla çizgi kalınlığının katı
DolguAnahtar—KapalıBloğu yarı saydam boyar
Dolgu rengiRenkPaletBeyazDolgunun rengi
Dolgu opaklığıKaydırıcı0,05 – 0,8 (0,05)0,15Dolgunun 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

id: hitboxVarsayılan kapalı

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çenekTürAralık (adım)VarsayılanAçıklama
HedeflerSeçimHepsi · Oyuncu · CanlıHepsiHangi varlıkların kutusu çizilir
RenkRenkPaletBeyazKutu rengi
Nişan rengiRenkPaletKırmızıNişangahtaki varlığın rengi
OpaklıkKaydırıcı0,1 – 1 (0,05)0,9Kutuların saydamlığı
KalınlıkKaydırıcı1x – 6x (0,5)1,5xÇizgi kalınlığı (1.21.11+)
Bakış çizgisiAnahtar—AçıkCanlı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şyalarAnahtar—KapalıDüşmüş eşyaların kutusunu da çizer (Hedefler seçiminden bağımsız)
MesafeKaydırıcı8 – 128 blok (4)48Kutuları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

id: zoomVarsayılan açıkC

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çenekTürAralık (adım)VarsayılanAçıklama
YakınlıkKaydırıcı2x – 10x (0,5)4xKaç kat yakınlaşır
Yumuşak geçişAnahtar—AçıkYakınlaşma üstel bir eğriyle kayar (~45 ms zaman sabiti)
Tekerlekle ayarAnahtar—AçıkTuş basılıyken tekerlek hotbar yerine yakınlığı ×/÷ 1,25 değiştirir
Hassasiyeti düşürAnahtar—AçıkFare hareketi 1/yakınlık ile çarpılır
Sinematik kameraAnahtar—KapalıZoom süresince vanilla sinematik kamerayı açar
Eli gizleAnahtar—AçıkYakı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ış

id: free_lookVarsayılan kapalıSol Alt

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çenekTürSeçeneklerVarsayılanAçıklama
KullanımSeçimBasılı tut · Aç/kapaBasılı tutTuşun davranışı
GörünümSeçimArkadan · ÖndenArkadanKameranın konumu
Dikeyi ters çevirAnahtar—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

id: full_brightVarsayılan kapalıG

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çenekTürAralık (adım)VarsayılanAçıklama
YoğunlukKaydırıcı1 – 15 (0,5)10Vanilla 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 eski fullBright / fullBrightStrength alanları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

id: view_modelVarsayılan kapalı

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çenekAralık (adım)VarsayılanAçıklama
Yatay konum-1 – 1 (0,02)0Sağa-sola kaydırır
Yükseklik-1 – 1 (0,02)0Yukarı-aşağı kaydırır
Derinlik-1 – 1 (0,02)0İleri-geri kaydırır
Boyut0,1x – 2x (0,05)1xElin 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 aynalaAnahtarAçıkSol 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

id: disable_achievementsVarsayılan kapalı

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çenekVarsayılanAçıklama
Bildirim ve sesAçıkSağ üstteki başarım kartı ve sesi
Kendi mesajlarınAçıkSenin başarım sohbet satırın
Başkalarının mesajlarıAçıkDiğer oyuncuların başarımları
Tarif bildirimleriKapalı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ı

id: command_macrosVarsayılan açık

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

  1. Satırdaki tuş kutusuna tıkla; kutu > ... < gösterir.
  2. Bir klavye tuşuna bas veya orta / sağ / yan fare tuşuna tıkla.
  3. 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ğu256 karakter; satır sonları boşluğa çevrilir, baştaki/sondaki boşluk kırpılır
TetiklenmeYalnızca tuşun basıldığı an (basılı tutmak tekrarlamaz)
BeklemeHer makro 500 ms'de en fazla bir kez gönderir — takılı kalan bir tuş kimseyi spam'den attırmaz
Ne zamanYalnızca bir dünyadayken (tek oyunculu dahil) ve açık ekran yokken
Menü kapatma tuşuTuş 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.

Özellikler

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.

AyarVarsayılanAçıklama
MoreChatHistoryAçıkVanilla'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ı1000Sınırsız kapalıyken tutulan satır: 100 – 10.000, 100'lük adımlarla
Sunucu değişince koruAçıkDü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.

Özellikler

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.

Oyuncular hiçbir zaman gizlenmez

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

ModYazarLisansNe yapar
LithiumCaffeineMCLGPL-3.0-onlyOyun mantığı ve tick optimizasyonu
FerriteCoremalte0811MITBellek kullanımını düşürür
ImmediatelyFastRaphiMCLGPL-3.0-or-laterHUD, 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.

AyarVanillaPvPMaksimum FPS
Varlık gizlemekapalı96 blok48 blok
Blok varlığı gizlemekapalı64 blok32 blok
Tabela yazısı gizlemekapalı16 blok8 blok
Eşya ve XP küresi gizlemekapalı48 blok24 blok
İsim etiketi gizlemekapalıkapalı24 blok
Sadece baktığın isim etiketlerikapalıkapalıaçık
Tick başına parçacıksınırsız2500
Hava durumunu kapathayırevetevet
Gökyüzünü kapathayırhayırevet
HUD yenilemesini sınırlakapalı60 Hz30 Hz
Tam parlaklık modülükapalıaçıkaçık
Otomatik FPS yöneticisikapalıaçıkaçık
Agresif modkapalı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.

AyarVarsayılanAçıklama
Otomatik FPS yöneticisiAçık (yeni kurulumda)Kare hızını izler, kısıtları ayarlar
Agresif modKapalıVanilla render ayarlarına da dokunur: görüş mesafesi, varlık mesafesi ölçeği, bulutlar, gökyüzü, HUD yenileme
Hedef FPSmonitörTutulacak 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?

DurumKoşulSüreSonuç
OrtalamaÜstel hareketli ortalama, α = 0,05 (20 tps'de ~1 sn hafıza)her tick—
Yavaşortalama < hedef × 0,9240 tick (2 sn)+1 kademe
Çok yavaşortalama < hedef × 0,5010 tick (0,5 sn)+2 kademe
Rahatortalama > hedef × 1,15120 tick (6 sn)−1 kademe
Soğumaherhangi bir değişiklikten sonra60 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

KademeVarlıkİsim etiketiEşyaParçacık/tickHavaAgresif modda ek olarak
0Hiçbir şey yapma—
11286448sınırsızaçık—
2964832500açık—
3643224250kapalıgörüş −2, varlık ölçeği ≤ %75, bulutlar kapalı
4482416100kapalıgörüş −4, varlık ölçeği ≤ %50, bulutlar, gökyüzü kapalı, HUD 30 Hz
53216120kapalı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.

AyarMesafe aralığıVarsayılanNe yapar
Varlık gizleme8 – 256 blokkapalı · 64Uzaktaki varlıkları çizmez. Oyuncular ve kamera varlığı muaf.
Blok varlığı gizleme16 – 256 blokkapalı · 64Uzaktaki 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ı gizleme4 – 64 blokkapalı · 16Uzak 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 gizleme8 – 128 blokkapalı · 32Uzaktaki düşmüş eşyaları ve XP kürelerini çizmez; bunlar hızla birikir.
İsim etiketi gizleme4 – 128 blokkapalı · 32Varlı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ık0 – 10001000 = sınırsızBir 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ı

AyarAralıkVarsayılan
HUD yenilemesini sınırla—kapalı
HUD yenileme hızı5 – 240 Hz60 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.

AyarAralık
Maks FPS10 – 260 (260 = sınırsız)
Render mesafesi2 – 32 chunk
Simülasyon mesafesi5 – 32 chunk
Varlık mesafesi%50 – %500, %25 adımlarla
VSyncaçık/kapalı
Varlık gölgeleriaçık/kapalı
BulutlarKapalı · 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.

Özellikler

Menüler ve Arayüz

P-LUMA'nın kendi ana menüsü, duraklatma menüsü ve ayar merkezi. Her GUI ölçeğinde oyunun kendisi kadar akıcı kalacak şekilde çizilir.

Ana menü

Vanilla panoramasının üstünde dikey bir karartma, ortada şövalye kaskı logosu ve "P-LUMA" yazısı, tek sütun düğme:

DüğmeNe yapar
Tek OyunculuDünya seçim ekranı
Çok OyunculuSunucu listesi
P-LUMA AyarlarıAyar merkezi (vurgulu birincil düğme)
SeçeneklerVanilla seçenekler ekranı
Oyundan ÇıkOyunu kapatır

Sağ üst köşede bir hesap çipi (kullanıcı adı büyük harfle) ve simge düğmeleri: ızgara (ayarlar → HUD), gösterge (ayarlar → Performans), taşı (HUD düzenleyici), monitör (vanilla ana menüsü). Altta P-LUMA Nova 1.4.5 - Minecraft <sürüm> yazar. Ana menüde Esc bir şey kapatmaz.

Duraklatma menüsü

Aynı kabuk, bulanıklaştırılmış dünyanın üstünde. Vanilla duraklatma ekranının alt sınıfı değildir; vanilla'nın düğme veya yerleşim kodu çalışmaz.

DüğmeNe yapar
Oyuna DönMenüyü kapatır, fareyi yakalar
P-LUMA AyarlarıAyar merkezi
P-LUMA HUD DüzenleyiciDüzenleyici; kapanınca bu menüye döner
SeçeneklerVanilla seçenekler (oyun içi sürümü)
Ana Menüye Dön / Bağlantıyı KesVanilla'nın kendi çıkış düğmesi gibi: tek oyunculuda dünyayı kaydederek, sunucuda bağlantıyı kapatarak ana menüye döner

Köşede ızgara, gösterge ve monitör simgeleri bulunur; hesap çipinde oyuncunun gerçek skin yüzü görünür. Vanilla'nın sunduğu ama bu menüde olmayan her şey (başarımlar, istatistikler, LAN'a aç) monitör düğmesiyle bir tık uzaktadır. F3+Esc ile açılan menüsüz duraklatma değiştirilmez.

Vanilla menülere dönmek

  • Bu oturum için: köşedeki monitör simgesi vanilla ekranı açar ve yeniden başlatana kadar o ekranda kalır. Bir sonraki açılışta P-LUMA menüleri geri gelir.
  • Kalıcı olarak: Genel → P-LUMA ana menüsü ve P-LUMA duraklatma menüsü anahtarlarını kapat.
  • Vanilla menülerde sağ üst köşeye iki küçük simge eklenir: logo (P-LUMA menüsüne dön, oturumluk tercihi iptal eder) ve kaydırıcılar (ayar merkezi). Vanilla'nın düğme sütununa hiçbir şey eklenmez; o sütunun yerleşimi her yeniden boyutlandırmada kendini yeniden hesapladığı için elle eklenen düğmeler kayardı.

Ayar merkezi

En fazla 660×420 GUI pikselinde bir panel: üstte logo, "P-LUMA", sürüm etiketi, tarih-saat çipi (gg.aa.yyyy SS:dd) ve kapatma düğmesi; solda arama kutusu ve beş sayfa; sağda kaydırılabilir içerik.

Sayfaİçerik
HUDElement kartları, süzgeçler (Hepsi/Açık/Kapalı/Favoriler), arama, element ayar sayfaları
Modüller9 modül kartı ve her birinin ayar sayfası (nişangahta canlı önizleme, makrolarda liste düzenleyici)
PerformansHazır ayarlar · Otomatik FPS · Render Ayarları · HUD · Mod uyumluluğu · Vanilla görüntü ayarları
SohbetSohbet geçmişi · Sohbet araması
GenelArayüz (ana menü, duraklatma menüsü, hareketi azalt) · HUD (düzenleyiciyi aç, tüm elementleri sıfırla) · Hakkında

Bölümler arası arama

Kenar çubuğundaki arama kutusu yazdıkça içerik alanını sonuçlarla değiştirir. Taranan yerler: Performans/Sohbet/Genel ayarlarının ad ve açıklamaları, modül adları ve açıklamaları, her modül seçeneği ("Yakınlaştırma › Yumuşak geçiş" biçiminde) ve tüm HUD elementleri. Her sonuçta "X içinde" yolu yazar; tıklayınca ilgili sayfa, modül veya element açılır.

Davranış

  • Bölümler katlanabilir; başlığa tıkla. Katlama durumu ekran açık kaldıkça hatırlanır.
  • Yumuşak kaydırma: içerik bir kez kurulur, kaydırmada yeniden kurulmaz; kontroller hedefe ~120 ms'de üstel olarak yaklaşır.
  • Uzun açıklamalar "…" ile kısaltılır ve tamamı araç ipucunda görünür.
  • Ayarlar değiştiği anda uygulanır; kayıt ≈0,5 sn sonra yapılır, ekran kapanınca bekleyen tüm kayıtlar hemen yazılır.
  • Klavye: Tab ile gezinme; odaklanan kontrol mor bir halka alır.

Görsel dil

Arayüz tek bir sistem gibi okunur: neredeyse siyah, hafif indigoya çalan zeminler; beyaz birincil metin; gri ikincil metin; "açık" için yeşil; tek bir mor accent. 1.4.5'ten beri görünüm sadedir: düğme, kart ve girişlerde 2/3/4 px köşeler, düz kaydırıcı rayları ve kaydırma çubuğu.

Accent yalnızca üç yerde kullanılır: seçili kenar çubuğu öğesinin şeridi, klavye odak halkası ve rengi "accent'i izle" olan HUD elementi. Başka hiçbir kontrol renkli değildir; yoğun bir ekranı okunur tutan budur.

Hareketi azalt

Genel → Hareketi azalt tüm arayüz geçişlerini anlık yapar: ekran açılış/kapanış kaymaları, sayfa girişi, kenar çubuğu şeridi, hover renkleri, anahtar topuzu, düzenleyici kılavuzları, kaydırma yumuşatması ve zoom geçişi. P-LUMA'da hiçbir animasyon kendi başına dönmez; hareket yalnızca bir kullanıcı eylemine yanıt verir.

Siyah yükleme ekranı

Kaynak yeniden yükleme ekranı (Mojang logosu ve ilerleme çubuğu) Mojang kırmızısı yerine düz siyahla çizilir. Logo, ilerleme çubuğu ve yükleme mantığı değişmez; hiçbir vanilla erişilebilirlik seçeneği oyuncuya dayatılmaz.

Simgeler

Arayüzdeki çizgi simgeleri bir web sitesinin simgeleri gibi tasarlanmıştır: 16 birimlik bir ızgarada, sabit kalınlıkta yuvarlak uçlu çizgiler. Beyaz çizilir, kullanıldığı yerde renklendirilir. assets/pluma/textures/gui/icons/ altında durdukları için bir kaynak paketi modu değiştirmeden herhangi birini değiştirebilir.

Özellikler

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ı

ÖzellikBu mod kimliklerinden biri yüklüyseNe olur
Yakınlaştırmazoomify, ok_zoomer, logical_zoom, wi_zoomModül çekilir, C kaydedilmez, GameRendererMixin ve MouseMixin uygulanmaz
Serbest bakışfreelook, perspective, perspectivemod, perspective_modModül çekilir, Sol Alt kaydedilmez, CameraMixin ve EntityLookMixin uygulanmaz
Tam parlaklıkfullbright, fullbrightness, gammautils, lambdabettergrass_fullbright, brightness-sliderModül çekilir, G kaydedilmez, tutulan parlaklık iade edilir
Sohbet geçmişimorechathistory, chatpatches, nochatreset, dont-clear-chat-historyChatHistoryMixin 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

ModKimlikRolAçıklama
SodiumsodiumÖnerilenArazi render'ı: en büyük FPS kazancı
IrisirisÖnerilenShader desteği, Sodium ile çalışır
Entity CullingentitycullingÖnerilenGörünmeyen varlıkları çizmez
More CullingmorecullingÖnerilenBlok yüzeylerini daha iyi eler
LithiumlithiumGömülüOyun mantığı ve tick optimizasyonu
FerriteCoreferritecoreGömülüBellek kullanımını düşürür
ImmediatelyFastimmediatelyfastGömülüHUD, yazı ve varlık çizimini hızlandırır
Dynamic FPSdynamic_fpsÖnerilenArka 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?

SodiumPolyForm Shield lisansı yeniden dağıtıma izin vermez
IrisSodium'a bağlıdır
Entity Cullingtr7zw Protective Licence
More CullingAyrı kurulum
ModernFixYayı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.
  • @Overwrite ve @Redirect kullanı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.
Özellikler

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.json7HUD düzeni (her element için çapa + ofset), element stilleri ve seçenekleri
config/pluma-perf.json3Performans, sohbet ve arayüz ayarları; otomatik FPS yöneticisi; ödünç alınan vanilla değerleri
config/pluma-modules.json1Modü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; NaN veya Infinity varsayılan değere döner.
  • Dosya ayrıştırılamıyorsa varsayılanlarla başlanır ve bozuk metin yanına <dosya>.corrupt olarak 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; .corrupt bırakılmaz.
  • Dosya daha yeni bir P-LUMA tarafından yazılmışsa yanına .bak yedeğ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 .bak yedeğ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

config/pluma-hud.json (kısaltılmış)
{
  "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 }
    }
  }
}
AlanTür / aralıkAçıklama
anchorX, anchorYSTART · CENTER · ENDBilinmeyen değer elementin mevcut çapasına düşer
offsetX, offsetYtam sayı, ±4096GUI pikseli; canlı HUD ayrıca ekrana kelepçeler (kayıtlı değer değişmez)
scale0,5 – 3NaN → 0,5
enabled, background, panelShadowbooleanYoksa elementin gönderildiği değer
textEffectNONE · SHADOW · OUTLINEBilinmeyen değer varsayılana düşer
radius0 · 2 · 40–4'e kelepçelenip en yakın adıma yuvarlanır
backgroundAlpha0 – 1Panel opaklığı
colorIndex-1 veya 0 – 7-1 = accent'i izle; diğerleri paletteki renk
favoritebooleanAyar merkezinde listenin başına çıkarır
flagsad → booleanElementin beyan ettiği seçenekler; bilinmeyenler atılır

Sürüm geçişleri

Eski sürümNe olduTaşıma
≤ 4Tek bir shadow bayrağı hem paneli hem metni yönetiyorduBu değer hem panelShadow hem metin efektine (gölge/yok) uygulanır
≤ 5Konumlar ekranın kesirleri (x/y) olarak saklanıyorduBilerek 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.
≤ 6Köşe adımları 6/10/14 px idiTaşınmaz (hepsi en yuvarlak yeni adıma yapışırdı); element yeni varsayılan hafif köşeye döner

pluma-perf.json

AlanVarsayılanAralık
entityCulling / entityDistancefalse / 648 – 256
nameTagCulling / nameTagDistancefalse / 324 – 128
nameTagLookOnlyfalse—
itemCulling / itemCullDistancefalse / 328 – 128
blockEntityCulling / blockEntityDistancefalse / 6416 – 256
signTextCulling / signTextDistancefalse / 164 – 64
particleLimit1000 (sınırsız)0 – 1000
disableWeather, disableSkyfalse—
hudRefreshLimit / hudRefreshHzfalse / 605 – 240
reduceMotionfalse—
moreChatHistorytrue—
chatHistoryLimit1000100 – 10000
chatHistoryUnlimitedfalsetrue = 50.000 satır
keepChatAcrossServerstrue—
autoFpstrue (yeni kurulumda)—
autoFpsTarget0 (monitör)0 veya 30 – 480
autoFpsAggressivefalse—
customTitleScreen, customPauseScreentrue—

İç durum alanları

Bu alanlar oyuncunun ayarı değil, "ödünç alma" sözleşmesinin kaydıdır. Elle değiştirme.

gammaOverrideActive, savedGammaTam parlaklık parlaklığı tutarken oyuncunun kendi değeri (0 – 1)
autoOverrideActive, savedViewDistance (0 – 64), savedEntityScale (0 – 5), savedCloudModeAgresif mod vanilla ayarlarını tutarken özgün değerler. Bilinmeyen bulut modu "Süslü" kabul edilir.
fullBright, fullBrightStrengthTam parlaklığın 1.4.4 öncesindeki yeri; yalnızca modül kaydı yokken bir kez okunur
chatHistorySürüm 2'nin tek geçmiş sayısı; okunup chatHistoryLimit'e taşınır, bir daha yazılmaz

pluma-modules.json

config/pluma-modules.json (kısaltılmış)
{
  "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ürSaklamaKelepçeleme
Anahtar0 / 1≥ 0,5 → 1, değilse 0
KaydırıcısayıAralığa kelepçelenir ve adıma yuvarlanır
Seçimseçeneğin sırası (0'dan)Aralığa kelepçelenip tam sayıya yuvarlanır
RenkARGB 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ırlanacakYapılacak
Tek bir HUD elementiElementin ayar sayfası → Elementi sıfırla
Tüm HUDGenel → Tüm elementleri sıfırla
Tek bir modülModülün sayfası → Modülü sıfırla
Performans ayarlarıPerformans → Hazır ayarlar → Vanilla (mesafe değerleri korunur)
Her şeyOyunu 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.

Yardım

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 varsa crash-reports/ altındaki dosya)
  • İlgiliyse config/pluma-*.json dosyaları
Geliştirici

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

ProjeP-LUMA — Minecraft Fabric istemci mod'u
SürümNova 1.4.5 (test derlemeleri 1.4.5-alpha.N / 1.4.5-beta.N, yayın 1.4.5)
İsimlerMojang 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

PaketSorumlulukBaşlıca sınıflar
clientGiriş noktası, sürüm kimliği, tuş kategorisi, atomik dosya yazma, Mod Menu köprüsüPlumaClient, PlumaVersion, PlumaKeys, ConfigFiles, PlumaModMenu
client.compatSürümler arasında yeri/adı değişen her çağrıMc, input.KeyEvent, input.MouseButtonEvent
client.hudWidget 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.moduleModül tabanı, kayıt ve yapılandırma, 9 modülPlumaModule, PlumaModules, *Module
client.optionModül seçeneği beyanı ve değer deposuOption, OptionValues
client.perfPerformans ayarları, otomatik FPS, tam parlaklık, mod uyumuPerfConfig, AutoPerf, AutoPerfMath, FullBright, ModCompat
client.renderŞekil çizimi, doku atlası, tasarım token'ları, zamanlamaDraw, ShapeAtlas, Theme, Motion
client.screenAyar merkezi, menüler, sohbet aramasıPlumaSettingsScreen, PlumaMenuScreen, PlumaTitleScreen, PlumaPauseScreen, PlumaChatSearchScreen
client.uiKontroller, simgeler, sohbet arama düğmesiControls, Icons, ChatSearchButton
client.devYalnızca geliştirme ortamında: ölçüm turu ve tanıtım görüntüleriDevHarness, DevShowcase
mixinMixin eklentisi ve 20 mixinPlumaMixinPlugin, 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.

1 · YapılandırmaPlumaHud.load() → PerfConfig.load() → PlumaModules.load()
Modüller, tam parlaklığı tohumlamak için PerfConfig'i okur
2 · GeliştirmeDevHarness.register(), DevShowcase.register()
Yalnızca dev ortamı + sistem özelliği
↓
3 · Tuşkey.pluma.hud_editor (Sağ Shift), kategori PlumaKeys.CATEGORY
4 · HUD katmanlarıaddLast(pluma:hud); SCOREBOARD/BOSS_BAR vekille sarılır; STATUS_EFFECTS efekt elementi açıkken susturulur
↓
5 · ModüllerPlumaModules.init(): CROSSHAIR değiştirilir, dünya olayları, zoom/serbest bakış/tam parlaklık tuşları
6 · BağlantıDISCONNECT → TpsTracker.reset(); CHAT arama ekranı açıkken susturulur
↓
7 · CLIENT_STARTEDAutoPerf.restoreAfterCrash, FullBright.restoreAfterCrash
8 · END_CLIENT_TICKInputTracker → PlumaHud.tick → PerfConfig.tick → AutoPerf → FullBright → PlumaModules.tickAll → düzenleyici tuşu
9 · CLIENT_STOPPINGAutoPerf.reset, FullBright.restore, üç yapılandırmanın flush'ı
↓
10 · ScreenEvents.BEFORE_INITVanilla TitleScreen → PlumaTitleScreen; menülü PauseScreen → PlumaPauseScreen (etkinse)
11 · ScreenEvents.AFTER_INITVanilla menülere köşe simgeleri; ChatScreen giriş satırı daraltılır + ChatSearchButton

Temel 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ı

APIKullanım
HudElementRegistry.addLastpluma:hud katmanı
HudElementRegistry.replaceElementSCOREBOARD, 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_TICKTüm tick mantığı
ClientLifecycleEvents.CLIENT_STARTED / CLIENT_STOPPINGÇökme sonrası geri yükleme, kapanışta flush
ClientPlayConnectionEvents.DISCONNECTTPS ölçümünü sıfırla
ScreenEvents.BEFORE_INIT / AFTER_INIT, ScreensMenü değiştirme, köşe simgeleri, sohbet arama düğmesi
KeyBindingHelper / KeyMappingHelper (26.x)Tuş kaydı
Geliştirici

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

GradleWrapper 9.7.1 (9.5+ şart) · org.gradle.jvmargs=-Xmx2G, org.gradle.parallel=false
Stonecutterdev.kikugie.stonecutter 0.9.8
Loomdev.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
Toolchainorg.gradle.toolchains.foojay-resolver-convention 1.0.0 — 26.x için Java 25 kurulu değilse indirir
Java26.x → 25, 1.21.x → 21 (release, sourceCompatibility ve mixin compatibilityLevel buna göre)
Fabric LoaderGeliştirmede 0.19.5, yayınlanan mod en az 0.19.3 beyan eder
İsimlerloomx.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örevNeredeNe yapar
buildAllkökHer sürüm düğümünün collectJar'ına bağlıdır; jar'ları build/libs/<mod.version>/'e toplar
collectJarsürümO sürümün yayın jar'ını build/collected'a kopyalar
releaseJarsürümbuild'e bağlıdır; release_stage != final ise GradleException fırlatır
runHarnesssürüm-Dpluma.dev.harness=true ve -XX:StartFlightRecording=filename=harness.jfr,settings=profile,dumponexit=true
runShowcasesü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"
FinalTest derlemesi (ör. beta 2)
Mod sürümü1.4.5+26.21.4.5-beta.2+26.2
Jar adıpluma-nova.1.4.5-26.2.jarpluma-nova.1.4.5-beta.2-26.2.jar
Kaynak jar'ıpluma-nova.1.4.5-26.2-sources.jarpluma-nova.1.4.5-beta.2-26.2-sources.jar
Arayüzde (PlumaVersion.label())Nova 1.4.5Nova 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 tutucuKaynak
${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üğümDerlenen MCmc_compatFabric APIMod MenuLithiumFerriteCoreImmediatelyFast
1.21.61.21.61.21.60.128.215.0.20.17.0 XWGBHYcB8.0.4 LdlksamY1.10.3 9JPEk4KN
1.21.71.21.71.21.70.129.015.0.20.18.0 77EtzYFA8.0.4 LdlksamY1.11.2 WbU84LUp
1.21.81.21.81.21.80.136.115.0.20.18.1 qxIL7Kb88.0.4 LdlksamY1.12.6 zihthChu
1.21.101.21.101.21.100.138.416.0.10.20.1 NsswKiwi8.1.0 bPLllEgi1.13.6 9hztj0xA
1.21.111.21.111.21.110.141.617.0.00.21.4 Ow7wA0kG8.2.0 Ii0gP3D81.14.3 4EwhsTu7
26.126.1.2~26.10.155.318.0.10.24.7 Oqq8TOAV9.0.0 d5ddUdiB1.15.3 xOA9hbpf
26.226.2~26.20.160.020.0.20.25.3 f7vZ0VWU9.0.0 d5ddUdiB1.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 exclusiveContent ile daraltılmıştır: Terraformers yalnızca com.terraformersmc, Modrinth Maven yalnızca maven.modrinth grubu 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 PlumaModMenu sı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

  1. stonecutter.properties.toml'da mod.version'ı güncelle, mod.release_stage = "final" yap.
  2. CHANGELOG.md, README.md/README.tr.md ve wiki sayfalarını güncelle.
  3. ./gradlew buildAll ile tüm jar'ları build/libs/<sürüm>/'e topla; sürüm başına releaseJar final olmayanı reddeder.
  4. Jar'lar için SHA256SUMS.txt üret.
  5. Jar'ları ve SHA256SUMS.txt'yi klasfimo/P-LUMA-Nova-Wiki deposunda v<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.

Geliştirici

Ç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.

Aktif sürümü değiştirme

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şul1.21.11 kaynağındaDiğer sürümde
≥ 1.21.9org.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 lightSubmitNodeCollector queue, int light
≥ 1.21.11ResourceLocationIdentifier
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 areaLevel area
≥ 26.1GuiGraphicsGuiGraphicsExtractor
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(contextextractPanorama(context, extractBlurredBackground(context
components.PlayerFaceRenderer, PlayerFaceRenderer.draw(components.PlayerFaceExtractor, PlayerFaceExtractor.extractRenderState(
VanillaHudElements.STATUS_EFFECTSVanillaHudElements.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.11Farklılık
screen(), setScreen(s)mc.screen, mc.setScreen26.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.hideGui26.2: gui.hud.toggle()
actionBar(msg), clientMessage(msg)displayClientMessage(msg, true), chat().addMessage26.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.registerKeyBinding26.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.getButtons26.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

Konu1.21.6–1.21.81.21.101.21.1126.126.2
GUI çizim tipiGuiGraphics←←GuiGraphicsExtractor←
Girdi(double, double, int)MouseButtonEvent/KeyEvent←←←
Tuş kategorisiStringKeyMapping.Category←←←
Kaynak kimliğiResourceLocation←Identifier←←
Dünya render olayıv1.WorldRenderEvents (hit result)v1.world.WorldRenderEvents←v1.level.LevelRenderEvents← (yalnız submitNodeCollector)
Çizgi kalınlığıyokyokvertex başına←←
Açık ekran / sohbetmc.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 renderrenderArmWithItem(… MultiBufferSource …)(… SubmitNodeCollector …)←←submitArmWithItem
Blok varlığı cullingBlockEntityRenderDispatcher.rendertryExtractRenderState←←+ boolean
Tabela yazısırenderSignTextsubmitSignText(…, boolean front)←submitSignText(…, SignText)←
Ters nişangah hattı1.21.6'da yok (beyaz)GUI_INVERT←←←
Atlas alt bölge yüklemevar←←←yok (tüm atlas yüklenir)

Yeni Minecraft sürümü eklemek

  1. settings.gradle.kts'e version("<ad>", "<mc>") ekle.
  2. stonecutter.properties.toml'a o sürümün bloğunu ekle: mod.mc_compat, mod.mc_releases, deps.fabric_api, deps.modmenu ve gömülü modların Modrinth sürüm kimlikleri.
  3. ./gradlew :<ad>:genSources ile decompile kaynaklarını üret; her mixin hedefini (metot adı, descriptor, handler parametre tipleri) o sürümde ayrı doğrula.
  4. Kırılan yerleri üç yoldan biriyle çöz: isim değişikliği → replacements; çağrı → Mc; gövde → //? if.
  5. ./gradlew :<ad>:runHarness ile ekranları gez ve rapora bak; Fabric API'de gerekli render olaylarının olduğundan emin ol (1.21.9 bu yüzden yok).
Geliştirici

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.

Kural

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.

MetotQuadNot
roundedRect7 (yarıçap 0'da 1)4 köşe + 3 span
roundedOutline8Kalınlık GUI pikseli (her ölçekte aynı ağırlık), yalnızca eğri fiziksel çözünürlükte basamaklanır
shadow96 GUI px yayılım, 1 px aşağı, güç 1'de tepe alfa 48/255, karesel düşüş
panel24shadow + roundedRect + roundedOutline
roundedGradient≤ 14Soldan sağa; köşeler kenar renginde, ortada en fazla 8 dilim
verticalGradient1Tek 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

BG_VOID#07070C
SURFACE#0E0E15
SURFACE_ELEVATED#15151E
SURFACE_HOVER#1C1B26
SURFACE_INPUT#201F2A
TEXT#FFFFFF
TEXT_SECONDARY#9BA1A9
TEXT_DISABLED#63686F

Accent ve durum

ACCENT#8F6BFF
SUCCESS#2FA84F
SUCCESS_DEEP#1E6E31
NEUTRAL#2A2D33
KNOB_OFF#B9BEC5
WARNING#F0A93B
DANGER#E23B44
LOADING_BACKGROUND#000000
TokenDeğerKullanım
BORDER / BORDER_STRONGbeyaz %10 / %20İnce kenar; hangi yüzeydeyse "bir ton açık" okunur
HUD_LABEL#B8FFFFFFHUD etiketleri: gri yerine alfalı beyaz, karda/gökyüzünde kaybolmaz
TEXT_OUTLINE#FF000000Kontur metin efekti
SCRIM#B3000000Canlı oyun üstündeki tam ekran karartma
TRACK, SCROLL_TRACK, SCROLL_THUMBbeyaz %12 / %6 / %35Kaydırıcı rayı, kaydırma çubuğu
EDITOR_HOVERbeyaz %45Düzenleyicide üzerine gelinen element
PREVIEW_DARK / PREVIEW_LIGHT#05070B / #C9D4DFÖnizleme zeminleri
SWATCHES8 renkHUD elementi paleti (colorIndex 0–7)
PICKER_COLORS10 renkModül renk seçenekleri: beyaz, gri, siyah + ilk 7 palet rengi; accent yok

Boyutlar ve hareket

TokenDeğer
RADIUS_NONE / SM / MD / LG0 / 2 / 3 / 4 px — çip/giriş 2, düğme 3, kart/çerçeve 4, çubuklar 0. Hap şekli (height/2) kullanılmaz.
RADII, HUD_RADIUSHUD elementi adımları {0, 2, 4}; varsayılan 2
SPACE_1…64 / 8 / 12 / 16 / 24 px (4 px taban birim)
CONTROL_HEIGHT, MENU_BUTTON_HEIGHT, ICON_BUTTON18 / 20 / 16 px
SIDEBAR_ROW, ROW_HEIGHT, CONTROL_PAD_X22 / 32 / 10 px
SCALE_STOPS0.5, 0.75, 1, 1.25, 1.5, 2, 3
MOTION_SCREEN_IN / OUT180 / 120 ms
MOTION_GUIDE_IN / OUT, MOTION_TOGGLE, MOTION_HOVER, MOTION_HOVER_FADE80 / 120, 120, 100, 90 ms
MOTION_SHIFT, MOTION_PAGE_SHIFT4 / 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: true içeren bir .png.mcmeta taşır; doğrusal filtreleme olmadan Minecraft her dördüncü texel'i örnekler.
  • Simgeler beyazdır, Icons.draw(..., color) ile renklendirilir. logo.png dışındakiler tools/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.
Geliştirici

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

MixinHedefKancaNe yapar
EntityRenderManagerMixinEntityRenderDispatcher.shouldRenderHEAD, iptal edilebilirVarlık ve eşya/XP küresi mesafe culling. Oyuncular ve kamera varlığı muaf.
NameTagRenderMixinEntityRenderer.shouldShowNameHEADİsim etiketi mesafesi ve kamera tabanlı bakış konisi (FOV + en-boy köşegeni + 15°)
BlockEntityRenderManagerMixinBlockEntityRenderDispatcher.tryExtractRenderStateHEAD → nullBlok varlığı mesafe culling. 26.2: ek boolean parametre; <1.21.9: render HEAD iptal
SignTextMixinAbstractSignRenderer.submitSignTextHEADUzak tabelanın yazısı. <1.21.9: renderSignText
ParticleManagerMixinParticleEngine.add(Particle), tickHEAD, HEADTick başına parçacık bütçesi (tick'te sıfırlanır)
WorldRendererMixinLevelRenderer.addWeatherPass, addSkyPassHEADHava ve gökyüzü geçişlerini atla
SplashOverlayMixinLoadingOverlay.<clinit>TAILBRAND_BACKGROUND tedarikçisini siyahla değiştirir (@Mutable @Shadow @Final)
SimpleOptionAccessorOptionInstance.value@AccessorDoğrulayıcıyı atlayarak parlaklık yazma (tam parlaklık)
ChatHistoryMixinChatComponent.addMessageToQueue, addMessageToDisplayQueue@ModifyConstant(100)Sohbet geçmişi sınırı → effectiveChatHistory()
ChatHudMixinChatComponent.addMessage(Component, MessageSignature, GuiMessageTag), clearMessagesHEAD, HEADBaşarım sohbet satırlarını gizle; bağlantı kesilirken sohbeti koru. 26.1+: addMessage ek GuiMessageSource
ChatHudAccessorChatComponent.allMessages@AccessorSohbet araması için mesaj listesi (en yeni önce)
ChatScreenAccessorChatScreen.input, initial@AccessorGiriş satırını daralt; Shift+tık metnini geri yaz
BossBarHudAccessorBossHealthOverlay.events@AccessorBoss çubuğu sayısı (vekil kutusu için)
ClientPlayNetworkHandlerMixinClientPacketListener.handleSetTimeTAILTPS ölçümü. HEAD olsaydı ağ thread'inde de çalışıp her paketi iki kez sayardı
GameRendererMixinGameRenderer.getFov (yalnızca changingFov)RETURNZoom FOV'u. 26.x: @Mixin(Camera), calculateFov
MouseMixinMouseHandler.turnPlayer, onScrollHEAD, HEADZoom hassasiyeti; zoom sırasında tekerlek
HeldItemRendererMixinItemInHandRenderer.renderArmWithItemHEAD / RETURNZoom'da eli gizle; ViewModel dönüşümü (push/pop). 26.2: submitArmWithItem
CameraMixinCamera.setup → setRotation(FF)V ordinal 0 ve 1INVOKE, AFTERSerbest bakış kamera açısı. Ordinal 2 (ön görünüm çevirisi) dokunulmaz. 26.x: alignWithEntity
EntityLookMixinEntity.turnHEAD, iptal edilebilirSerbest bakışta fare hareketini yerel oyuncu yerine kameraya yönlendir
ToastManagerMixinToastManager.addToastHEAD, iptal edilebilirBaş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
ChatHistoryMixinmorechathistory, chatpatches, nochatreset, dont-clear-chat-history
GameRendererMixin, MouseMixinModCompat.ZOOM_MODS: zoomify, ok_zoomer, logical_zoom, wi_zoom
CameraMixin, EntityLookMixinModCompat.FREELOOK_MODS: freelook, perspective, perspectivemod, perspective_mod

Kurallar

  • @Overwrite ve @Redirect yok. Diğer modlarla uyum şart. Tek istisna ChatHistoryMixin'in @ModifyConstant'ı.
  • @Redirect ayrıca şu nedenle yasak: Loom at = @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 @Redirect o loader'da oyunu açılışta çökertirdi. (0.5.5 düzeltti; düzeltmeye bağımlı olmamak daha iyi.) SplashOverlayMixin bu yüzden yönlendirme yerine alan değişimidir.
  • Yeni kanca: HEAD/RETURN @Inject + bir ayar kapısı + pluma$ öneki + pluma.client.mixins.json kaydı.
  • Hedef (metot adı, descriptor, handler parametre tipleri) her sürümde ayrı ./gradlew :<sürüm>:genSources ile doğrulanır. Handler parametreleri hedefle birebir aynı tipte olmalı; üst tip kabul edilmez (Camera.setup'ın BlockGetter → Level değ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ı, @Unique sayaç RETURN'e pop edecek bir şey olup olmadığını söyler.
Geliştirici

Arayüz Bileşenleri

Controls içindeki kontroller ve ayar merkezinin (PlumaSettingsScreen) kuruluş mimarisi.

Kontroller

SınıfGö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()
SliderSolda 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.
Toggle24×13 anahtar; kapalı nötr gri, açık yeşil, topuz easeOut ile kayar
ChipSüzgeç çipi; aktif parlak nötr dolgu + güçlü kenar
SegmentedAçı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.
IconButtonKare simge düğmesi; active(), tint(), framed(false) (kalp gibi durumunu glifte gösteren)
KeyButtonTuş 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ı.
TextInputVanilla EditBox'ın tüm düzenleme davranışı (seçim, pano, imleç), yalnızca kutusu P-LUMA görünümünde; placeholder
SwatchPalet 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 = 0 koordinatlarıyla kurulur. Kaydırılabilir alana eklenen her kontrol addContent ile 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çinde rebuild() doğrudan çağrılmaz; needsRebuild = true iş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.

Geliştirici

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.

client/hud/PlumaHud.java
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): -1 accent'i izler, 0–7 palet.
  • plain(): panelsiz + konturlu metin (kısa göstergeler için). solid(): %90 opak panel (bileşik elementler için).
  • id config anahtarıdır; bir kez yayınlandıktan sonra asla değiştirme.
  • Dil anahtarları: pluma.widget.<id>.label, pluma.widget.<id>.desc (hem en_us.json hem tr_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.

client/module/AutoSprintModule.java (örnek)
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") ...
    }
}
client/module/PlumaModules.java
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()'yu ModCompat.firstLoaded(listeniz) ile geçersiz kıl; init()'te sahip varsa tuş kaydetme. İlgili mixin'leri PlumaMixinPlugin.SKIP_IF_LOADED'a ekle.
  • Önizleme: hasPreview() true ve renderPreview(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_note ekle ve ayar ekranındaki koşula modülü ekle.

Seçenek türleri

FabrikaKontrolDeğer okuma
Option.toggle(owner, key, def)Toggleoptions.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)KeyButtonoptions.integer(key); Option.isMouse(code)

Yeni performans ayarı

  1. PerfConfig'e alan ekle (varsayılanıyla) ve clamp()'e kelepçesini yaz — NaN/Infinity için clamp(value, min, max, fallback) kullan.
  2. Mixin'lerin okuyacağı bir effective*() metodu ekle; AutoPerf ile birleşiyorsa "katı olan kazanır".
  3. 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.
  4. PlumaSettingsScreen.buildPerformance()'a satırı ekle.
  5. SEARCH_INDEX'e SearchEntry ekle.
  6. Dil anahtarları (pluma.perf.<ad>, .desc) ve gerekiyorsa hazır ayarlara değer.
  7. Dosya biçimi uyumsuz değiştiyse CONFIG_VERSION'ı artır ve load()'a geçiş yaz.

Hiçbir performans ayarı oyuncuları gizleyemez ve chunk/arazi render'ına dokunamaz.

Yeni simge

  1. tools/GenerateIcons.java'ya 16 birimlik ızgarada çizen bir fonksiyon ve icons.put("ad", GenerateIcons::ad) ekle.
  2. java tools/GenerateIcons.java çalıştır (64×64 PNG + .png.mcmeta üretir).
  3. Icons.Icon enum'una AD("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 @Inject mı, hedef her sürümde doğrulandı mı?
  • Animasyonlar Motion.reduced()'a uyuyor mu?
  • İki dil dosyası da güncel mi?
  • HudMath/AutoPerfMath değiştiyse self-check'ler geçiyor mu?
Geliştirici

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ımOturma / ölçüm (tick)Ne olur
title60 / 60Ana menü
settings-hud, settings-performance30 / 60Ayar merkezi sayfaları
settings-general, settings-modules30 / 40Ayar merkezi sayfaları
world-load0 / 1Sürüm başına test dünyası (pluma-harness-<mc>): yoksa yaratıcı, barışçıl, komutlar açık
world-setup60 / 1Skor 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-hud100 / 80Oyun içi HUD
free-look20 / 20Serbest bakış aç/kapa modunda, 90° dönüş
full-bright-night30 / 20Gece yarısı + tam parlaklık
hud-editor30 / 80HUD düzenleyici
chat, chat-search20 / 20Test satırları eklenir, sohbet ve arama ekranı
settings-ingame30 / 80Oyun içinde ayar merkezi
module-crosshair30 / 30Niş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.

Bilinen tuzaklar
  • 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 (view boş): 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) ve showcase-ui-hud, -pause, -settings-hud, -settings-modules, -settings-performance, -crosshair, -hud-editor gö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ıfDoğrulananlar
HudMathKelepç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.javajava 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.javajava 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.javajava 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.

Geliştirici

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

  1. Oyuncular gizlenmez — hiçbir ayarla, hiçbir mesafede, otomatik FPS yöneticisi dahil. Kamera varlığı da muaftır.
  2. Chunk/arazi render'ına dokunulmaz — orası Sodium'un alanı.

Uyumluluk

  1. Tüm mixin kancaları @Inject (+ @Accessor/@Shadow); tek istisna ChatHistoryMixin'in @ModifyConstant'ı. @Overwrite ve @Redirect yok.
  2. Aynı işi yapan mod varsa PlumaMixinPlugin mixin'i uygulamaz, perf/ModCompat özelliği çalışma anında devre dışı bırakır.
  3. Mixin hedefi her sürümde ayrı doğrulanır; handler parametreleri hedefle birebir aynı tipte olmalı.

Veri

  1. 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 .corrupt kopyasını bırak.
  2. Yazma yalnızca ConfigFiles.write ile (atomik).
  3. HudWidget.id ve modül id'si config anahtarıdır; değiştirilmez.
  4. HUD konumu çapa + GUI-piksel ofsetidir (HudMath), kesir değil. Kenara yapışık element o kenardan büyür. renderContent ölçekten habersizdir.
  5. Ödünç alınan vanilla değerleri önce park edilir ve her zaman geri verilir (çökme sonrası dahil).
  6. Veri yoksa element çizilmez.

Görünüm

  1. Renk, radius, spacing, kontrol yüksekliği, geçiş süresi yalnızca Theme.java'da; hiçbir yerde sabit kodlanmış renk yok.
  2. Görünüm sade: köşeler 2/3/4 px (RADIUS_SM/MD/LG), çubuklar RADIUS_NONE; hap şekli (height / 2) kullanılmaz.
  3. Ayar ekranında accent yalnızca üç yerde: seçili kenar çubuğu öğesi, klavye odak halkası ve HUD elementinin "accent'i izle" renk çipi.
  4. 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.
  5. focusRing ve anlatım (narration) erişilebilirlik için korunur.

Performans

  1. Tüm şekil çizimi Draw'da, framebuffer uzayında ve ShapeAtlas üzerinden: şekil başına sabit quad, tek doku/tek pipeline. Satır satır fill taraması yok.
  2. Draw.pushBatch matrise dokunmaz; batch içinde çizilen metin/ikon/eşya normal boyutta kalır.
  3. Ayar ekranı kaydırmada rebuild etmez: içerik bir kez kurulur, addContent ile eklenen kontroller kaydırılır. render()/olay içinde doğrudan rebuild() çağrılmaz.
  4. Animasyon kendiliğinden dönmez; reduceMotion her geçişi anlık yapar.

Kod ve süreç

  1. 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.
  2. 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.
  3. Yeni sürüm = settings.gradle.kts'e version(...) + stonecutter.properties.toml'a blok. 1.21.x'te her yama ayrı jar.
  4. Yalnızca release_stage = "final" yayınlanır.
  5. Dosyalar PowerShell 5.1 Get-Content/Set-Content ile yeniden yazılmaz (UTF-8 bozulur).
Proje

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 .corrupt olarak saklanır.
  • Elle düzenlenen pluma-perf.json'daki NaN veya Infinity varsayı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ı.
Proje

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.

ModYazarlarLisansKaynak
LithiumCaffeineMCGNU LGPL-3.0-onlygithub.com/CaffeineMC/lithium
FerriteCoremalte0811MITgithub.com/malte0811/FerriteCore
ImmediatelyFastRaphiMCGNU LGPL-3.0-or-latergithub.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

SodiumPolyForm Shield lisansı yeniden dağıtıma izin vermez
IrisSodium'a bağlı
Entity Cullingtr7zw Protective Licence
More CullingAyrı kurulum
ModernFixYayı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

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.