Bash ile yazılmış bir Minecraft sunucusu üzerine düşünceler
- Bash ile Minecraft sunucusu yazma üzerine değerlendirmeler.
- Daha önce 2009 klasik protokolüyle denenmişti, ancak Bash'te ikili veri ayrıştırmada sınırlamalar olduğu görüldü.
- Veriyi okumak ve onaltılık döküm üretmek için
read ve xxd kullanma yöntemi geliştirildi.
- Bash, null baytlarını yok sayıyor ve bunları algılamanın bir yolu olmadığı için veriler bozulabiliyor.
Bash'te null baytı okuma
dd ve xxd kullanarak null baytı içeren ikili verileri işleme yöntemi bulundu.
- Bu yöntemle desen eşleme, veri çıkarma gibi işlemler yapılabiliyor.
ncat kullanılarak Minecraft'ın varsayılan TCP portunda dinleniyor ve bir bağlantı geldiğinde ana kabuk betiği (mc.sh) çalıştırılıyor.
Protokol aslında o kadar da iyi değil
- Minecraft sunucusunun çalışması için uygulanması gereken ilk şey, sunucu listesi ping paketidir.
- VarInt ve VarLong gibi veri tiplerini uygulamanın zorlukları anlatılıyor.
- VarInt/VarLong sayıları uygulamak için LEB128 kodlama yöntemi kullanıldı.
- IEEE754 kayan noktalı sayıları uygulamakta zorlanıldı ve bu sorun
awk ile çözüldü.
"Position" veri tipi
- Mojang'ın yaptığı Position veri tipi, X, Y, Z koordinatlarını 64 bitlik bir Long değerde saklıyor.
- Bu veri tipi Bash'te nispeten kolay uygulanabiliyor.
Named Binary Tag
- NBT, Mojang'ın ikili veriler için oluşturduğu JSON benzeri bir biçimidir.
- NBT ayrıştırıcısı neredeyse tamamlanmıştı, ancak proje dizininin tmpfs olarak kullanılması ve sistem çökmesi nedeniyle kod kaybedildi.
Gerçek sunucuyu yazmak
- Matematiksel kısmın ötesinde, gerçek bir sunucu oluşturmanın eğlenceli bölümüne geliniyor.
- İstemcinin sunucuya katılabilmesi için el sıkışma sürecini tamamlaması ve birkaç paket göndermesi gerekiyor.
- En büyük engeller, Join Game paketi ile Chunk paketi içindeki veri yapılarıdır.
"Eklenti" sistemi
- Sunucunun basit chunk'ların ötesinde daha fazlasını yapabilmesi için, override edilebilir
hook işlevleri ve sunucunun kullanıcı kodu yükleyebilmesini sağlayan bir seçenek oluşturuldu.
- Böylece dünyanın görünümünü değiştirmekten, fareyi hareket ettirdiğinizde oyuncunun tık sesi çıkarmasına kadar çeşitli işlevler uygulanabiliyor.
Witchcraft'ın tuhaflıkları
- Bash'in ondalıklı sayıları işlemede sınırlamaları vardır.
- Çok oyunculu mod tamamen çalışmıyor.
- Witchcraft çok iş parçacıklı bir sunucu, ancak iş parçacıkları arası iletişim için hack'ler kullanıyor.
- Veri alışverişi hızı yavaş.
- Yalnızca güncel BusyBox (1.35.0) kuruluysa çalışıyor.
SSS
- Blok ID'lerinin nereden geldiği ve "WitchCraft" adının kökeni gibi sorular ve yanıtlar.
Kaynaklar
- Witchcraft deposu, wiki.vg protokol belgeleri gibi kaynak bağlantıları sunuluyor.
GN⁺ görüşü
- Bu proje, bir geliştiricinin Bash'in sınırlarını aşma konusundaki yaratıcılığını ve problem çözme becerisini gösteriyor.
- Bash ile Minecraft sunucusu uygulamak çok verimsiz olabilir, ancak bu tür deneysel yaklaşımlar yeni çözümler bulmaya yardımcı olabilir.
- Bu tekniğin gerçek oyun sunucularına uygulanması önerilmese de, betik dillerinin sınırlarını anlamak ve bunları aşma yollarını öğrenmek açısından faydalı olabilir.
- Benzer işlevler sunan daha verimli sunucu uygulamaları arasında Java veya C++ ile yazılmış Minecraft sunucuları bulunur.
- Bu proje, Bash kullanarak karmaşık ağ protokollerinin nasıl ele alınacağını anlamak için yararlı bir eğitim materyali olabilir.
1 yorum
Hacker News görüşleri
Betiklenebilir Minecraft sunucuları hakkında deneyim
Negatif üslerin anlaşılması
Gerçek bir hacker sitesine övgü
bash sevgisi
bash programlamaya dair şaşkınlık
Özel sunucu yazımı hakkında merak
Minecraft'a övgü
Minecraft implementasyonuna hayranlık