読者です 読者をやめる 読者になる 読者になる

頼りないニモニック

はっきりいって個人の日記レベル

Bukkit APIでMinecraftプラグイン(MOD)を作る

Minecraft Java プログラミング

f:id:nanase_t:20130402053411j:plain

半月を使ってBukkitでMODを作りました。CraftBukkitを用いるとサーバサイドMODを非常に簡単に導入できます。レシピ追加、mob追加などの変更がなければクライアントサイドには特別なMODを導入する必要がありません。機能は限定されますがバニラ状態のクライアントでも、十分にMODを導入できます。なお、BukkitではMODのことを プラグイン と呼びます。

使い方はサーバをCraftBukkitで起動し、Bukkit APIを用いて作成したプラグインをCraftBukkitが作成する plugin ディレクトリに入れるだけです。/reload コマンドで起動中にリロード(再読み込み)が出来、/pl コマンドで有効なプラグインのリストが表示できます。もちろん、この操作はオペレータ(管理者)権限を持ったプレイヤーがクライアントから実行できます。

Bukkit API

こちらからライブラリとなるjarを入手し、JavaのIDEで読み込ませます。詳しい解説は他サイトにお任せしますが、最低限必要なのは plugin.yml ファイルとメインとなるクラスだけです。

plugin.yml ファイルはプラグインの概要を記述した重要なファイルです。内容は単なるテキストデータで、少なくとも プラグイン名(name)エントリポイントのパッケージ名を含めたクラス名(main)、そして バージョン(version) です。いずれも文字列で、バージョンには「0.1-prototype」などと記述できます。

以下は簡単なプラグインの例です。

最低限必要なのはJavaPluginクラスの継承、onEnableメソッドとonDisableメソッドの実装です。メソッド前者はサーバ開始の有効化時に、後者は無効化時に実行されます。

また、@EventHandlerアノテーションをつけたメソッドはイベントハンドラにできます。Bukkit APIでは様々なイベントが用意されており、常時動くような処理でなければイベントドリブン型となるでしょう。例ではプレイヤーログイン/ログアウト時にサーバ側コンソールに簡単なメッセージを流します。

ただしイベントハンドラを登録するにはクラスにListenerインターフェイスを実装しなければなりません。エントリポイントとなるクラスと別クラスでもこれは可能ですが、例では同じクラスを用いています。そのためクラス宣言時にクラス名の後が「extends JavaPlugin implements Listener」となっています。
しかし、これだけではイベントをハンドルできません。17行目のように、どのインスタンスがイベントをハンドルするのかをサーバに登録します。


しばらくBukkitを使ったMOD作成法を解説したいと思います。