CustomModelDataタグを使ってOptifine CIT機能から脱却しよう
これとかこれとか、もふくらふとサーバーの関係でリソースパックの先進的(?)作業を色々やっているんだけど、最近Optifineアンチになりつつあって、可能ならOptifineのCustom Item Textures (略:CIT)からも脱却できないか調べてた。
(前から存在は認知していたのだけど)Minecraft 1.14以降にはアイテムのNBTタグの一種にCustomModelDataっていうのがあるらしく、このタグに1~99999999の値をどれか(情報ソースMinecraft Wikiより)割り当てることでオリジナルのアイテムのテクスチャを変えずにカスタムテクスチャや3Dモデルを付けることができる仕組みらしい。
もふくらふとのサーバーリソースパックは全てのテクスチャで例外なくOptifineのCIT機能を使っているので、当たり前だがOptifineかCIT機能を互換するCIT Resewnが無い環境ではテクスチャが表示できない。
これをCustomModelData実装に切り替えていけば、OptifineやCIT Resewnが不要になってバニラのマイクラでも表示できるようになり、テクスチャの利用がより増えるのではという考え。(?)
実際は見出し通りOptifineアンチでOptifineから脱却したいだけなんだけどね。
CrackShotPlusの作業
※前提としてCrackShotで武器を作成しておくこと。ここでは「COINGUN
」というCrackShot武器名の自前武器を例として使っています。
先にCrackShotPlusに慣れておいたほうがいいかも。
CrackShot武器にCustomModelDataタグを付けるには、CrackShotPlusのSkin機能を使う。本来この機能の用途は同じ武器でも文字通り見た目(Skin)をそれぞれプレイヤーが変えて選べるようにするためのものっぽいけど、ここでは割愛。
~/CrackShotPlus/weapons/
に、CrackShotの武器データに追加カスタムするCrackShotPlusデータのテキストファイル.yml
を作成しておく。
初期状態では武器にデフォルトのSkin情報が無いので、テキストファイル
.ymlの武器名:(ここではCOINGUN
)以下に、Skin: Default_Skin: "NoSkin"
を追加してデフォルトSkin名NoSkin
を定義する。
こんな感じ。(Shoot: Invisible Projectiles: true
とかは無関係なので無視して読んで下さい)
COINGUN:
Shoot:
Invisible_Projectiles: true
Trails:
Default_Trail: "coingun,coingun2,coingun3"
Skin:
Default_Skin: "NoSkin"
これでweapons側の作業はOK。
次にNoSkin
をどういう条件のSkinにするのかを設定する。
~/CrackShotPlus/skins/
にまたテキストファイル.ymlを作成する。ファイル名はなんでもOK。多分CrackShotPlusデフォルト武器用のスキンデータが既に作成されていると思うので、そのデータを見るとだいたい構造が分かるかもしれない。見ると、一つのファイルに複数の武器がまとめて設定されているのが分かる。プラグインのデフォルトデータに書き足しても大丈夫だろうけど、わかりにくいので今回は新規ファイルを作成した。
ファイルに以下の文を書き込む。
最上層のこの場合COINGUN_NoSkin
の部分は、[武器名]_[Skin名]にする必要がある。
Custom Model Data:
には、CustomModelDataタグで1~99999999の数値を入力する。ここでは1。入力するタグの数値が既に同じ元アイテムで使われていないか注意。(他のアイテムでの数値被りは問題なし)重複するとろくなことにならないと思われる。
Item_Name: " "
にはゲーム内で表示される(?)スキンの名前を入力する。
COINGUN_NoSkin:
Custom_Model_Data: 1
Scope:
Custom_Model_Data: 1
Reload:
Custom_Model_Data: 1
Item:
Item_Name: "&7No skin"
これでCrackShotPlus側の作業はすべて完了。この時点で/csp reloadコマンドでCrackShotPlusを再読み込みすると武器にCustomModelDataタグが付くようになっているはず。/shot getコマンドも流通分も一度メインハンドに武器を持ち直すまではデータの更新がかからないので注意。
次にリソースパックでテクスチャの適用条件を書く。
リソースパック側の作業
参考というかほぼパクリ元の動画:
リソースパック本体フォルダ/assets/minecraft
に、models
フォルダとtextures
フォルダを生成する。
textures
フォルダにはテクスチャのpng画像ファイルが置かれ、models
フォルダにはtexturesフォルダの画像をどのアイテムのCustomModelDataタグに適用するか記述するjsonファイルが置かれる。
(optifine
フォルダはCustom Item Textures (CIT)機能を使っているテクスチャの置き場所なので無関係)
~/assets/minecraft/textures/item/
にテクスチャ画像を配置する。
次に、~/assets/minecraft/models/item/
にテクスチャ画像と同名の.jsonファイルとテクスチャを適用するアイテムのオリジナルのアイテムID名の.jsonファイルを作成する。
テクスチャファイルと同名.json
(coin_gun.json)
には以下の文章を書いて保存した。
※「coin_gun
」ごとコピーしないようにご注意ください
※テクスチャが複数枚必要なものはlayer1
,layer2,
…と増える?
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "minecraft:item/coin_gun"
}
}
テクスチャを適用するアイテムのオリジナルのアイテムID名の.jsonファイル(iron_horse_armor.json
)には以下のように。
先ほどCrackShotPlusのSkinの設定でCOINGUNのデフォルトスキンをCustomModelDataタグ1で設定したのでここでも1を入力。
このjsonファイルはベースアイテムiron_horse_armorのファイルなので(語彙力なし)、他にiron_horse_armorをベースアイテムにしたCustomModelDataタグ2のテクスチャが増えた時には{“predicate”: {“custom_model_data”:2}, “model”: “minecraft:item/○○○”}のように書き足す必要がある。
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "minecraft:item/iron_horse_armor"
},
"overrides": [
{"predicate": {"custom_model_data":1}, "model": "minecraft:item/coin_gun"}
]
}
これでリソースパック側の作業も完了!
例のCOINGUNは鉄の馬鎧がCustomModelDataタグ1の場合にテクスチャを付けるというだけなので本物の武器「COINGUN」でなくても鉄の馬鎧にCustomModelData1が付いていればテクスチャが適用されることになる。
YATTA
ついにバニラでカスタムテクスチャが見れるようになった!
注意
CITを使ってでもCustomModelDataタグ利用でテクスチャを付けることができるが、バニラのシステムとCITの両方で同じテクスチャファイル名が存在するとOptifineの環境ではテクスチャを読み込んでくれなくなったので残置ファイルには注意。なぜかCIT Resewnではこの状態でもテクスチャが表示された。
コメント