ガイド
KotlinでMinecraftプラグインを作る方法
2026年10月18日に更新
KotlinはJVMで動くので、KotlinのプラグインもJavaのプラグインと同じPaperまたはSpigotのAPI、同じplugin.yml、同じplugins/フォルダを使います。コードは短く、null安全です。Javaのプラグインでは気にしなくてよいことが1つだけあります。Kotlin標準ライブラリです。サーバーには含まれていないので、プラグインが自分で持ち込む必要があります。
この例から始めましょう。
Codexeでこれを生成手順
1.Kotlin DSLでGradleプロジェクトを作る
kotlin("jvm")プラグイン、Minecraftのバージョンに合ったJavaツールチェーン(17、21、25)、PaperMCのリポジトリを指定したbuild.gradle.ktsを用意します。2.サーバーのAPIを追加する
compileOnly("io.papermc.paper:paper-api:<version>")。Javaと同じく、実行時にはサーバーが提供するので、同梱はしません。3.メインクラスを書く
override fun onEnable()を持つclass MyPlugin : JavaPlugin()を書きます。コマンドとリスナーは、Javaとまったく同じように登録します。4.Kotlin標準ライブラリを持ち込む
Shadowプラグインで.jarに同梱するか、
plugin.ymlのlibrariesリストを使って、起動時にサーバーにダウンロードさせます。どちらもないと、プラグインはNoClassDefFoundError: kotlin/...で失敗します。5.plugin.ymlを書く
Javaのプラグインと同じファイルです。name、version、main(Kotlinのクラス)、
api-version、コマンド、権限。6.ビルドしてテストする
./gradlew shadowJar(またはbuild)を実行し、build/libs/の.jarをテストサーバーにコピーして、起動時のコンソールを確認します。
Kotlinをサーバーに届ける
- シェーディングする: Shadow Gradleプラグインが、Kotlin標準ライブラリやそのほかの実行時ライブラリを.jarにコピーします。どのバージョンでも動き、最も一般的な方法です。
- plugin.ymlのlibraries: Spigot 1.16.5以降、プラグインはMaven Centralのライブラリを列挙でき、サーバーがそれをダウンロードして読み込みます。.jarは小さいままですが、初回起動時にサーバーがインターネットにつながっている必要があります。
- 自分で追加するライブラリ: kotlinx-coroutinesは標準ライブラリの一部ではない別のライブラリなので、これも同梱する必要があります。自分のパッケージに再配置(リロケート)すれば、別のバージョンを同梱しているほかのプラグインとの衝突を避けられます。
コルーチンとメインスレッド
コルーチンを使えば、サーバーを止めずにデータベースからデータを読み込めますが、Bukkit API(ワールド、エンティティ、インベントリ)は引き続きメインスレッドから使う必要があります。時間のかかる処理はバックグラウンドのディスパッチャーで行い、ゲームに触れる前にスケジューラーでサーバースレッドに戻します。コルーチンのスコープはプラグインに結び付け、onDisable()でキャンセルされるようにします。
JavaとKotlinのどちらですか?
| 機能 | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | 同じPaper / SpigotのAPI |
| ビルド | MavenまたはGradle | build.gradle.ktsを使ったGradle |
| 実行時に必要なもの | なし | Kotlin標準ライブラリ(同梱または読み込み) |
| チュートリアルとサンプル | ほとんどがこちら | 少ないが、Javaのサンプルをそのまま置き換えられる |
Codexeで
Bukkit/Spigot/Paper (Kotlin)を選びます。Codexeは、build.gradle.kts、Paper API、サーバーが提供しないものを同梱するShadowプラグインを備えたGradleプロジェクトを生成し、コードがコルーチンを使う場合はそれも同梱して再配置します。準備完了になる前にプラグインをコンパイルし、KotlinのプラグインもJavaと同じく、テストサーバーで試してテストプレイヤーに確認させられます。Kotlinプラグインジェネレーターを参照してください。
「Bountiesという名前のKotlin製Paper 1.21.4プラグイン: Vault経由の/bounty set <player> <amount>、倒した人が報酬を受け取る、/bounty topで上位10件を表示、データベースへのアクセスにはコルーチンを使ってSQLiteに保存。データクラスと拡張関数を使い、Bukkit APIの呼び出しはメインスレッドで行う。」
よくある質問
KotlinのプラグインはJavaのプラグインより遅いですか?
意味のある差はありません。どちらもJVMのバイトコードにコンパイルされます。標準ライブラリを同梱すると、.jarは大きくなります。
1つのプラグインにJavaとKotlinを混在できますか?
はい。Gradleは同じプロジェクトで両方をコンパイルでき、KotlinのコードからJavaのクラスを直接呼び出せます。
kotlinのクラスでNoClassDefFoundErrorが出るのはなぜですか?
Kotlin標準ライブラリが.jarに入っていないか、読み込まれていません。shadowJarでビルドしてその.jarをインストールするか、plugin.ymlのlibrariesにライブラリを追加してください。
Kotlinプラグインを作る
このプロンプトは、そのまま送信できる状態で開きます:
“Bountiesという名前のKotlin製Paper 1.21.4プラグイン: Vaultのエコノミーを使う/bounty set <player> <amount>、倒した人が報酬を受け取る、/bounty topで上位10件を表示、賞金はコルーチンでアクセスするSQLiteに保存、Bukkit APIの呼び出しはメインスレッド、メッセージはconfig.yml。”
Codexeでこれを生成