はじめに
KubeJSは、MinecraftJEにおいて簡単にレシピの追加・アイテムの追加などを行えるMODとして知られています。特に、カスタムアイテムの追加に関してMODを介さない方法としては数少ない手段であり、手軽に追加を行いたい人にとっては重宝するもの。
データパックよりだいぶ自由度が高いです
さて、このKubeJSですが、完成品に特定のNBTタグをつけたいと思うことがあるでしょう。本記事では、エンチャントを例にNBTつきのレシピの定義方法を解説します。
- なお、本記事の内容はKubeJSに限ったものではなく、一般的に使えます
スクリプト
以下は、エンチャント付きのアイテムを出力するかまどのレシピの例です。これを任意の名前のjsファイルとして、server_scriptsフォルダ内に配置してください:
ServerEvents.recipes(event => {
event.smelting(
Item.of('minecraft:enchanted_book').withNBT({ //NBT定義
StoredEnchantments: [
{
id: "minecraft:sharpness",
lvl: 5 // レベル
}
]
}),
'minecraft:lapis_block' // 入力
)
})
このように、withNBTを用いることで任意のNBTのついたアイテムの出力が可能になります。エンチャントの部分は、StoredEnchantmentsの部分で定義しています。ここを変更することで、任意のエンチャントの設定が可能になります。
確認
実際に上記を保存してゲームを起動すると、以下のようになることが確認できると思います:

ラピスラズリブロックを焼くことで「ダメージ増加」のエンチャントがついた本が完成していることが分かりますね。
今回はかまどのレシピでしたが、スクリプトを変えることで任意のレシピを定義できます。
応用
なお、レシピのスクリプトの書き方については、下記の記事が参考になるかと思います:
これはMODにおけるカスタムレシピですので、そのまま流用するわけにはいきませんが、一般的に
ServerEvents.recipes(event => {
event.custom({
// ここにレシピのJSONをそのまま入れる
})
})
といった形を用いることで、KubeJSに対応したレシピを定義することが可能になります。