Rehber
Seni öğrenen bir Minecraft modu yazmak
Oyuncuyu öğrenen bir Minecraft Fabric modunun geliştirme notları: alışkanlıkları saymak, SavedData ile dünyaya yazmak ve Araz beta.2'de tempo ayarı.
Kısaca Araz, Minecraft 26.3, 26.1.2, 1.21.10 ve 1.20.1 için yazılmış bir Fabric korku modu. Yaratık yeteneklerini oyuncunun yaptıklarını sayarak açıyor: dört kapı kullanımı, beş hayvan ziyareti, üç köy gezisi, üç uyku. Bu sayaçlar tek bir SavedData kaydıyla dünyaya yazılıyor, yani oturumlar arasında seni hatırlıyor. Güncel sürüm 1.0.0-beta.2.
Araz, tek başıma yazdığım bir Fabric korku modu. Yaratığın hazır bir hareket listesi yok. Tek bir yetenekle başlıyor, geri kalanını oyuncunun önünde yaptıklarını sayarak açıyor ve bu sayaçlar dünya kaydına yazılıyor. Eylül 2026 itibarıyla güncel sürüm 1.0.0-beta.2; Minecraft 26.3, 26.1.2, 1.21.10 ve 1.20.1 üzerinde çalışıyor.
Bu bir tanıtım değil, bir yapım yazısı. Öğrenme sisteminin neden var olduğunu, verinin nerede durduğunu ve "çok sık çıkıyor" geri bildiriminden sonra beta.2'de tempo kapısını nasıl baştan yazdığımı anlatıyor. Oyuncu tarafında neye benzediğini görmek istersen mod sayfası spicesfire.com/araz adresinde.
Aşağıdaki her şey modun kendi MODRINTH.md ve CHANGELOG.md dosyalarından doğrulanabilir; ikisi de kaynak kodun yanında duruyor.
Korku modları neden bir süre sonra korkutmuyor?
Bir takip modu aşağı yukarı iki saat ürkütücüdür. Yaratığın sabit bir davranış kümesi vardır, oyuncu hepsini görür ve o andan sonra her beliriş bir tekrardır. Korku zaten modelden gelmiyordu. O şeyin neler yapabileceğini bilmemekten geliyordu.
Yani tasarım problemi "daha çok davranış ekle" değil. "Oyuncunun kümenin tamamını gördüğü anı geciktir ve sırayı kişiselleştir" problemi. Benim cevabım yetenekleri zamana ya da oyuncunun ilerlemesine değil, gözleme bağlamak oldu. Yaratık, birinin kapı açtığını görmeden kapı açamıyor.
Yaratık oyuncudan nasıl öğreniyor?
Her gözlem türü için, her oyuncu başına bir sayaç var. Sayaç eşiği geçince ilgili yetenek açılıyor ve oyuncuya ne olduğunu söyleyen tek satırlık bir mesaj gidiyor. Eşikler modun kendi tasarım notlarında, HIKAYE-BRIEF.md dosyasında duruyor ve kaynaktaki enum ile birebir aynı.
| Neyi izledi | Kaç kez gerekiyor | Ne açıldı |
|---|---|---|
| Kapını açıp kapatman | 4 | Kapılar ve camlar engel olmaktan çıkıyor |
| Hayvanlarının yanından zarar vermeden geçmen | 5 | Hayvanlarını ele geçirebiliyor |
| Köylülerin arasında dolaşman | 3 | Köylü kılığında aralarında durabiliyor |
| Uyuman | 3 | Bedenine girebiliyor |
Duvara tırmanma, eşiği sıfır olan tek yetenek; yani yeni bir dünya tamamen dişsiz başlamıyor. ogrenmeHiziCarpani ayarı bütün eşikleri ölçekliyor: 200 gereken gözlem sayısını yarıya indiriyor, 50 iki katına çıkarıyor. Ölçekleme okuma anında uygulanıyor, bu yüzden ayarı dünyanın ortasında değiştirmek kayıtlı sayaçları bozmuyor.
Kapını açıp kapattığını izledi. Artık kapılar onu durdurmuyor.
Öğrenilen veri dünyaya nasıl yazılıyor?
Hepsi, overworld'ün veri deposuna bağlı tek bir SavedData kaydında duruyor ve RecordCodecBuilder ile kurulmuş bir codec üzerinden serileşiyor. Tek blob, tek dosya, bir şey ters gittiğinde bakılacak tek yer. İçinde şunlar var.
- Hangi oyuncular bir kerelik ilk tanışma sahnesini gördü.
- Oyuncu başına: kapı, hayvan, köylü ve uyku gözlemlerinin her birinin kaç kez sayıldığı.
- Oyuncu başına: kaç karşılaşma yaşandığı, ilk tanışmadan sonra kaç gece atlatıldığı ve hangi Bozuk Kayıt parçalarının okunduğu.
- Terk edilmiş kamp ile portal kalıntısının bu dünyada kurulup kurulmadığı ve kampın tam olarak nereye oturtulduğu.
- Onu kimlerin öldürdüğü ve kalıntı muhafızının kimleri dışarı attığı.
İlk alan dışındaki her alan optionalFieldOf ve bir varsayılanla tanımlı. 1.0.0-beta.1 dünyalarının beta.2'de hâlâ açılmasının tek sebebi bu: geceler ya da kalinti_ozu alanlarını hiç duymamış bir kayıt, hata vermek yerine varsayılanı okuyor. Yazması bedava, ama bir yama ile bozuk bir kayıt arasındaki fark tam olarak bu.
beta.1'de neden bu kadar sık çıkıyordu?
beta.1'de yaratığı gözle görülür hale getirebilen altı ayrı yol vardı: ortam karşılaşmaları, kapı ve pencere ziyaretleri, tavandan pusu, maden belirmesi, kaçırmalar ve yatak ziyaretleri. Her birinin kendi zamanlayıcısı vardı, her biri tek başına ayarlanmıştı ve tek başına gayet iyi hissettiriyordu.
Bağımsız oldukları için üst üste bindiler. Kötü bir gecede dördü on dakika içinde ateşleniyordu ve yaratık bir olay olmaktan çıkıyordu. beta.1 geri bildirimleri tek bir özelliğin çok sık olmasıyla ilgili değildi. Toplamla ilgiliydi, ve toplamı kimse ayarlamamıştı çünkü toplam kimsenin sorumluluğunda değildi.
beta.1'den beta.2'ye tempo değişiklikleri
| Ne | beta.1 | beta.2 |
|---|---|---|
| Ortak beliriş bekleme süresi | yok, altı ayrı zamanlayıcı | tek kapı, varsayılan 240 saniye |
| Karşılaşma aralığı | yaklaşık 1,5 - 5 dakika | yaklaşık 4 - 11 dakika |
| Aşinalığın beklemeye indirimi | %45 | %30 |
| Beklemenin alt sınırı | 1 dakika | 4 dakika |
| Kapı arkasında bekleme | %35 | %18 |
| Pencereden izleme | %50 | %22 |
| Tavandan pusu | %25 | %12 |
| Köylü kılığı | %40 | %25 |
| Mağara ağzı başına maden belirmesi | %30 | %18 |
| Maden belirmesi sonrası bekleme | 4 - 10 dakika | 8 - 18 dakika |
| İlk kaçırma | yaklaşık 5 - 10 dakika | yaklaşık 15 - 30 dakika |
| Sonraki kaçırmalar | her 7,5 - 15 dakikada | her 20 - 40 dakikada |
Yapısal düzeltme tablonun ilk satırı. Yaratığı ekrana getirebilen her yol, çalışmasına izin verilmeden önce tek bir koşulu soruyor ve gözle görülen her beliriş tek bir ortak zaman damgasını ileri itiyor. Tablodaki yol bazlı olasılıklar bu kapının üstüne binen ikincil ayar. Yaratığı çağırmayan ortam fesatlıklarına, hayalet ayak seslerine, sönen ışıklara, karıştırılan sandığa dokunmadım; yoksa yaratıkla birlikte atmosfer de sessizleşecekti.
Dört Minecraft sürümü ve 12 dilin maliyeti
Araz, Minecraft 26.3, 26.1.2, 1.21.10 ve 1.20.1 için yayınlanıyor; yalnızca Fabric, Forge ya da NeoForge yapısı yok. Fabric API ve GeckoLib zorunlu; Simple Voice Chat, Mod Menu ve Cloth Config isteğe bağlı. Bu matrisin sürüm başına gerçek maliyeti şu.
- Dört ayrı kaynak ağacı. 26.3 sürüm notuna göre 26.1.2'ye kıyasla entity tipleri, tabela metni, renkli bloklar ve ganimet sayı sistemi değişti ve her çağrı noktasında yeniden yazılmak zorunda kaldı.
- GeckoLib sürüm başına sabitleniyor. Araz'ın 26.3 yapısı GeckoLib 5.5.6 veya üstünü istiyor, yani her mağaza sayfasında farklı bir gereksinim satırı var.
- Her biri yaklaşık 160 anahtarlık 12 dil dosyası: EN, TR, DE, ES, FR, PT-BR, RU, ZH-CN, JA, KO, PL ve IT. Oyun içi tek bir yeni satır, tek düzenleme değil on iki düzenleme demek.
- Çeviri hataları da gerçek hata. beta.2 changelog'u Almanca ve Fransızcada yanlış bir Araz Sunağı başarım açıklamasını ve ayar ekranında hatalı görünen yüzde işaretlerini düzeltilmiş olarak listeliyor.
- Sürüm başına, platform başına birer mağaza kaydı: hem Modrinth hem CurseForge, her biri kendi bağımlılık listesiyle.
Dürüst hali: 26.3 portu bir günlük mekanik API çevirisiydi ve içinde tek satır oynanış işi yoktu; 1.20.1 backport'u daha kötüydü çünkü derleme zincirinin kendisi farklı. Baştan başlasam yine yapardım, çünkü indirmelerin sürümlere dağılması gerçek bir şey, ama API farklarını üçüncü seferde değil ilk seferde yazardım.
İşe yaramayan şeyler
- Altı bağımsız beliriş zamanlayıcısı. Tek tek makul, bir aradayken oynanmaz.
- Araz Özü'nün yalnızca öldürmeden düşmesi. Yaratık canı yarıya inince kaçıyor, yani onu öldüremeyen oyuncu Son Satır'ı hiç dövemiyordu ve hikâye tıkanıyordu. beta.2'de Öz, portal kalıntısının sandığında duruyor.
- Terk edilmiş kampı her sütunun en yüksek bloğuna kurmak. Bu onu ağaç tepelerine ve suyun yüzeyine inşa ediyordu. Artık yer, arazi üreticisinin kendi yükseklik verisinden geliyor ve kuru ve düz olmak zorunda.
- Portal kalıntısına varışı yatay mesafeyle ölçmek. Kalıntının üstündeki yüzeyde durmak kovalamacayı başlatıyor ve muhafızı 40 - 60 blok aşağıda, kayanın içinde doğuruyordu.
- Kampı ve kalıntıyı yalnızca hayatta kalma modunda inşa etmek. Yaratıcı modda, modun az önce fısıldadığı koordinatlar düpedüz taşı gösteriyordu.
- Gözlem sayaçlarını eşikte durdurmak. O zaman kayıt tabelaları ve Gözlem Defteri gerçek sayılar yerine tavana vurmuş sayılar gösteriyordu; sayılmakla ilgili bir modda yapılabilecek en yanlış yalan.
- 26.3 yapısını jar içeriğine bakmadan yayınlamak. Yumurta dokusu mod dosyasında eksikti.
Bu listedeki örüntü şu: yedisinden beşi mantık hatası değil. Hayal etmediğim bir duruma uygulanmış doğru bir kural: yaratıcı mod, bir göl, kendi yapımın çatısında duran bir oyuncu. Korku modları saatlerce başında kimse olmadan çalışan sistemler ve arıza neredeyse her zaman bir formülden değil bir varsayımdan geliyor.
Sırada ne var: Bölüm II
1.0.0-beta.2'deki hikâye portal kalıntısında bitiyor. Çerçeve kırık ve portal sönük kalıyor; bu bilinçli, Bölüm I kapıyı gösteriyor ama açmıyor. Bölüm II kapının öbür tarafı ve henüz çıkmadı. beta.2 hâlâ çok oyunculu raporu toplarken ona tarih vermeyeceğim, çünkü düzgün test ettiğim şey tek kişilik oyun, çok oyunculu değil.
Sürüm notları modun kendi bloğunda, spicesfire.com/araz/blog adresinde yayınlanıyor. Mühendislik tarafı ise burada, bu sitede duruyor; Bölüm II de yazacak bir şey çıktığında aynı muameleyi görecek. Oyun içinde takıldığın yerde /araz help (Türkçesi /araz yardim) sana bir sonraki adımı söylüyor.
Sık sorulan sorular
Araz hangi Minecraft sürümlerini destekliyor?
Araz 1.0.0-beta.2 Minecraft 26.3, 26.1.2, 1.21.10 ve 1.20.1 üzerinde çalışıyor. Yalnızca Fabric; Forge ya da NeoForge yapısı yok.
Araz dünya üretimini değiştiriyor mu?
Hayır. Araz'da hiçbir şey chunk üretimine dokunmuyor. Terk edilmiş kamp ve portal kalıntısı oyuncu yaklaşınca inşa ediliyor, bu yüzden modu mevcut bir dünyaya eklemek güvenli.
Araz'ı çalıştırmak için hangi modlar gerekli?
Fabric API ve GeckoLib zorunlu; Minecraft 26.3 yapısı GeckoLib 5.5.6 veya üstünü istiyor. Simple Voice Chat, Mod Menu ve Cloth Config isteğe bağlı.
beta.2'de yaratık hâlâ çok sık mı çıkıyor?
Çıkmaması gerekiyor. Gözle görülen her beliriş artık beta.1'deki altı bağımsız zamanlayıcı yerine tek bir ortak beklemeden geçiyor, varsayılanı 240 saniye. Yine de fazla geliyorsa config/araz.json içindeki gorunmeBeklemesiSaniye değerini yükselt.
Dünyadan çıkınca yaratık beni hatırlıyor mu?
Evet. Gözlem sayıları, karşılaşma sayısı, atlatılan geceler ve hikâye ilerlemesi dünya kaydına yazılıyor, yani senden öğrendiği yetenekler geri döndüğünde hâlâ açık.
Hikâyenin Bölüm II'si çıktı mı?
Hayır. Bölüm I portal kalıntısında, portal hâlâ sönükken bitiyor. 1.0.0-beta.2 çok oyunculu raporu toplamaya devam ederken Bölüm II'nin bir tarihi yok.