Show HN: Rustで書かれたモダンなMinecraftサーバー、Pumpkin
(github.com/Snowiiii)- PumpkinはRustだけで作られたMinecraftサーバーで、高速で効率的、かつカスタマイズ可能なサーバー体験を提供しながら、ゲームの中核メカニクスに従うことを目標としている
- 目標は、マルチスレッドベースの性能、最新のJavaおよびBedrock Minecraftサーバーバージョンとの互換性、Vanillaのゲームメカニクスへの準拠、既知のセキュリティ脆弱性の回避、高い設定可能性、プラグイン開発基盤の提供である
- 機能範囲はプロトコル、ワールド、プレイヤー、エンティティ、サーバー、プロキシ領域に分かれており、Server Status/Ping、Encryption、Packet Compression、Java/Bedrock、World Loading/Saving、Lighting、Entity Spawning、Inventory、RCON、Permissions、Bungeecord、Velocityなどが含まれる
- 現在は1.0.0以前の活発な開発段階で、AdvancementsとVillagersは未完了、Mobs、Animals、Non-Living EntitiesはW.I.Pと表示されている
- 実行はQuick Startドキュメントに従い、ドキュメント、Discord、GitHub Sponsors、CONTRIBUTING.mdを通じて、利用・コミュニティ参加・支援・貢献の経路を提供している
Pumpkinの目的と状況
- PumpkinはRustだけで書かれたMinecraftサーバーである
- 高速で効率的、かつカスタマイズ可能な体験を提供し、Minecraftの中核的なゲームメカニクスに従うことを目指している
- プロジェクトは現在heavy developmentの状態である
- 1.0.0リリース前に必要な作業は関連イシューで確認できる
設計目標
- Performance: マルチスレッドを活用して速度と効率を高めることを目標としている
- Compatibility: 最新のJavaおよびBedrock Minecraftサーバーバージョンをサポートし、Vanillaのゲームメカニクスに従う
- Security: 既知のセキュリティエクスプロイトの防止を優先する
- Flexibility: 不要な機能を無効化できる高い設定可能性を提供する
- Extensibility: プラグイン開発のための基盤を提供する
実装済み機能の範囲
-
設定
- TOMLベースの設定をサポートする
-
プロトコル
- Tracking: Protocol
- Server Status/Ping、Encryption、Packet Compression、Java/Bedrock対応がチェックされている
-
ワールド
- Tracking: World
- Player Tab-list、Scoreboard、World Loading、World Time、World Borders、World Saving、Lighting、Entity Spawning、Bossbarをサポートする
- Chunk LoadingとChunk SavingはVanilla、Linear、Pump形式がチェックされている
- Chunk Generation、Redstone、Liquid Physicsの項目が含まれる
-
プレイヤー
- Tracking: Player
- Skins、Teleport、Movement、Animation、Inventory、Experience、Hunger、Off Hand、Eatingがチェックされている
- Combatが別個の追跡項目としてリンクされている
- Advancementsは未完了と表示されている
エンティティ・サーバー・プロキシ
-
Entities
- Non-LivingエンティティはMinecart、Eggsなどを含み、W.I.Pと表示されている
- Entity Effects、Players、Boss、Entity Savingがチェックされている
- MobsとAnimalsはW.I.Pと表示されている
- Entity AIが別個の追跡項目としてリンクされている
- Villagersは未完了と表示されている
-
Server
-
Proxy
- BungeecordとVelocityがチェックされている
実行、ドキュメント、コミュニティ
- 実行方法はQuick Startガイドで確認できる
- ドキュメントはpumpkinmc.orgで提供されている
- 貢献は歓迎されており、CONTRIBUTING.mdを参照するよう案内している
- 更新情報やイベント、メンバーとのつながりのためにDiscordサーバーを提供している
- プロジェクトの支援はGitHub Sponsorsを通じて可能である
1件のコメント
Hacker Newsのコメント
https://dayssincelastrustmcserver.com/
ゲームの規模を考えると、どの言語であってもMinecraftサーバーを作るのは簡単な仕事ではないのに、Rust製だけでもすでに7つあるのは驚き
ベンチマーク上の性能差はかなり印象的だが、ワールド生成と保存機能が抜けているように見え、この2つはコストの大きい処理。
とくにチャンク生成は非力なVPSをそのまま沈黙させることすらある。ベンチマークはアイドル状態で計測したのだろうし、それらの機能が入って実運用されたときにどう比較されるのか気になる。
ブロック破壊/設置の対応も見当たらないが、この場合サーバー側では照明の再計算とチャンク更新が必要になりそう。
最後に、スコアボード、チーム、コマンドブロックのパースのような高度な機能も追加する予定があるのか気になる。MojangはこのためにBrigadierをオープンソースで公開している。
低スペックなハードウェアでもサーバー運用が楽になるほど成熟してほしい
ブロックの設置と破壊にはすでに対応しているが、照明はまだ未対応なので今は全部暗く見える。作業中。
スコアボードやチームのような機能も入れたいし、コマンド用にBrigadierに近い形で使えるAPIはすでにある。
低スペックなハードウェアでもプレイヤーがサーバーをホストできるようにしたいし、いつかRaspberry Piのような環境でPumpkinをテストしてみるつもり
チャンクには滞在時間が保存されるので、あとから更新されたチャンク生成ロジックを適用したくなった場合でも、まだ訪問されていないチャンクだけを再生成できる。
Minecraftサーバーの再実装はかなり興味深く、新しい実装が出るたびに見るのが楽しい。技術系Minecraft向けの高速なレッドストーンコンパイルのためのMCHPRSのような、特定用途向けサーバー実装もある
ベンチマークがあるのか気になる。バニラサーバーよりどれくらい速いのか?
Minecraftサーバーはプレイヤー数が増えるほどリソース使用量が極端に大きくなり、かなり強力なサーバーを動かしていてもTPSが悪くなることが多い
https://snowiiii.github.io/Pumpkin/about/benchmarks.html
最近Pumpkinを開発した。Rustでゼロから完全に書かれた効率的で高速なMinecraftサーバーなので、見てもらえたら嬉しい
UnoのデッキはHeartsのデッキのドロップイン置き換えではないが、どちらもカードゲームであって、どちらもUnoのデッキではない、というのに近い。
それとも、Pumpkinはネットワーク以外の部分でバニラと異なる挙動をするので、バニラで作ったワールドをPumpkinで開けないかもしれない、という意味なのだろうか
以前からこのプロジェクトは知っていて、Discordにも入っていた。今は心の健康のためにDiscordアカウントを削除した。
Hacker Newsでこのプロジェクトがかなり好意的に受け止められているようで嬉しい。140アップボートならかなり健闘していると思う。
記憶ではRust製の別のサーバーも1つあった気がするが、正確には覚えていない。
最後に見たときは本当に初期アルファ版ソフトウェアだったが、開発速度は良かった。今どういう状態かはよく知らないし、作者が試験を受けに行っていた時期があったのを覚えている
先週試験が終わって、今は休暇中なのでコミットもまた普段通りに戻った
メインスレッドを地域ごとにシャーディングする方式なのか、たとえばPaper Foliaのような形なのか気になる。あるいはブロックではないエンティティだけを別スレッドに分離する程度なのか知りたい
Minecraftが十分にリバースエンジニアリングされて、複数のサーバーやクライアント実装が単に互換性のある独自プロトコルのようなものになるのを待っている
使ってみるつもり。素のバニラサーバーjarは性能がひどく悪い。Mojangに改善してほしい部分。
新しいチャンク生成は少なくともマルチスレッドだと理解している。
SMPサーバー向けの基本的な制御も公式にサポートしてほしい。2つの頂点座標で定義した領域や、設置・破壊・インタラクトといった基本権限くらいで十分。
シンプルな設定ファイルでよく、リクエストや更新は別ツールで管理できればいい。運営向けの簡単なゲーム内コマンドラインユーティリティでも構わない。
いつもクローズドなホワイトリストだけを使わなくても済むようになる程度を望んでいる。Paper/Waterfallなどにプラグインがあるのは知っているが、純粋なバニラを保つことには利点がある。
長い間サーバーを動かし続けている
挙げていたものはすべて設定ファイルで構成可能にしたいと思っているので、気に入る可能性は高い。
問題があれば https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... を見るか、Discordで助けを求めればよい
Rust製の新しいMinecraftサーバーが登場して 0日 が経過した。
https://dayssincelastrustmcserver.com/
全7件のうち最初の3件は停止しており、最新の3件はPumpkinを含めてすべて2024年のプロジェクト。2024年のプロジェクトはいずれも、モジュール性を重視するフレームワーク寄りのValenceとの差別化を明示している。
最新の3件は互いに友好的で、健全な競争相手に見える。
BEAMでこういうものをどう作るか学ぶ人にとって、よい参考資料になる: https://github.com/thecodeboss/minecraft
ここでいう modern とはどういう意味か?
Minecraftは2011年に作られ、Wikipediaによれば「classic」エディションの最後のバージョンは2017年に出ている。だから2017年以降のものはすべて古くないことになる。
何かを書き直すこと自体は構わないが、「modern」を価値として掲げるのはかなり曖昧で、客観的により良いかどうかもしばしば議論の余地がある。
マルチスレッドやRustのような現代的な機能も使いたい。Rustは、古い言語の失敗を正すために設計された現代的な言語だと考えている。
たとえばSQLiteはmodernとは呼ばれない可能性が高いが、みんなが気に入っているので問題ない。