MinecraftプラグインをKotlinで書きたい

Minecraft(Paper)プラグインをKotlinで書きたい

Minecraftのプラグインを作ろうと思ったのですが、MinecraftはJavaで書かれているため当然、プラグインもJavaで書くことになります。

しかしながら、やはり一度Kotlinでソースコードを書き始めてしまった以上もうJavaには戻れません。

なのでどうにかしてKotlinでかけるようにします。

環境

今の環境をまとめます。

Key Value
IDE IntelliJ IDEA Ultimate 2021.3.2
Language Kotlin 1.6.10
JDK OpenJDK 17
Minecraft 1.18.1

プロジェクトの作成

とりあえずプロジェクトをgradleで作ってみます。

いい感じの記事を見つけたので参考に進めます。

でもこれgradleがKotlinDSLじゃないから、ちょっと書き換えないといけません。

いい感じにbuild.gradle.ktsが完成しました。

注意すべき点はMinecraftはJDK17以上が必須になったので出力するバージョンを17に指定するところです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.net.URI
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    // Apply the org.jetbrains.kotlin.jvm Plugin to add support for Kotlin.
    kotlin("jvm") version "1.6.10"

    // Apply the application plugin to add support for building a CLI application in Java.
    application
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
    maven {
        url = URI("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
    }
}

group = "グループ名"
version = "1.0-SNAPSHOT"
java.sourceCompatibility=JavaVersion.VERSION_17
val mcVersion = "1.18.1"


dependencies {
    // Align versions of all Kotlin components
    implementation(platform("org.jetbrains.kotlin:kotlin-bom"))

    // Kotlin
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    // Spigot API
    compileOnly("org.spigotmc:spigot-api:${mcVersion}-R0.1-SNAPSHOT")
}

application {
    // Define the main class for the application.
    mainClass.set("メインクラスを指定")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "17"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

メインクラス

メインクラスはJavaPluginを継承すれば勝手にエントリーポイントにしてくれるみたいです。

1
2
3
4
5
6
7
8

import org.bukkit.plugin.java.JavaPlugin

class Main: JavaPlugin() {
    override fun onEnable() {
        println("It works!")
    }
}

plugin.ymlを作成

これは参考元のまま書いてます。

実行してみる

サーバーを準備してpluginsフォルダに入れてから起動する。

普通にうまくいくはず。

と思ったらなんかエラー出てきた。

Invalid plugin.ymlだってよ。

内容は間違ってるはずがないのでとりあえずggってみることにします。

しばらくggった結果、得られた情報はUTF-8であること、TABを使用していないこと、がルールです。

前者に関しては僕はUTF-8信者なので問題なく、後者についてもYAMLなんだから当然問題ありません。

念のため、ファイルをしっかりと確認してみます。

おや、ファイル名がplugins.ymlになってるじゃないですか。

初歩的なミスでした。

正しい名前はplugin.ymlですので、改名しておきます。

気を取り直してもう一度ビルドして実行してみます。

できました。

おわりに

ここまでは順調に進めたので、あとは開発してる最中にバグらないことを祈ります。