Minecraft 1.19用のFabric ModをKotlinで開発するための環境を作る
はじめに
この記事ではMinecraft 1.19のFabricのModをKotlinで作るための環境を作ります。
バージョンは次のとおりです。
- Minecraft: 1.19
- fabric-loom: 0.12-SNAPSHOT
- fabric-api: 0.56.0+1.19
- gradle: 7.4.2
- Kotlin: 1.7.0
Fabricとは
MinecraftのModの前提Modと呼ばれるものの一つです。
このFabricを前提に自分のModを開発できます。
Fabricの他にはForgeというのが有名で、Forgeは過去の資産が多くたくさんのModが遊べる、FabricのほうがForgeより新しい前提Modで新しいMinecraftのバージョンへ対応するのが早いと言われています。
KotlinによるMod開発環境
JavaでのFabricのMod開発環境はFabric公式が用意しているリポジトリをテンプレートにすれば出来上がります。
しかし、KotlinでのFabricのMod開発環境は有志が作ったもので1.18までのものしか用意されていません。
そこで今回はKotlinで1.19用に環境を整えました。
リポジトリはこちらです。
リポジトリをクローンしてIntelliJ IDEAなどで開くと開発が始められます。
以下に各ファイルの説明を軽くします。
build.gradle.kts
example-mod\src\main\kotlin\net\orito_itsuki\example_mod\ExampleMod.kt
がKotlinのModのクラスです。
package net.orito_itsuki.example_mod;
import net.fabricmc.api.ModInitializer
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@Suppress("UNUSED")
object ExampleMod: ModInitializer {
const val MOD_ID = "example_mod"
val LOGGER: Logger = LoggerFactory.getLogger(MOD_ID)
override fun onInitialize() {
LOGGER.info("Hello Fabric world!")
}
}
とりあえずログにHello Fabric world!と表示されるようにしておきましょう。
私の保有しているドメイン名がorito-itsuki.net
なので、それの逆順でsrc/kotlin/net/orito_itsuki
にModのパッケージを配置しています。
ドメイン名がハイフンを含んでいる場合は、ハイフンをアンダースコアに置き換えるらしいです。
fabric.mod.json
example-mod\src\main\resources\fabric.mod.json
がfabricのmodに必要な情報を書くファイルです。
{
"schemaVersion": 1,
"id": "example_mod",
"version": "${version}",
"name": "example_mod",
"description": "example mod kotlin",
"authors": [
"ORITO Itsuki"
],
"contact": {
"homepage": "https://example.com/",
"issues": "https://example.com/",
"sources": "https://example.com/"
},
"license": "MIT OR Apache-2.0",
"icon": "assets/example_mod/icon.png",
"environment": "*",
"entrypoints": {
"main": [
{
"adapter": "kotlin",
"value": "net.orito_itsuki.example_mod.ExampleMod"
}
]
},
"depends": {
"fabricloader": ">=0.13.3",
"fabric": "*",
"fabric-language-kotlin": ">=1.7.4+kotlin.1.7.0",
"minecraft": "1.19.x",
"java": ">=17"
}
}
example_mod
の名前はModの名前に応じて変更してください。
settings.gradle.kts
settings.gradle.kts
でプロジェクト全体の設定を書きます。
rootProject.name = "Example Mod Kotlin"
pluginManagement {
repositories {
maven("https://maven.fabricmc.net") { name = "Fabric" }
mavenLocal()
gradlePluginPortal()
}
}
include("example_mod")
example_mod/build.gradle.kts
example_mod/build.gradle.kts
を使ってビルド環境を作っています。
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val archivesName = "example_mod"
group = "net.orito-itsuki"
version = "0.1.0"
plugins {
kotlin("jvm") version libs.versions.kotlin
id("fabric-loom") version libs.versions.fabric.loom
}
dependencies {
versionCatalogs {
minecraft(libs.minecraft)
mappings(libs.yarn)
modImplementation(libs.fabric)
modImplementation(libs.fabric.loader)
modImplementation(libs.fabric.kotlin)
}
}
tasks {
val javaVersion = JavaVersion.VERSION_17
withType<JavaCompile> {
options.encoding = "UTF-8"
sourceCompatibility = javaVersion.toString()
targetCompatibility = javaVersion.toString()
options.release.set(javaVersion.toString().toInt())
}
withType<KotlinCompile> {
kotlinOptions { jvmTarget = javaVersion.toString() }
}
jar { from("LICENSE") { rename { "${it}_${archivesName}" } } }
processResources {
inputs.property("version", project.version)
filesMatching("fabric.mod.json") { expand(mutableMapOf("version" to project.version)) }
}
java {
toolchain { languageVersion.set(JavaLanguageVersion.of(javaVersion.toString())) }
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
withSourcesJar()
}
}
gradle/libs.versions.toml
gradle\libs.versions.toml
を使ってバージョンを設定します。
これは割と新しめのgradleに追加された機能らしいです。
[versions]
kotlin = "1.7.0"
fabric-loom = "0.12-SNAPSHOT"
[libraries]
minecraft = "com.mojang:minecraft:1.19"
yarn = "net.fabricmc:yarn:1.19+build.4"
fabric = "net.fabricmc.fabric-api:fabric-api:0.56.0+1.19"
fabric-loader = "net.fabricmc:fabric-loader:0.12-SNAPSHOT"
fabric-kotlin = "net.fabricmc:fabric-language-kotlin:1.8.0+kotlin.1.7.0"
ビルド
ビルドするにはgradleのタスクからbuild
を実行します。
example_mod/build/libs/example_mod.jar
がModのjarファイルです。
単にテスト実行するだけならば、runClient
を実行します。
公式クライアント以外からの立ち上げになるので認証エラーが出ますが立ち上げは完了します。
問題なくModが読み込めてログが表示されていることが確認できます。
開発にあたってはMinecraftのソースコードを生成しておくと便利なようです。
ただしそのソースコードを配布するのは違反に当たるよう。
genSource
タスクを実行するとMinecraftのソースコードが生成されます。
依存パッケージの中からminecraftのパッケージの中身を読むと、「ソースのダウンロード」という項目がIntelliJ IDEA表示されるのでクリックすると、参照を辿ったりできるようになります。
おわりに
KotlinでMinecraft 1.19のFabricのModを作る環境を整えました。
Discussion