ガイド

KotlinでMinecraftプラグインを作る方法

2026年10月18日に更新

KotlinはJVMで動くので、KotlinのプラグインもJavaのプラグインと同じPaperまたはSpigotのAPI、同じplugin.yml、同じplugins/フォルダを使います。コードは短く、null安全です。Javaのプラグインでは気にしなくてよいことが1つだけあります。Kotlin標準ライブラリです。サーバーには含まれていないので、プラグインが自分で持ち込む必要があります。

この例から始めましょう。

Codexeでこれを生成

手順

  1. 1.Kotlin DSLでGradleプロジェクトを作る

    kotlin("jvm")プラグイン、Minecraftのバージョンに合ったJavaツールチェーン(17、21、25)、PaperMCのリポジトリを指定したbuild.gradle.ktsを用意します。

  2. 2.サーバーのAPIを追加する

    compileOnly("io.papermc.paper:paper-api:<version>")。Javaと同じく、実行時にはサーバーが提供するので、同梱はしません。

  3. 3.メインクラスを書く

    override fun onEnable()を持つclass MyPlugin : JavaPlugin()を書きます。コマンドとリスナーは、Javaとまったく同じように登録します。

  4. 4.Kotlin標準ライブラリを持ち込む

    Shadowプラグインで.jarに同梱するか、plugin.ymlのlibrariesリストを使って、起動時にサーバーにダウンロードさせます。どちらもないと、プラグインはNoClassDefFoundError: kotlin/...で失敗します。

  5. 5.plugin.ymlを書く

    Javaのプラグインと同じファイルです。name、version、main(Kotlinのクラス)、api-version、コマンド、権限。

  6. 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のどちらですか?

機能JavaKotlin
APIPaper / Spigot同じPaper / SpigotのAPI
ビルドMavenまたはGradlebuild.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でこれを生成
KotlinでMinecraftプラグインを作る方法(Paper) | Codexe