Minecraft1.21.1→1.21.6
移行が必要そうな所
Tier
→ToolMaterial
(1.21.2)
ツールの木、石、鉄などを表すTier
がToolMaterial
に置き換えられた模様。
SwordItem
がなくなった (1.21.5)
能力値がデータコンポーネントに移されたため、SwordItem
などの個別のクラスが削除されたらしい。
NeoForge 21.5 for Minecraft 1.21.5
Fabric Modding Tutorial - Minecraft 1.21.4: Update to 1.21.5 | #63
Item#appendTooltip
が非推奨になった (1.21.6)
メソッドが非推奨になったことに伴い、FabricAPIを用いて登録するように変更された。
FabricのサンプルではItem/ItemStackへのアクセスの仕方がいまいち分からなかった。
Fabric for Minecraft 1.21.6 & 1.21.7
HumanoidMobRenderer
の型パラメータにRendererState
が追加された (1.21.2)
1.21.1ではHumanoidMobRenderer<T extends Mob, M extends HumanoidModel<T>>
1.21.6ではHumanoidMobRenderer<T extends Mob, S extends HumanoidRenderState, M extends HumanoidModel<S>>
ResourceKey
が必要になった (1.21.2)
アイテムやエンティティを登録するときにTODO:
data/recipe
のkey
の指定方法が変わった (1.21.?)
{
"key": {
"@": {"item": "minecraft:flint"}
}
}
{
"key": {
"@": "minecraft:flint"
}
}
assets/<namespace>/items
で指定するように (1.21.?)
アイテムのテクスチャをTODO:
アップデートの際に見る情報源
Minecraft
Minecraft Java Edition 1.21.6
新バージョンのお知らせでは下の方に技術的な変更点が載っていたりする。
プレイヤー向けの情報のため、Modをアプデするには情報が不足ぎみ。
とりあえず最低限の概要を抑えるには有効。
ModLoader
Fabric for Minecraft 1.21.6 & 1.21.7
NeoForge 21.6 for Minecraft 1.21.6
新バージョンの公開に合わせて変更点や移行方法がまとめられていたりする。
FabricAPIのようにModLoaderに依存する箇所でなければ、別のModLoaderの記事も役に立ったりする。
Modding by Kaupenjoe
YouTube, GitHub
Modを更新する様子が動画としてまとめられている。
更新前後の差分なら動画よりGitHubのCommitの方が追いやすい。
Linkie
Mappings
旧バージョンで使っていたクラス等がどのバージョンで消えたかを調べるために使用。
検索したクラスが旧バージョンにあって新バージョンにないとき、移行先なしと表示されるのではなく、検索結果に引っかからなくなる点に注意。
ソースコード
悩んだら確認すべき一次情報源。
使いたいクラスがバニラではどう使われているか観察してみる。
コードを全部追うのは無理なので、ひとまず動けばOKの精神で。
バニラのファイルはリソースパックやデータパックのフォーマットが変わった時にも活躍。
不具合
ワールド上の刀剣男士は設定したテクスチャが正常に反映されている。
しかし、刀剣男士のインベントリを開いた際に描画されるEntityがスティーブになっている。
TODO:画像を貼る
new PlayerRenderState().skin
がスティーブのスキンである。
なぜフィールドではgetTextureLocation
のテクスチャが使われ、
GUIではrenderState.skin
が使用されるのかは未解明。
createRenderState
でskinを上書きしたところ、nullPointerErrorが発生。
textureLocationがnullであることに起因するが、コンストラクタ内で初期化している。
コンストラクタを通らないでインスタンス化されることはあるか?
コンストラクタを呼ばれた瞬間はtextureLocationはnot nullであったのに、
createRenderStateではtextureLocationがnullになっていた。
コンストラクタでtextureLocationが初期化される前に、
superの中でcreateRenderStateが呼ばれている?
間のスタックフレームは見ることができず、詳細は不明。
extractRenderStateでskinを設定したら正常にテクスチャが描画された。
ひとまずは解決。
本来意図されている描画処理とは異なる組み方をしていそうなので、仕組みを理解したら書き直す。
不具合
Tooltipに翻訳キーの文字列がそのまま表示される。
TODO:画像を貼る
1.21.5で書かれたものを参考に書いたので、そもそも今の書き方は間違っていると思う。
Fabricの1.21.6への更新記事のサンプルではアイテムの情報にアクセスする方法が分からず。
旧来の書き方は非推奨という扱いなので、直りそうになければ元の書き方に戻す。
一旦tooltipの処理を全てコメントアウトしたら正常にtooltipが表示された。
DataComponents.CONTAINER
で記録したアイテムはバニラのシステムで自動的にtooltipに表示されるようになったのかもしれない。
少し触ってみて大丈夫そうならOKとして公開の準備をする。
念のためバニラからtooltipを表示するコードも探してみる。