たくさんの自由帳

自作 MOD の Minecraft 1.21.4 移行メモ

投稿日 : | 0 日前

文字数(だいたい) : 2130

どうもこんにちわ
Fabric / Forge共にリリースされているのに1ヶ月も空いてしまいすいません。なんなら1.21.4 移行作業一緒に年越ししてしまったのでいい加減やります。

本題

自作MODMinecraft 1.21.4移行記録です。
ネタバレしますが今回は特に難しいところはないはず。というかあっさり終わって これで良いの? 感がある。一応遊んでみたけど動いてそうなんだよな。

Imgur

今回も今回とてFabricの方々が差分を書いてくれているので、それにのっかります。ありざいす。
https://fabricmc.net/2024/12/02/1214.html

前回

https://takusan.negitoro.dev/posts/minecraft_mod_1_21_2_migration/

Gradle

今まで書いてなかったけどFabricの方は8.11.1になってました。
Forge8.7みたいです。

アイテムのテクスチャ指定が変更

ブロックのテクスチャでassets/{mod_id}/blockstatesを作るのと同じように、アイテムでもassets/{mod_id}/itemsを作るようです。

Imgur

ファイル名は多分{アイテムID}.jsonで、内容は多分こんな感じ。

{
  "model": {
    "type": "minecraft:model",
    "model": "clickmanaita:item/clickmanaita_wood"
  }
}

clickmanaita:item/clickmanaita_woodMOD の IDアイテムの ID。各自変えてね

アイテムブロックのテクスチャ

アイテム状態のブロックに関しても同様に作成しないとアイテム状態のテクスチャが当たりません。
で、ひとつ朗報があり、アイテムブロックの方は/assets/{mod_id}/models/itemの方のファイルが不要になります。

例えば、assets/{mod_id}/models/item/clickmanaita_block_wood.jsonのようなファイルは削除して

{
  "parent": "clickmanaita:block/clickmanaita_block_wood"
}

新しくassets/{mod_id}/items/clickmanaita_block_wood.jsonファイルを作成し、以下のように書けば良いです。

{
  "model": {
    "type": "minecraft:model",
    "model": "clickmanaita:block/clickmanaita_block_wood"
  }
}

レシピの API

レシピにアクセスしてる箇所がなければスルーできます。

一部 Stream API を返す

Stream APIってのは他の言語で言うところのコレクション(配列)の操作関数の集まりで、filter { }とかmap { }とかのあれ。
Javaだと明示的にstream()を呼んで変換する手間があったのでまあJavaで書いてる人向けなのかも。

Kotlinだといい感じに関数を生やしてくれてたので特に困ってなかった。というか配列じゃなくてStreamになったのでちょっと直さないとかも。

placementSlots が empty の場合は -1

placementSlots、レシピのパターンでスロットを使っていない場所(チェストだと真ん中のスロットは空っぽですよね)
-1を返すようになった?ので、placementSlotsの分forで回してingredients[i]している箇所があれば-1が来たときにはItemStack.EMPTYするなど対策が必要そう。

getMatchingItems が非推奨

代替メソッドがわからない。toDisplay().getStacks()かなあ。
なおContextParameterMapSlotDisplayContexts.createParameters(World)で作れます。

差分

FabricForgeJSON作って消すだけなので、両方作ってる場合は片方で作ってもう片方のMOD Loaderの移行作業の際にはgit checkout ファイルパスJSONを持ってくると速い。
以下例

git checkout 1.21.4-forge
git checkout 1.21.4-fabric src/main/resources/assets/clickmanaita/items/

終わり

これ急げば移行作業と一緒に年越しするまでもなかったな...
こんな差分少ないとは思わんかった(てか今までがおかしいんじゃないか?)