Show HN: Rust ile yazılmış modern bir Minecraft sunucusu, Pumpkin
(github.com/Snowiiii)- Pumpkin, yalnızca Rust ile yapılmış bir Minecraft sunucusudur; oyunun temel mekaniklerine bağlı kalmayı hedeflerken hızlı, verimli ve özelleştirilebilir bir sunucu deneyimi sunmayı amaçlar
- Hedefleri çok iş parçacıklı performans, en güncel Java ve Bedrock Minecraft sunucu sürümleriyle uyumluluk, Vanilla oyun mekaniklerine bağlılık, bilinen güvenlik açıklarının önlenmesi, yüksek yapılandırılabilirlik ve eklenti geliştirme için bir temel sağlamaktır
- Özellik kapsamı protokol, dünya, oyuncu, varlık, sunucu ve proxy alanlarına ayrılır; Server Status/Ping, Encryption, Packet Compression, Java/Bedrock, World Loading/Saving, Lighting, Entity Spawning, Inventory, RCON, Permissions, Bungeecord, Velocity gibi bileşenleri içerir
- Proje şu anda 1.0.0 öncesi aktif geliştirme aşamasındadır; Advancements ve Villagers tamamlanmamış olarak işaretlenmiştir, Mobs, Animals ve Non-Living Entities ise W.I.P olarak belirtilmiştir
- Çalıştırma için Quick Start belgesi izlenir; belgeler, Discord, GitHub Sponsors ve CONTRIBUTING.md üzerinden kullanım, topluluğa katılım, sponsorluk ve katkı yolları sunulur
Pumpkin'in amacı ve durumu
- Pumpkin, tamamen Rust ile yazılmış bir Minecraft sunucusudur
- Hızlı, verimli ve özelleştirilebilir bir deneyim sunmayı, ayrıca Minecraft'in temel oyun mekaniklerine bağlı kalmayı hedefler
- Proje şu anda yoğun geliştirme durumundadır
- 1.0.0 sürümünden önce tamamlanması gereken işler ilgili issue üzerinden görülebilir
Tasarım hedefleri
- Performance: Çok iş parçacığından yararlanarak hız ve verimliliği artırmayı hedefler
- Compatibility: En güncel Java ve Bedrock Minecraft sunucu sürümlerini destekler ve Vanilla oyun mekaniklerini takip eder
- Security: Bilinen güvenlik açıklarını ve exploit'leri önlemeye öncelik verir
- Flexibility: Gereksiz özelliklerin devre dışı bırakılabildiği yüksek düzeyde yapılandırılabilirlik sunar
- Extensibility: Eklenti geliştirme için bir temel sağlar
Uygulanan özellik kapsamı
-
Yapılandırma
- TOML tabanlı yapılandırmayı destekler
-
Protokol
- Tracking: Protocol
- Server Status/Ping, Encryption, Packet Compression, Java/Bedrock desteği işaretlenmiştir
-
Dünya
- Tracking: World
- Player Tab-list, Scoreboard, World Loading, World Time, World Borders, World Saving, Lighting, Entity Spawning, Bossbar desteklenir
- Chunk Loading ve Chunk Saving için Vanilla, Linear ve Pump biçimleri işaretlenmiştir
- Chunk Generation, Redstone ve Liquid Physics başlıkları da yer alır
-
Oyuncu
- Tracking: Player
- Skins, Teleport, Movement, Animation, Inventory, Experience, Hunger, Off Hand, Eating işaretlenmiştir
- Combat ayrı bir takip maddesi olarak bağlantılanmıştır
- Advancements tamamlanmamış olarak belirtilmiştir
Varlıklar, sunucu ve proxy
-
Entities
- Non-Living varlıklar Minecart, Eggs vb. öğeleri içerir ve W.I.P olarak işaretlenmiştir
- Entity Effects, Players, Boss, Entity Saving işaretlenmiştir
- Mobs ve Animals W.I.P olarak belirtilmiştir
- Entity AI ayrı bir takip maddesi olarak bağlantılanmıştır
- Villagers tamamlanmamış olarak belirtilmiştir
-
Server
-
Proxy
- Bungeecord ve Velocity işaretlenmiştir
Çalıştırma, belgeler, topluluk
- Çalıştırma yöntemi Quick Start kılavuzundan görülebilir
- Belgeler pumpkinmc.org üzerinden sunulur
- Katkılar memnuniyetle karşılanır ve CONTRIBUTING.md dosyasına bakılması önerilir
- Güncellemeler, etkinlikler ve üyelerle bağlantı kurmak için Discord sunucusu sunulur
- Projeye sponsor olmak GitHub Sponsors üzerinden mümkündür
1 yorum
Hacker News yorumları
https://dayssincelastrustmcserver.com/
Oyunun ölçeği düşünüldüğünde herhangi bir dilde Minecraft sunucusu yapmak kolay iş değil; sadece Rust ile şimdiden 7 tane olması şaşırtıcı.
Benchmark’lardaki performans farkı oldukça etkileyici, ancak dünya oluşturma ve kaydetme işlevleri eksik gibi görünüyor; bunların ikisi de maliyetli işler.
Özellikle chunk oluşturma, zayıf bir VPS’i olduğu yerde çökertebilir. Benchmark’lar muhtemelen boşta ölçülmüştür; bu özellikler eklenip gerçek kullanımda karşılaştırma nasıl olur merak ediyorum.
Blok kırma/yerleştirme desteği de görünmüyor; bu durumda sunucuda aydınlatmanın yeniden hesaplanması ve chunk güncellemeleri gerekebilir.
Son olarak skor tabloları, takımlar, komut bloğu ayrıştırma gibi gelişmiş özellikleri de eklemeyi planlayıp planlamadıklarını merak ediyorum. Mojang bunun için Brigadier’ı açık kaynak olarak yayımlamış durumda.
Düşük donanımlı sistemlerde de sunucu işletmeyi kolaylaştıracak kadar olgunlaşmasını umuyorum.
Blok yerleştirme ve kırma zaten destekleniyor, ancak aydınlatma henüz desteklenmediği için şu anda her şey karanlık görünüyor. Üzerinde çalışılıyor.
Skor tabloları ve takımlar gibi özellikleri de eklemek istiyoruz; komutlar için Brigadier’a benzer şekilde kullanılabilecek bir API zaten var.
Oyuncuların düşük donanımlı sistemlerde de sunucu barındırabilmesini istiyoruz; bir gün Pumpkin’i Raspberry Pi gibi bir cihazda test etmeyi düşünüyorum.
Chunk’larda yerleşim süresi saklandığı için, daha sonra güncellenmiş chunk oluşturma mantığını uygulamak isterseniz yalnızca henüz ziyaret edilmemiş chunk’ları yeniden oluşturabilirsiniz.
Minecraft sunucusunun yeniden uygulanması oldukça ilginç; her yeni uygulamayı görmek güzel. Teknik Minecraft için hızlı redstone derlemesine yönelik MCHPRS gibi belirli amaçlara yönelik sunucu uygulamaları da var.
Benchmark var mı merak ediyorum. Vanilla sunucudan ne kadar hızlı?
Minecraft sunucularında oyuncu sayısı arttıkça kaynak kullanımı aşırı büyüyor ve çok güçlü bir sunucu çalıştırılsa bile TPS’in kötü çıktığı durumlar sık oluyor.
https://snowiiii.github.io/Pumpkin/about/benchmarks.html
Yakın zamanda Pumpkin’i geliştirdim. Rust ile sıfırdan tamamen yazılmış verimli ve hızlı bir Minecraft sunucusu; bir göz atarsanız sevinirim.
Uno destesi, Hearts destesinin drop-in yerine geçeni değildir ama ikisi de sadece kart oyunudur; ikisi de Uno destesi değildir gibi.
Yoksa Pumpkin’in ağ dışındaki kısımlarda vanilla’dan farklı davrandığı ve vanilla ile oluşturulmuş dünyaların Pumpkin’de açılamayabileceği mi kastediliyor, merak ediyorum.
Bu projeyi eskiden beri biliyordum ve Discord’una da katılmıştım. Şu anda ruh sağlığım için Discord hesabımı silmiş durumdayım.
Hacker News’te bu projenin epey beğeniliyor gibi görünmesine sevindim. 140 upvote bence oldukça iyi.
Hatırladığım kadarıyla Rust ile yazılmış başka bir sunucu daha vardı ama tam emin değilim.
En son baktığımda gerçekten erken alfa yazılım durumundaydı, ama geliştirme hızı iyiydi. Şu anki durumunu pek bilmiyorum; yazarın sınava gittiği dönemde olduğum aklımda kalmış.
Geçen hafta sınavlarımı bitirdim ve şimdi tatildeyim; commit’ler de tekrar her zamanki temposuna döndü.
Ana thread’in bölgelere göre shard’lanıp shard’lanmadığını, örneğin Paper Folia gibi yapılıp yapılmadığını merak ediyorum. Yoksa yalnızca blok olmayan entity’leri ayrı thread’e ayırmak gibi bir şey mi, bilmek isterim.
Minecraft’ın yeterince tersine mühendislikten geçirilip, çeşitli sunucu ve istemci uygulamalarının basitçe uyumlu olduğu fiilî bir protokole dönüşmesini bekliyorum.
Bir deneyeceğim. Saf vanilla sunucu jar’ının performansı çok kötü. Mojang’ın iyileştirmesini istediğim bir nokta.
Yeni chunk oluşturmanın en azından multithreaded olduğunu biliyorum.
SMP sunucuları için temel denetimin de resmî olarak desteklenmesini isterdim. İki köşe koordinatıyla tanımlanan bölgeler, yerleştirme/kırma/etkileşim gibi temel izinler yeterli olur.
Basit bir yapılandırma dosyası kâfi; istekler veya güncellemeler başka araçlarla yönetilebilir. Operatörler için basit bir oyun içi komut satırı aracı da fena olmaz.
Her zaman kapalı whitelist kullanmak zorunda kalmamayı sağlayacak bir şey istiyorum. Paper/Waterfall vb. için eklentiler olduğunu biliyorum, ama saf vanilla’yı korumanın getirdiği avantajlar var.
Sunucuyu uzun süredir ayakta tutuyorum.
Saydıklarınızın tamamını yapılandırma dosyasından ayarlanabilir hâle getirmek istiyoruz; bu yüzden hoşunuza gidebilir.
Sorun olursa https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... sayfasına bakabilir veya Discord’da yardım isteyebilirsiniz.
Rust ile yazılmış yeni bir Minecraft sunucusunun çıkmasının üzerinden 0 gün geçti
https://dayssincelastrustmcserver.com/
Toplam 7 taneden ilk 3’ü ölmüş durumda; en yeni 3’ü ise Pumpkin dahil tamamen 2024 projeleri. 2024 projelerinin hepsi, modülerliğe odaklanan bir framework’e daha yakın olan Valence’tan farklarını açıkça belirtiyor
En yeni 3’ü birbirine karşı dostane, sağlıklı rakipler gibi görünüyor
BEAM’de böyle bir şeyin nasıl yapıldığını öğrenen biri için iyi bir referans: https://github.com/thecodeboss/minecraft
Burada modern ne anlama geliyor?
Minecraft 2011’de yapıldı ve Wikipedia’ya göre ‘classic’ sürümünün son versiyonu 2017’de çıktı. Dolayısıyla 2017’den sonraki her şeyin eski sayılmaması gerekir
Bir şeyi yeniden yazmanın kendisi sorun değil, ama “modern”ı bir değer olarak öne sürmek epey gevşek bir kullanım ve nesnel olarak daha iyi olup olmadığı da sık sık tartışmalı
Multithreading ya da Rust gibi modern özellikleri de kullanmak istiyor. Rust’ı, eski dillerin hatalarını düzeltmek için tasarlanmış modern bir dil olarak görüyorum
Örneğin SQLite’a büyük ihtimalle modern denmez, ama herkes sevdiği için bunun bir önemi yok