データパック作成中#2~NBTクラフト~

マイクラのデータパックでマイクラの機能を使ってレシピを追加しても、NBT付きアイテムはクラフトできません。
そこで、国内外いろんな人がいろんなアイテムをクラフトする方法を考えてきました。
その中で軽く簡単な私が気に入った方法を紹介します。

レシピ解除を検知する

初めてそのレシピを使用してクラフトするとそのレシピが解放されますよね。
それを進捗で検知して、クラフトしたアイテムをNBT付きのアイテムに置き換えるという手法です。
進捗を使用するため、わざわざレシピのために毎tickコマンドを実行する必要がありません。

実装方法

1.カスタムアイテムを作るレシピを追加する。

詳しい方法は、Minecraft公式wikiMinecraft Modding Wikiを参考にしてください。
typeはcrafting_shaped、crafting_shapeless、stonecuttingが使えます。
ホッパーでアイテムを吸い取れるかまど系のtypeはバグ防止のため使わないほうがよいです。
素材アイテムも完成品アイテムも普通のレシピ追加と同じように行うので、レシピのJSONを生成するツールなども使えます。
データパックで複数のレシピを追加しそれらのレシピが似ている場合、間違って別のアイテムをクラフトするのを防止するために違うアイテムを完成品アイテムにするといいでしょう。

2.レシピ開放を検知する進捗を追加する。

詳しくは説明しませんが、triggerをminecraft:recipe_unlockedにし、conditionsに先ほど追加したrecipeを指定し、rewardsで次に追加するfunctionを指定すればいいです。
{
"criteria":{
"ckenja_example_nether_star_sword":{
"trigger":"minecraft:recipe_unlocked","conditions":{
"recipe":"ckenja_recipe_test:example"
}
}
},
"rewards": {
"function":"ckenja_recipe_test:example"
}
}

3.クラフトしたアイテムをカスタムアイテムに置き換えるfunctionを追加する。

先ほどのレシピの完成品アイテムを消し、カスタムアイテムを与えます。
そしてまたクラフトするときのために進捗とレシピを消します。
カスタムアイテムを与えるのは、giveコマンドではなくsummonコマンドを使うと、インベントリがいっぱいでもアイテムが消えずに済みます。
またこの関数を工夫することでアイテムを作ることでボスやペットを召喚したり、レベルや職業ごとに別のアイテムをクラフトさせたりすることも可能です。夢が広がりますね!
clear @s minecraft:diamond_sword
summon minecraft:item ~ ~ ~ {PickupDelay:0,Item:{id:"minecraft:diamond_sword",Count:1b,tag:{display:{Name:'{"text":"ネザースターの剣","color":"light_purple","bold":true,"italic":false}'}}}}
advancement revoke @s only ckenja_recipe_test:example
recipe take @s ckenja_recipe_test:example

おまけ QTable

QTableは、作業台の上にアイテムを置いてクラフトできるようになるデータパックです。
このデータパックには、外部からレシピを追加できます。
若干重たいのが難点ですが、リアルでワクワクするので対応するのも悪くないと思います。
方法はCurseForgeのDescriptionの下の方に書いてあります。

コメント