ワークアラウンドやMojangコード不要:JavaでMinecraftサーバーを書く方法 - Minestom紹介
Paper、Spigot、Bukkitのような古典的なサーバーは、元のMinecraft jarファイルから生まれました。これらのプラットフォームの開発者は、Mojangのコードを逆コンパイルし、脆弱性を修正し、何千ものプレイヤーを想定していなかった元のシステムを最適化しようとして、長年を費やしてきました。その結果、コミュニティはむしろ面倒なモノリスで終わることとなりました。
ティックするエンティティ、レッドストーンのロジック、水の物理計算、地形生成など、サーバーで実行されるすべての処理が、プレイヤーをリダイレクトするためのシンプルな軽量ハブが必要な場合でも動作しています。100人のプレイヤーで高速セッションを実行すると、CPUリソースの半分が、その瞬間にプレイヤーが気づいていないメカニクスに向かいます。
Minestomは完全に異なるアプローチを取りました。Bukkitのフォークでも、バニラのコアへの別のパッチでもありません。
Minestomとは
このプロジェクトは、Minecraftのネットワークプロトコルをゼロから実装するネットワークフレームワークおよびJavaライブラリとして作成されました。Mojangの元のコードを一行も含んでいません。
デフォルトの世界、完成済みのモブ、レッドストーンの物理演算はありません。クリーンなMinestomインスタンスを起動すると、プレイヤーは無限の虚空中に出現します。その後 일어나ることはすべて、開発者のコードによって完全に定義されます。
このアプローチは珍しい自由を提供します。Spigot APIイベントを通じて既存のゲームの動作を書き換えるのではなく、最初からルールを定義します。サーバーは数秒以内に起動し、メモリ消費も最小限です。
アーキテクチャのハイライト
Minestomのアーキテクチャは、Minecraftエコシステムにおける一般的なソリューションとは大きく異なります。
並列処理とインスタンス
従来のMinecraftサーバーは、ほとんどすべての重要なロジックを単一のメインスレッドで実行します。Minestomはゲーム世界を独立したインスタンスに分割します。
各インスタンスは独自のスレッドで処理されます。ミニゲームの50マッチが同時にサーバーで実行されていても、互いに干渉しません。ある場所のTPS低下は、隣接するアリーナにはまったく影響しません。
直接パケット処理
メモリに不要なガベージを作成する複雑なオブジェクト階層を使用する代わりに、Minestomはネットワークパケットを直接処理します。千個のブロックを表示したり、プレイヤーの位置を更新する必要がある場合、フレームワークは中間的なオーバーヘッドなしでパケットを構築します。
カスタムエンティティとコマンドシステム
Minestomはコマンドシステムとエンティティシステムを完全に再設計しました。コマンドは、フレームワークコアに直接統合された便利な宣言型APIを通じて構築されます。
最もシンプルなサーバー例
コードは数十行で動作するサーバーを起動できます。基本的な初期化の例は以下の通りです:
コード例
このコードは、通常のクライアントから接続できる動作するMinecraftサーバーを作成します。数メガバイトのRAMしか消費せず、即座に起動します。
プロジェクトに適したタスク
MinestomがどんなプロジェクトでもPaperを完全に置き換えられると思うしないでください。友人向けの通常のサバイバルサーバーを運営したい場合、村の村民、エンダードラゴン、ポーション釀造メカニクスなどが必要です。Minestomでは、これらのメカニクスをすべて手動で書く必要があります。
このフレームワークは他のシナリオで真価を発揮します:
- 即座の応答と数千人のプレイヤーへの同時対応が重要なネットワークハブやロビー。
- アリーナの分離と高性能が必要なBedWarsやSkyWarsのような高速ミニゲーム。
- ネットワークインフラストラクチャのチェック用のロードテストやボット。
- ゲームのネットワークプロトコルに関する教育プロジェクトや実験。
Medalの裏面
アイデアをMinestomに移行する前に、客観的な困難を考慮する必要があります。
主な欠点はバニラルジックの欠如です。アイテムの落下物理、モブAI、洞窟生成アルゴリズム、さらには基本的なインベントリも готовыеコミュニティライブラリを見つけるか、独立して実装する必要があります。
SpigotやPaper用の標準プラグインもここでは動作しません。エコシステム全体がMinestom APIを中心にゼロから構築されています。
まとめ
従来のMinecraftサーバーの制限に厌倦したJava開発者にとって、Minestomは素晴らしい発見となるでしょう。古いバニラクコードを振り返ることなく、クリーンなAPIでの楽しい開発にゲームの作業を转变します。
パフォーマンスとネットワークロジックへの完全なコントロールが必要な場合は、GitHubのMinestomリポジトリをチェックしてください。ゲームオープンソースの中で最もクリーンで興味深いプロジェクトの1つです。
関連プロジェクト