4 ポイント 投稿者 GN⁺ 2024-10-16 | 1件のコメント | WhatsAppで共有
  • 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の目的と状況

  • PumpkinRustだけで書かれたMinecraftサーバーである
  • 高速で効率的、かつカスタマイズ可能な体験を提供し、Minecraftの中核的なゲームメカニクスに従うことを目指している
  • プロジェクトは現在heavy developmentの状態である

設計目標

  • 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 GenerationRedstone、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

    • Plugins、Query、RCON、Inventories、Particles、Chat、Commands、Permissions、Translationsの項目が含まれる
  • Proxy

    • BungeecordとVelocityがチェックされている

実行、ドキュメント、コミュニティ

  • 実行方法はQuick Startガイドで確認できる
  • ドキュメントはpumpkinmc.orgで提供されている
  • 貢献は歓迎されており、CONTRIBUTING.mdを参照するよう案内している
  • 更新情報やイベント、メンバーとのつながりのためにDiscordサーバーを提供している
  • プロジェクトの支援はGitHub Sponsorsを通じて可能である

1件のコメント

 
GN⁺ 2024-10-16
Hacker Newsのコメント
  • https://dayssincelastrustmcserver.com/

    • 10年前にMinecraftのModdingをかなりやっていた身としては、コミュニティが今でもこんな内輪ネタが生まれるほど活発なのを見ると嬉しい。
      ゲームの規模を考えると、どの言語であってもMinecraftサーバーを作るのは簡単な仕事ではないのに、Rust製だけでもすでに7つあるのは驚き
  • ベンチマーク上の性能差はかなり印象的だが、ワールド生成と保存機能が抜けているように見え、この2つはコストの大きい処理。
    とくにチャンク生成は非力なVPSをそのまま沈黙させることすらある。ベンチマークはアイドル状態で計測したのだろうし、それらの機能が入って実運用されたときにどう比較されるのか気になる。
    ブロック破壊/設置の対応も見当たらないが、この場合サーバー側では照明の再計算とチャンク更新が必要になりそう。
    最後に、スコアボード、チーム、コマンドブロックのパースのような高度な機能も追加する予定があるのか気になる。MojangはこのためにBrigadierをオープンソースで公開している。
    低スペックなハードウェアでもサーバー運用が楽になるほど成熟してほしい

    • ベンチマークは実際に見てもかなり印象的。
      ブロックの設置と破壊にはすでに対応しているが、照明はまだ未対応なので今は全部暗く見える。作業中。
      スコアボードやチームのような機能も入れたいし、コマンド用にBrigadierに近い形で使えるAPIはすでにある。
      低スペックなハードウェアでもプレイヤーがサーバーをホストできるようにしたいし、いつかRaspberry Piのような環境でPumpkinをテストしてみるつもり
    • チャンク生成は最後に実装するか、あるいはまったく実装しなくても筋は通る。高性能なMinecraftサーバーが欲しいなら、どうせ全チャンクを事前生成しておくべきだから。
      チャンクには滞在時間が保存されるので、あとから更新されたチャンク生成ロジックを適用したくなった場合でも、まだ訪問されていないチャンクだけを再生成できる。
      Minecraftサーバーの再実装はかなり興味深く、新しい実装が出るたびに見るのが楽しい。技術系Minecraft向けの高速なレッドストーンコンパイルのためのMCHPRSのような、特定用途向けサーバー実装もある
  • ベンチマークがあるのか気になる。バニラサーバーよりどれくらい速いのか?
    Minecraftサーバーはプレイヤー数が増えるほどリソース使用量が極端に大きくなり、かなり強力なサーバーを動かしていてもTPSが悪くなることが多い

  • 最近Pumpkinを開発した。Rustでゼロから完全に書かれた効率的で高速なMinecraftサーバーなので、見てもらえたら嬉しい

    • すごい。マルチスレッドがどう動いているのか気になる。簡単な部分だけを分けているのか、それともワールド関連の実際の処理も並列化しているのか知りたい
    • 「Pumpkinがやらないこと: バニラや他のサーバーのドロップイン置き換えになること」とあるが、ドロップイン置き換えでないならMinecraftサーバーと言いにくいのでは、という気もする。
      UnoのデッキはHeartsのデッキのドロップイン置き換えではないが、どちらもカードゲームであって、どちらもUnoのデッキではない、というのに近い。
      それとも、Pumpkinはネットワーク以外の部分でバニラと異なる挙動をするので、バニラで作ったワールドをPumpkinで開けないかもしれない、という意味なのだろうか
  • 以前からこのプロジェクトは知っていて、Discordにも入っていた。今は心の健康のためにDiscordアカウントを削除した。
    Hacker Newsでこのプロジェクトがかなり好意的に受け止められているようで嬉しい。140アップボートならかなり健闘していると思う。
    記憶ではRust製の別のサーバーも1つあった気がするが、正確には覚えていない。
    最後に見たときは本当に初期アルファ版ソフトウェアだったが、開発速度は良かった。今どういう状態かはよく知らないし、作者が試験を受けに行っていた時期があったのを覚えている

    • 多くの人がプロジェクトを気に入ってくれて本当に嬉しい。まだ進行中のプロジェクトだが、一生懸命作っている。
      先週試験が終わって、今は休暇中なのでコミットもまた普段通りに戻った
    • Cで書かれたCuberiteのことかもしれない
  • メインスレッドを地域ごとにシャーディングする方式なのか、たとえばPaper Foliaのような形なのか気になる。あるいはブロックではないエンティティだけを別スレッドに分離する程度なのか知りたい

  • Minecraftが十分にリバースエンジニアリングされて、複数のサーバーやクライアント実装が単に互換性のある独自プロトコルのようなものになるのを待っている

    • Bedrockのネットワークプロトコルは文書化されている: https://github.com/Mojang/bedrock-protocol-docs
    • もうすでにそうなっている。プロトコル全体はリバースエンジニアリング済みで、コードを自動で難読化解除するツールもあり、サーバーまで対応したMinecraftの完全再実装もすでに存在する
  • 使ってみるつもり。素のバニラサーバーjarは性能がひどく悪い。Mojangに改善してほしい部分。
    新しいチャンク生成は少なくともマルチスレッドだと理解している。
    SMPサーバー向けの基本的な制御も公式にサポートしてほしい。2つの頂点座標で定義した領域や、設置・破壊・インタラクトといった基本権限くらいで十分。
    シンプルな設定ファイルでよく、リクエストや更新は別ツールで管理できればいい。運営向けの簡単なゲーム内コマンドラインユーティリティでも構わない。
    いつもクローズドなホワイトリストだけを使わなくても済むようになる程度を望んでいる。Paper/Waterfallなどにプラグインがあるのは知っているが、純粋なバニラを保つことには利点がある。
    長い間サーバーを動かし続けている

    • まだ完成した状態ではなく、欠けている機能が多い点だけ意識しておくとよい。
      挙げていたものはすべて設定ファイルで構成可能にしたいと思っているので、気に入る可能性は高い。
      問題があれば https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... を見るか、Discordで助けを求めればよい
  • Rust製の新しいMinecraftサーバーが登場して 0日 が経過した。
    https://dayssincelastrustmcserver.com/

    • 面白いサイトだが、少し不公平でもある。この中で「もうあるじゃないか」と言えるのは、実質的にはValenceだけ。
      全7件のうち最初の3件は停止しており、最新の3件はPumpkinを含めてすべて2024年のプロジェクト。2024年のプロジェクトはいずれも、モジュール性を重視するフレームワーク寄りのValenceとの差別化を明示している。
      最新の3件は互いに友好的で、健全な競争相手に見える。
      released stars last_update
      feather 19aug 2,614 2 years ago
      mchprs 20jun 1,632 last month
      graphite 22jun 160 2 years ago
      valence 22sep 2,731 3 days ago
      hyperion 24mar 361 today
      pumpkin 24jul 965 today
      ferrumc 24sep 673 today
    • この中のかなりの数が「Minecraftサーバーなのか? いや違う。独自のMinecraftサーバー再実装を作るためのフレームワークだ」というのは、なかなか面白い。
    • Pumpkinはすでにその一覧に入っている。
    • これを見ると、Rustが本当にこの作業に向いたツールなのか考えさせられる。むしろ Elixir/Erlang のほうが完璧な道具に思えるし、実際にすでに誰かが作っている。
      BEAMでこういうものをどう作るか学ぶ人にとって、よい参考資料になる: https://github.com/thecodeboss/minecraft
    • Bevyで作られたMinecraftサーバーがあったら面白そうだと思っていたが、それもすでにあった: https://github.com/valence-rs/valence
  • ここでいう modern とはどういう意味か?

    • 最近では「modern」は「$thingを[Rustで]書き直した」という意味の、かなり緩い形容詞として使われているように見える。
      Minecraftは2011年に作られ、Wikipediaによれば「classic」エディションの最後のバージョンは2017年に出ている。だから2017年以降のものはすべて古くないことになる。
      何かを書き直すこと自体は構わないが、「modern」を価値として掲げるのはかなり曖昧で、客観的により良いかどうかもしばしば議論の余地がある。
    • ゼロから書かれていて、バニラのMinecraftサーバーコードと違って クリーンな土台 を持っている、という意味。
      マルチスレッドやRustのような現代的な機能も使いたい。Rustは、古い言語の失敗を正すために設計された現代的な言語だと考えている。
    • ソフトウェアにおけるmodernは、ほとんどの場合ここ数年以内に書かれたという意味でしかない。ソフトウェアを説明する形容詞としてはあまり有用ではない。
      たとえばSQLiteはmodernとは呼ばれない可能性が高いが、みんなが気に入っているので問題ない。