Minecraft Fabric の環境構築をしてアイテムを追加してみる
投稿日 : | 0 日前
文字数(だいたい) : 11587
どうもこんにちは。
ハジラブ -Making*Lovers-(Making*Lovers フルHDリマスター付き)予約しました。月末が楽しみですね。
本題
TwitterでForgeより快適と聞いて。
しかもKotlinでModdingができる!!!
環境
| なまえ | あたい |
|---|---|
| IDE | Intellij IDEA 2021.1.2 Community Edition |
| Windows | 10 Pro (そういえば発表会があるんだっけ?いい加減設定がコンパネと散らばってんのどうにかしてほしい) |
| Minecraft | 1.17 (1.7.10と空目しないで) |
| Java | 16(後述) |
| 言語 | Kotlin |
Minecraft 1.17
調べた感じ、Extra UtilitiesにあったDark Glassがバニラに逆輸入?されたみたい。TTの監視で使えそう。
技術的な話をするとJava 16以上が必要です。JDKの有償化よくわからんけどAdoptOpenJDKの方なら多分大丈夫。
ついにJavaのModdingでも型推論が(使っていいのかはよくわからん)(というかRecordも使えるようになったのかええやん)(てかそもそも今回はKotlin使うから別に)
読まなくていい Java有償化の話
- Javaは今でも無料で使える
- JavaのJDKは色んな会社が作ってる
- AmazonとかMicrosoftとか
- Oracleも作ってる
- その中でOracleの作ってるOracle JDKが商用利用するなら金払えになった。
- Java 11から出てきた話。今までのマイクラはJava 8で利用できたので。
- Oracle JDK
- こいつは一部を除いて有償
- Open JDK
- こいつは無料。ただしサポート期間が半年
- Oracle以外のJDKを選べばええ
- AdoptOpenJDK
- こいつは無料+サポート4年+商用利用可。もうこれ代替品だろ
- Corretto
- Amazon製JDK
- AdoptOpenJDK
多分間違ってる気がするのでチラシの裏的な感覚で
Oracle JDK 有償化の話の続き 2021/10/06 追記
どうやら、Java 17からOracle JDKが無償提供されるようになりました。再び無償化。
まーたややこしくして何がしたいんや...
というわけでJava 17以降はOracle JDK使っても大丈夫になりました。でも今の所オラクル以外のJDKでやって行けてるのでそのまま行こうと思います。
Java 16 を入れる
今回はAdoptOpenJDKを入れます。
https://adoptopenjdk.net/ を開いて、OpenJDK 16 (Latest)と、HotSpotのラジオボタンを選んでLatest releaseを押してダウンロードしましょう。

インストールはまあ適当に進めてください。(画像ない)
一応Java 16がインストールできたか確認するために、コマンドプロンプトとかで、javac -versionを叩きます。javac 16.0.1が帰ってくればおk
javac -version
javac 16.0.1
追記:2021/07/28 JAVA_HOMEの設定
なんか久しぶりにやったらまだJava8使ってんのかよって言われたので直します。
環境変数の設定開いて、システム環境変数の中からJAVA_HOMEを選んで、AdoptOpenJDKのパスを設定します。

IDEAを入れる
入れておいてください。Community Editionでいいです
テンプレートをクローン
IDEAのスタート画面から、Get from VCSを押して、いかのURLを指定してCloneします。

| なまえ | あたい |
|---|---|
| URL | https://github.com/natanfudge/fabric-example-mod-kotlin |
プロジェクトを信頼するか聞かれるのでTrust projectを押してください。
そううまく行かない
Could not merge JARs! Deleting source JARs - please re-run the command and move on.
gradle.propertiesを開いて、loom_versionを0.8にします

You are using an outdated version of Java (8). Java 16 or higher is required
プロジェクトの設定
右上のFileからProject Structureを選択して、Project SDKを16に、Project language levelも16にします。

適用したら、このボタンを探して押します。

ボタンが見つからない場合はIDEAの右上にある?Gradleを押して、Syncボタンを押してもいいです。

これで終わればいいんですが、これでも同じエラーで進めないときがあります。
IDEAの設定
右上のFileからSettingsを選択して、Build,Execution,Deploymentを押し、Build Toolsを押し、Gradleへ進み、
Gradle JVMを16にしてみてください。できたらさっきみたいにボタンを押します。

うまく行けば処理が進みます。私の環境では10分ちょっとかかった。
Gradle Buildが終わったら一旦IDEAを閉じます。その後もう一度起動するとマイクラのクライアントが起動できるようになります。

早速再生ボタンみたいなやつを押して起動してみましょう。
1.17 Fabric
(私だったら)起動直後設定へ進みBGMを0にします。うるさいし

MOD情報の変更
gradle.propertiesを開いて、以下の内容を変えます
| なまえ | あたい |
|---|---|
| maven_group | 自分の持ってるドメインを逆から。持ってないならGithub Pagesとか他とかぶらない文字列 |
| archives_base_name | MODのID(小文字) |
私ならこんな感じ?
#Fabric api
fabric_version=0.34.10+1.17
loom_version=0.8-SNAPSHOT
# Mod Properties
mod_version = 1.0.0
maven_group = io.github.takusan23
archives_base_name = clickmanaita
また、fabric_version等は、以下のサイトから更新があるか確認できるので見てみるといいと思います。
https://fabricmc.net/versions.html
Javaのパッケージ名修正
IDEAのProject(ファイルが表示されてるところ)からnet.fabricmc.exampleを選択状態にして、Shift押しながらF6を押します。
押したらRename Packageを選び、ドメイン名(逆から)+MOD名小文字 を入力します

続いてresourcesの方も修正します。同じようにassets.modidを選択状態にして、Shift押しながらF6を押します。
そしたら先程入力したMODのIDを入力すればいいです。
なんか残ってるnet.fabricmcってのは多分消して大丈夫です。
こうなっていればおk

ExampleMod.kt のファイル名修正
味気ないのでMOD名.ktとでもしておきましょう。名前変更は先程と同じです。

MOD情報の修正
resourcesの中にあるfabric.mod.jsonを開きます。
開いたら、modid、entrypoints.mainの部分を最低限書き換えておけばいいと思います。
"id": "clickmanaita",
ドメイン(逆から).MODのID.ExampleMod.ktだったファイル名Kt::init
クラス名+Kt、Ktを付けないとダメっぽい。
"entrypoints": {
"main": [
"io.github.takusan23.clickmanaita.ClickManaitaKt::init"
]
},
あとアイコンのところのmodidもさっき変えちゃったので直しといてください。
その他は各自好きなように。以下例
{
"schemaVersion": 1,
"id": "clickmanaita",
"version": "${version}",
"name": "ClickManaita",
"description": "CheatMod",
"authors": [
"takusan_23"
],
"contact": {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/clickmanaita",
"sources": "https://github.com/takusan23/ClickManaita2"
},
"license": "Apache-2.0 License",
"icon": "assets/clickmanaita/icon.png",
"environment": "*",
"entrypoints": {
"main": [
"io.github.takusan23.clickmanaita.ClickManaitaKt::init"
]
},
"mixins": [
"modid.mixins.json"
],
"depends": {
"fabricloader": ">=0.8.7",
"fabric": "*",
"fabric-language-kotlin": "*",
"minecraft": "1.17.x"
},
"suggests": {
"flamingo": "*"
}
}
よくわからんけど Mixin も修正
resources内のmodid.mixins.jsonを開いて、packageの部分を直します。これなんなの?
ドメイン.MODのID.mixin
{
"required": true,
"package": "io.github.takusan23.clickmanaita.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [
],
"client": [
"ExampleMixin"
],
"injectors": {
"defaultRequire": 1
}
}
起動してみる
これで起動するはず。多分
アイテムを追加してみる
https://fabricmc.net/wiki/tutorial:items
この通りにやってみる
まずアイテムクラス(Kotlinだしobjectでもいいわ)を作ります。
object ClickManaitaItem {
/** 特になんの機能もないアイテム */
val CLICKMANAITA_WOOD = Item(FabricItemSettings().group(ItemGroup.TOOLS))
}

そしたらExampleModKtだったファイルを開いて、init関数内でアイテムを登録します。
@Suppress("unused")
fun init() {
// This code runs as soon as Minecraft is in a mod-load-ready state.
// However, some things (like resources) may still be uninitialized.
// Proceed with mild caution.
// アイテム追加。clickmanaita_woodのところはアイテムID
Registry.register(Registry.ITEM, Identifier("clickmanaita", "clickmanaita_wood"), ClickManaitaItem.CLICKMANAITA_WOOD)
}
そしたら起動してみましょう。
画面のようにアイテムが追加できていれば成功。

テクスチャ
画像ファイルを用意します。用意できたら、resources/assets/MODのID/textures/item/アイテムID.pngって感じで置きます。

そしたら今度は、resources/assets/MODのID/models/item/アイテムID.jsonって感じでJSONファイルを作成します。
中身はこうです。
{
"parent": "item/generated",
"textures": {
"layer0": "clickmanaita:item/clickmanaita_wood"
}
}
modのID:item/アイテムのIDって感じですね。このテキスチャ指定まじでややこしいからやめてほしい。
というかJSONは人間が書くもんじゃないだろ。本当に
成功してました。失敗してたらまじでつらい

おまけ クリックまな板みたいにクリックしたら増えるように
そのためにはItemクラスを継承する必要があります。のでClickManaitaBaseItemみたいなクラスを作成します。
/**
* 右クリックしたらアイテムが増えるアイテムを追加する
*
* @param settings クリエタブとか
* @param dropSize 増える数
* */
class ClickManaitaBaseItem(settings: Settings?, private val dropSize: Int = 2) : Item(settings) {
}
そしたらuseOnBlockメソッドをオーバーライドします。多分これがブロックを右クリックしたときに呼ばれる関数です。
/**
* ブロックを右クリックしたときに呼ばれる関数
* */
override fun useOnBlock(context: ItemUsageContext?): ActionResult {
val world = context?.world
val state = world?.getBlockState(context.blockPos)
val copyBlock = state?.block
repeat(dropSize) {
copyBlock?.afterBreak(world, context.player, context.blockPos, state, null, context.stack)
}
return ActionResult.SUCCESS
}
そしたらItem()の部分をClickManaitaBaseItem()に書き換えて実行してみると
object ClickManaitaItem {
/** 右クリックしたらアイテムが増える */
val CLICKMANAITA_WOOD = ClickManaitaBaseItem(settings = FabricItemSettings().group(ItemGroup.TOOLS), dropSize = 2)
}
増えます。まだチェストの中身とかは増えないのでまだまだって感じですかね。

ソースを読めるようにする
Minecraftのソースを読めるようにします。IDEAには逆コンパイラーが搭載されているのでなくても最悪いいですが、検索機能が使えないのでソースを生成しといたほうがいいと思います。
IDEAのGradleを押して、Tasks > fabric > genSources をダブルクリックすることで生成されます。

その後、適当にBlockクラスとかを参照した際に、上に出てくるChoose Sources...を押して、なんとか-sources.jarを選択することで生成したソースを読むことができるようになります。

Shift+Ctrl+Fの検索機能も開放されました。

配布可能ファイルを生成する
IDEA右上のGradleから、Tasks>buildへ進みbuildを選択することで配布可能なJarファイルを生成します。
成功すると、build/libs/に生成したファイルが有るはずです。(dev、sources、sources-dev じゃない方)
あとはこのJarファイルをCurseForgeとかで公開すればいいんじゃない?

エンドユーザー向けの説明とか
このModはFabric導入後、modsフォルダに以下のファイルをダウンロードして放り込んでおく必要があります。
- Fabric API
- Fabric Language Kotlin
- Kotlinという言語で書かれたため、他のMODと違い必要になる。
- https://www.curseforge.com/minecraft/mc-mods/fabric-language-kotlin/files
- Mod本体
ソースコード
ソースコードです。
https://github.com/takusan23/ClickManaita2/tree/1.17-fabric
クローンしたあとブランチ名「1.17-fabric」をチェックアウトしてください。一発でビルド通らないと思う。
追記:2021/07/28 1.17.1への対応
git使ってる場合はコミットするなりブランチ作るなりして現状の環境壊れても大丈夫な状態にしてください。
使ってなければどっかにバックアップしておけばいいのでは
gradle.propertiesを、最新の情報に更新します。
最新の値は「https://fabricmc.net/versions.html」から確認することが出来ます。
以下一例 (なんかコードブロックの言語にproperties指定したらシンタックスハイライト動いててちょっと感動)
kotlin.code.style=official
org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# Check these on https://modmuss50.me/fabric.html
minecraft_version=1.17.1
yarn_mappings=1.17.1+build.31
loader_version=0.11.6
#Fabric api
fabric_version=0.37.1+1.17
loom_version=0.8-SNAPSHOT
# Mod Properties
mod_version = 1.0.0
maven_group = io.github.takusan23
archives_base_name = clickmanaita
# Kotlin
kotlin_version=1.5.0
fabric_kotlin_version=1.6.0+kotlin.1.5.0
これで後はMinecraft Clientを起動するだけで1.17.1へ対応できました。
マイナーアップデートなのでクラスの変更とか無いけど大型アップデートならそううまく行かないと思う。
終わりに
いつもAndroidで書いてるKotlinでModdingできるので快適。Fabricへ移植したいから会社辞めたい。
そういえば私のマイクラ全盛期はナポアンのマイクラが最新Ver追いかけてたけどあのサイトどうなってんの?
- 本題
- 環境
- Minecraft 1.17
- 読まなくていい Java有償化の話
- Oracle JDK 有償化の話の続き 2021/10/06 追記
- Java 16 を入れる
- 追記:2021/07/28 JAVA_HOMEの設定
- IDEAを入れる
- テンプレートをクローン
- そううまく行かない
- Could not merge JARs! Deleting source JARs - please re-run the command and move on.
- You are using an outdated version of Java (8). Java 16 or higher is required
- プロジェクトの設定
- IDEAの設定
- 1.17 Fabric
- MOD情報の変更
- Javaのパッケージ名修正
- ExampleMod.kt のファイル名修正
- MOD情報の修正
- よくわからんけど Mixin も修正
- 起動してみる
- アイテムを追加してみる
- テクスチャ
- おまけ クリックまな板みたいにクリックしたら増えるように
- ソースを読めるようにする
- 配布可能ファイルを生成する
- エンドユーザー向けの説明とか
- ソースコード
- 追記:2021/07/28 1.17.1への対応
- 終わりに