MODなしでカスタムエンチャントを作る:データ駆動型エンチャントのフォーマット
エンチャントはデータパックのJSONになったので、カスタムエンチャントにMODは不要です。ここではファイルの形、実際に効果を発揮するコンポーネント、そして入手可能にする方法を解説します。保存先はenchantmentフォルダの中です。
エンチャントはかつてハードコードされていました。今ではデータパックのデータになっているため、本当の意味でのカスタムエンチャント——新しい名前、新しい効果、新しいコスト曲線——はJSONファイル1つで作れます。
保存場所
data/<namespace>/enchantment/lightning_strike.json
リネーム以降の他のデータパックカテゴリと同様、単数形の enchantment/ です。
最小構成のファイル
{
"description": { "translate": "enchantment.my_pack.lightning_strike" },
"supported_items": "#minecraft:enchantable/melee_weapon",
"weight": 2,
"max_level": 3,
"min_cost": { "base": 10, "per_level_above_first": 10 },
"max_cost": { "base": 50, "per_level_above_first": 10 },
"anvil_cost": 4,
"slots": ["mainhand"]
}
これだけで、読み込まれてアイテムに表示される本物のエンチャントになります。ただし、まだ何も起きません——挙動は別ファイルです——そしてタグを付けるまで(後述)エンチャントテーブルには出てきません。
weightはエンチャントテーブルでのレア度です。バニラでは一般的なものに10、非常に珍しいものに1を使います。パーセンテージではなく相対値です。slotsはエンチャントが有効になる場所を決めます:mainhand、offhand、armor、headなど。これは必須で、省略するとファイルの読み込みに失敗します。supported_itemsはアイテムタグかリストを受け取ります。妥当なグループ向けの#minecraft:enchantable/*タグはすでに存在します——melee_weapon、sharp_weapon、mining、armorなど。enchantable/swordは存在せず、存在しないタグはファイルを失敗させます。
実際に効果を出させる
effects で挙動を結びつけます:
"effects": {
"minecraft:post_attack": [{
"enchanted": "attacker",
"affected": "victim",
"effect": { "type": "minecraft:run_function", "function": "my_pack:strike" },
"requirements": { "condition": "minecraft:random_chance", "chance": 0.25 }
}]
}
post_attack は、それが誰のエンチャントか(enchanted)と、効果が誰に及ぶか(affected)を知る必要があり、どちらも必須です。run_function は逃げ道です——関数にできることは、エンチャントにもできます。組み込みの効果タイプはダメージ、ノックバック、耐久値、アイテムドロップ、属性をカバーしており、関数は一切不要で、しかも軽量です。
requirements は任意の述語を受け取るので、対象の種類、天候、ランダムな確率で条件を付けるのもJSON1ブロックです。
名前を付ける
description はテキストコンポーネントなので、ハードコードした名前でも動きます:
"description": { "text": "Lightning Strike", "color": "gold" }
しかし、translate キーとリソースパック内の言語ファイルがあれば、他の言語のプレイヤーにも正しく読まれます——このサイトがゲーム用語をMojang自身の翻訳から取っているのと同じ理由です。
入手可能にする
ルートは3つあり、たいていは複数を併用したくなります:
- エンチャントテーブル ——
weightとコスト曲線を設定し、エンチャントが#minecraft:in_enchanting_tableに入っていれば可能です。 - ルートテーブル ——エンチャントを記載した
enchant_randomly、あるいはコストで競わせたいならenchant_with_levels。 - 村人が取引をする ——取引のアイテムに、あなたのエンチャントが付いたエンチャントの本を設定します。
#minecraft:in_enchanting_table に追加することが、テーブルにそれを出させるために必要です。このタグは忘れやすく、忘れると存在するのに決して現れないエンチャントができあがります。
タグとスロットを設定した状態で、エンチャントJSONとその防具装飾の対応版をCustom Enchantment & Trim Builderで作成しましょう。