マイクラ1.21で追加されたカスタムエンチャントまとめ


# 1.はじめに
長いJSON例は見やすいように折りたたんでいます。
間違ってる場合もあります。
この記事に書かれていない書き方もできる場合があります。
エンチャントは実験的機能なので自己責任でお願いします。

# 2.初期設定
<details><summary><font color=#1a73e8>何も指定していないJSON例</font></summary>

```json:default
{
  "description": {
    "text": "エンチャント表示名"
  },
  "supported_items": [],
  "weight": 1,
  "max_level": 1,
  "min_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "max_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "anvil_cost": 0,
  "slots": []
}
```
```json:自分がよく使う初期JSON
{
  "description": "",
  "supported_items": "#minecraft:enchantable/durability",
  "weight": 1,
  "max_level": 1,
  "min_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "max_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "anvil_cost": 0,
  "slots": [
    "any"
  ],
  "effects": {}
}
```

</details>

不必要なものを省き、最小値を指定したJSONです。
ファイルは`data/<namespace>/enchantment/<name>.json`に保存します。
`/enchant @s <namespace>:<name>`で追加されたか確認できます。

:::note warn
エンチャントのデータパック更新は`reload`コマンドではできません
ワールドを入り直して更新してください
:::

# 3.エンチャントの基本フィールドの説明
## description
エンチャント名に表示させるテキスト
JSONテキスト形式で指定できる
## exclusive_set（オプション）
共存できないエンチャント
エンチャントのリスト、単一、タグで指定
## supported_items
エンチャント可能なアイテム
アイテムのリスト、単一、タグで指定
## primary_items（オプション）
エンチャントテーブルや取引アイテムの装備に表示されるアイテム
アイテムのリスト、単一、タグで指定
`supported_items`に含まれているアイテムのみ指定可能
## weight
エンチャントの出現頻度（低いほどレア）
1~1024の整数を指定
## max_level
エンチャントの最大レベル
1~255の整数を指定
## min_cost・max_cost
エンチャントテーブル内のコスト（砥石で得られる経験値量にも影響）
30より大きい値になるとエンチャントテーブルに表示されない
- **base**
レベル1のエンチャントの基本コスト
0以上の整数を指定
- **per_level_above_first**
1レベルごとの追加コスト
0以上の整数を指定
:::note warn
エンチャントテーブルに表示させる場合`in_enchanting_table`タグを設定する必要がありますが、
デフォルトでエンチャントを付与出来ないアイテム（ブロックや食べ物など）では表示されません。
:::
## anvil_cost
金床のエンチャントに必要なレベル
0以上の整数を指定
## slot
エンチャントが機能するスロットを指定
| 指定スロット | 効果が発動する位置 |
|:-|:-|
|**any**|下記全てのスロット|
|**hand**|メインハンドとオフハンド|
|**mainhand**|メインハンド|
|**offhand**|オフハンド|
|**armor**|下記全ての装備スロット|
|**head**|頭|
|**chest**|胴|
|**legs**|脚|
|**feet**|足|
|**body**|馬や狼などの鎧スロット|
## effects（オプション）
色んなエンチャント効果を設定できる
[後述で記載](#7effectsの設定エフェクトコンポーネント)


# 4.値の指定
[後述で記載](#7effectsの設定エフェクトコンポーネント)している`effect`内などで、値を指定するときに使用する記述の解説です。

:::note info
以降レベルごとの値で指定と書かれている場合、
定数以外にも、下記のオブジェクトで指定が可能です。
:::

### **linear**
線形的なレベルごとの値を指定
計算式： `base + per_level_above_first * (level - 1)`
- **base:**
レベル1の時の値
- **per_level_above_first:**
レベルが1上がるごとの追加の値

### **clamped**
最小値と最大値の間で変化させる
`value ≦ min` の時は`min`の値、
`value ≧ max` の時は`max`の値、
`min < value < max` の時は`value`の値が設定される
- **value:**
レベルごとの値で指定
- **min:**
出力の最小値
- **max:**
出力の最大値

### **fraction**
分数の値で変化させる
計算式：`numerator / denominator`
- **numerator:**
分子の値をレベルごとの値で指定
- **denominator:**
分母の値をレベルごとの値で指定

### **levels_squared**
レベルを二乗した値のレベルで計算するレベルごとの値
計算式：`level ^ 2 + added`
- **added:**
レベルを二乗した値に加算される値

### **lookup**
レベル別に値をそれぞれ指定
また、指定された値より大きい場合に適用されるレベルごとの値
- **values:**
適用したいレベルでの値をリストで指定
- **fallback:**
`values`で指定したサイズよりレベルが大きい場合に適用される値

<details><summary><font color=#1a73e8>この見出しのJSON例を表示</font></summary>

**linear:**
例では、エンチャントレベルが1の時の値は`5`で、レベルが上がるごとに`2`ずつ増加する
```json:linearの使用例
{
  "type": "minecraft:linear",
  "base": 5,
  "per_level_above_first": 2
}
```

**clamped:**
例では、値は`0`～`16`の間で変化し、レベル1の場合は`3`で、レベルが上がるごとに`5`ずつ増加する
4レベル以上は`16`のまま変化しない
```json:clampedの使用例
{
  "type": "minecraft:clamped",
  "max": 16,
  "min": 0,
  "value": {
    "type": "minecraft:linear",
    "base": 3,
    "per_level_above_first": 5
  }
}
```

**fraction:**
例では、レベル1の時の値は`1/2`で、レベルが上がるごとに`1/3`、`1/4`…と0に近づくように変化する
```json:fractionの使用例1
{
  "type": "minecraft:fraction",
  "denominator": {
    "type": "minecraft:linear",
    "base": 2,
    "per_level_above_first": 1
  },
  "numerator": 1
}
```

**levels_squared:**
例では、レベル1の時の値は`2`で、レベルが上がるごとに`5`、`10`、`17`...と増加する
```json:levels_squaredの使用例
{
  "type": "minecraft:levels_squared",
  "added": 1.0
}
```

**lookup:**
例では、レベル1の時は3、レベル2の時は`5`、レベル3の時は`11`となり、
レベル4以降はすべて`19`になる
```json:lookupの使用例
{
  "type": "minecraft:lookup",
  "values": [
    3,
    5,
    11
  ],
  "fallback": 19
}
```

</details>

# 5.effectの効果値に対する処理タイプ
### add
処理後の値に`value`の値を加算する
- **value:**
加算する値をレベルごとの値で指定
負の値も可能
### all_of
リストに含まれる複数の効果値の処理タイプを処理する
- **effects:**
実行する効果値の処理タイプのリスト
### multiply
処理後の値に`factor`の値を乗算する
- **factor:**
乗算する値をレベルごとの値で指定
### remove_binomial
確率で成功すると処理後の値から1減らす処理をする
- **chance:**
1減らす確率をレベルごとの値で指定
1に近いほど成功する
### set
処理後の値をvalueの値で上書きする処理をする
- **value:**
上書きする値をレベルごとの値で指定


# 6.effectのエンティティやブロックに対する処理タイプ
[後述で記載](#7effectsの設定エフェクトコンポーネント)している`effect`内などで、エンティティやブロックに対して効果を示す記述の解説します。
エフェクトコンポーネントによっては指定できないものもあります。
また、実行位置などもエフェクトコンポーネントによって異なります。
JSON例には[後述で記載](#7effectsの設定エフェクトコンポーネント)されている内容を含みます。

## all_of
下記の処理タイプのエフェクトをリストで指定し、複数実行する
`requirements`で条件を指定する際、複数の処理タイプに適用できる
- **effects:**
実行するエフェクトのリスト

例では、オフハンドにタマゴを持っている時のみ、確率で音を鳴らしニワトリをスポーンさせる
```json:オフハンドにタマゴを持っていると稀に音を鳴らしニワトリ召喚
{
  "minecraft:tick": [
    {
      "effect": {
        "type": "minecraft:all_of",
        "effects": [
          {
            "type": "minecraft:play_sound",
            "sound": "minecraft:entity.chicken.egg",
            "volume": 1,
            "pitch": 1
          },
          {
            "type": "minecraft:summon_entity",
            "entity": "minecraft:chicken"
          }
        ]
      },
      "requirements": [
        {
          "condition": "minecraft:random_chance",
          "chance": 0.005
        },
        {
          "condition": "minecraft:entity_properties",
          "entity": "this",
          "predicate": {
            "slots": {
              "weapon.offhand": {
                "items": "minecraft:egg"
              }
            }
          }
        }
      ]
    }
  ]
}
```

## apply_mob_effect
エンティティに対してMOBエフェクトを適用する
複数指定した場合はランダムで選択される
- **to_apply:**
適用するMOBエフェクト
エフェクトIDのリスト、単一ID、タグで指定
- **min_duration・max_duration:**
効果の最小および最大持続時間（秒）を表すレベルごとの値
- **min_amplifier・max_amplifier:**
効果の最小および最大の強さを表すレベルごとの値

例では、攻撃したエンティティに0.3秒だけ高レベルの浮遊を付与し、上空に飛ばす
```json:攻撃したエンティティに一瞬だけ浮遊を付与

{
  "minecraft:post_attack": [
    {
      "affected": "victim",
      "enchanted": "attacker",
      "effect": {
        "type": "minecraft:apply_mob_effect",
        "to_apply": "minecraft:levitation",
        "min_duration": 0.3,
        "max_duration": 0.3,
        "min_amplifier": 100,
        "max_amplifier": 100
      }
    }
  ]
}
```

## damage_entity
影響を受けるエンティティにダメージを与える
ダメージの量は、指定された範囲内でランダムに決まる
- **damage_type:**
与えるダメージタイプIDを指定
- **min_damage・max_damage:**
ダメージの最小値と最大値をレベルごとの値で指定

例では、必ず21のダメージを与える
```json:固定で21のダメージを与える
{
  "minecraft:post_attack": [
    {
      "enchanted": "attacker",
      "affected": "victim",
      "effect": {
        "type": "minecraft:damage_entity",
        "damage_type": "minecraft:player_attack",
        "min_damage": 21,
        "max_damage": 21
      }
    }
  ]
}
```

## change_item_damage
**ver1.21.2から**
エンチャントされたアイテムの耐久値を増減させる
- **amount:**
アイテムの耐久値の消耗する値をレベルごとの値で指定

## damage_item
**ver1.21.1まで**
エンチャントされたアイテムの耐久値を増減させる
- **amount:**
アイテムの耐久値の消耗する値をレベルごとの値で指定

:::note warn
デフォルトで耐久値のないアイテムには機能しません
クリエイティブ状態では機能しません
:::

例では、水中にいるとき耐久値の消耗する値をマイナスにすることで耐久値を回復させている
```json:水中にいると耐久値が徐々に回復する
{
  "minecraft:tick": [
    {
      "effect": {
        "type": "minecraft:damage_item",
        "amount": -1
      },
      "requirements": {
        "condition": "minecraft:entity_properties",
        "entity": "this",
        "predicate": {
          "location": {
            "fluid": {
              "fluids": "#minecraft:water"
            }
          }
        }
      }
    }
  ]
}
```

## explode
爆発を発生させる
- **attribute_to_user（オプション）:**
エンチャント所有者が爆発ダメージを受けるかどうかをブール値で指定
デフォルトは`false`でダメージを受ける
- **damage_type（オプション）:**
爆発のダメージタイプを指定
省略した場合、ダメージが発生しない
- **immune_blocks（オプション）:**
爆発によって破壊されないブロックを設定する
ブロックのリスト、単一、タグで指定
- **knockback_multiplier（オプション）:**
爆発によるノックバック乗数をレベルごとの値で指定
省略した場合、デフォルトの爆発ノックバックを適用
- **offset（オプション）:**
爆発が発生する位置のオフセットを指定（デフォルト:`[0, 0, 0]`）
- **radius:**
爆発の半径をレベルごとの値で指定
- **create_fire（オプション）:**
爆発によって火が発生するかをブール値で指定
デフォルトは`false`で火が発生しない
- **block_interaction:**
爆発がブロックとどのように相互作用するかを設定する
  - `none`
  効果なし
  - `block`
  ブロックが爆発を引き起こしたかのように動作する
  ゲームルールの`blockExplosionDropDecay`の影響を受ける
  - `mob`
  MOBが爆発を引き起こしたかのように動作する
  ゲームルールの`mobExplosionDropDecay`、`mobGriefing`？の影響を受ける
  - `tnt`
  TNTが爆発を引き起こしたかのように動作する
  ゲームルールの`tntExplosionDropDecay`の影響を受ける
  - `trigger`
  レッドストーンで起動するブロックをトリガーする（ウィンドチャージと同じ）
- **small_particle:**
爆発時に発生する小さなパーティクルを指定
- **large_particle:**
爆発時に発生する大きなパーティクルを指定(※[バグあり](https://bugs.mojang.com/browse/MC-266653))
- **sound:**
爆発時に再生されるサウンドを指定

```json:矢が刺さると爆発する
{
  "minecraft:hit_block": [
    {
      "effect": {
        "type": "minecraft:explode",
        "attribute_to_user": true,
        "damage_type": "minecraft:explosion",
        "radius": {
          "type": "minecraft:linear",
          "base": 1,
          "per_level_above_first": 2
        },
        "block_interaction": "mob",
        "small_particle": {
          "type": "minecraft:heart"
        },
        "large_particle": {
          "type": "minecraft:explosion"
        },
        "sound": "minecraft:entity.generic.explode"
      },
      "requirements": {
        "condition": "minecraft:entity_properties",
        "entity": "this",
        "predicate": {
          "type": "#minecraft:arrows"
        }
      }
    }
  ]
}
```

## ignite
影響を受けたエンティティを指定された秒数だけ発火させる
- **duration:**
発火させる時間（秒）をレベルごとの値で指定

例では、ダメージを与えたエンティティに5秒間延焼させる
```json:攻撃した相手を5秒間発火させる
{
  "minecraft:post_attack": [
    {
      "affected": "victim",
      "effect": {
        "type": "minecraft:ignite",
        "duration": 5
      }
    }
  ]
}
```

## play_sound
サウンドを再生する
- **sound:**
再生するサウンドID
- **volume:**
サウンドの音量を指定
`0.00001`~`10.0`の浮動小数点で指定
- **pitch:**
音の高さを指定
`0.00001`~`2.0`の浮動小数点で指定

```json:矢を放つと音が出る
{
  "minecraft:projectile_spawned": [
    {
      "effect": {
        "type": "minecraft:play_sound",
        "sound": "minecraft:entity.firework_rocket.blast",
        "volume": 1,
        "pitch": 1
      }
    }
  ]
}
```

## replace_block
ワールド内のブロックを置き換える
- **block_state:**
設置するブロック状態を指定するブロック状態プロバイダーの指定
- **offset（オプション）:**
イベントの位置からブロックを配置する位置の指定（デフォルト:`[0, 0, 0]`）
- **predicate（オプション）:**
ブロックを置き換えるかどうかを決定する条件（worldgenのブロックプレディケートを使用）
デフォルトは全てのブロックを置き換える
- **trigger_game_event（オプション）:**
ブロックが置き換えられたときにトリガーされるゲームイベントIDを指定

例では、左クリックしたブロックや、矢などが刺さったブロックをダイヤモンドブロックに置き換える
```json:ダイヤモンドブロックに変更
{
  "minecraft:hit_block": [
    {
      "effect": {
        "type": "minecraft:replace_block",
        "block_state": {
          "type": "minecraft:simple_state_provider",
          "state": {
            "Name": "minecraft:diamond_block"
          }
        }
      }
    }
  ]
}
```

## replace_disk
ワールド内の円柱状にブロックを置き換える
- **block_state:**
設置するブロック状態を指定するブロック状態プロバイダーの指定
- **radius:**
円柱の半径をレベルごとの値で指定
- **height:**
円柱の高さをレベルごとの値で指定
- **offset（オプション）:**
イベントの位置から配置する円柱の中心までの位置の指定（デフォルト:`[0, 0, 0]`）
- **predicate（オプション）:**
ブロックを置き換えるかどうかを決定する条件（worldgenのブロックプレディケートを使用）
デフォルトは全てのブロックを置き換える
- **trigger_game_event（オプション）:**
ブロックが置き換えられたときにトリガーされるゲームイベントIDを指定

例では、自分のブロック位置が変わるたびに半径3マス内の草ブロックを菌糸に置き換える
```json:周囲の草ブロックを菌糸に変更
{
  "location_changed": [
    {
      "effect": {
        "type": "minecraft:replace_disk",
        "block_state": {
          "type": "minecraft:simple_state_provider",
          "state": {
            "Name": "minecraft:mycelium"
          }
        },
        "height": 1,
        "offset": [
          0,
          -1,
          0
        ],
        "predicate": {
          "type": "minecraft:matching_blocks",
          "blocks": "minecraft:grass_block"
        },
        "radius": 3
      }
    }
  ]
}
```

## run_function
コマンド関数を実行する
実行者は`effect`の実行エンティティで、実行位置はイベントの位置になる
- **function:**
実行するコマンド関数の名前空間ID

```json:矢を撃てなくする
{
  "minecraft:projectile_spawned": [
    {
      "effect": {
        "type": "minecraft:run_function",
        "function": "namespace:custom"
      }
    }
  ]
}
```
```:custom.mcfunction
kill @s
```

## set_block_properties
- **properties:**
変更するブロック状態と値を指定
- **offset（オプション）:**
イベントの位置から配置する円柱の中心までの位置の指定（デフォルト:`[0, 0, 0]`）
- **trigger_game_event（オプション）:**
ブロックが置き換えられたときにトリガーされるゲームイベントIDを指定

例では、殴ったブロックの`waterlogged`を`true`にする
```json:殴ったブロックが浸水可のブロックの場合、水を満たす
{
  "minecraft:hit_block": [
    {
      "effect": {
        "type": "minecraft:set_block_properties",
        "properties": {
          "waterlogged": "true"
        }
      }
    }
  ]
}
```

## spawn_particles
影響を受けるエンティティを基準にパーティクルを表示する
- **particle:**
表示させるパーティクルタイプを指定
- **horizontal_position・vertical_position:**
  - **type**
  位置の選択タイプの指定
    - `entity_position`
    エンティティの位置にパーティクルを表示
    - `in_bounding_box`
    エンティティの当たり判定ボックス内のランダムな位置にパーティクルを表示
  - **offset（オプション）**
  パーティクル表示位置のオフセットを指定（デフォルト:`0`）
  - **scale（オプション）**
  `type`が`in_bounding_box`の場合のみ使用可能（デフォルト:`1`）
- **horizontal_velocity・vertical_velocity:**
  - **base（オプション）**
  指定された軸に沿った基本速度を指定（デフォルト:`0`）
  - **movement_scale（オプション）**
  エンティティの移動速度に応じて、指定された軸に沿った速度に追加（デフォルト:`0`）
  例えば、`1`の場合はエンティティの速度が生成されたパーティクルに追加される
- **speed（オプション）:**
パーティクルの基本スピードを指定（デフォルト:`0`）
指定しない場合、上記で設定しても速度は0になる
**`horizontal_velocity`**、**`vertical_velocity`** の値に乗算される（※要検証）

例では、自信のヒットボックス内に毎ティック`trial_spawner_detection`パーティクルを表示
```json:自身のヒットボックスの範囲内にパーティクルを表示
{
  "minecraft:tick": [
    {
      "effect": {
        "type": "minecraft:spawn_particles",
        "particle": {
          "type": "minecraft:trial_spawner_detection"
        },
        "horizontal_position": {
          "type": "in_bounding_box"
        },
        "vertical_position": {
          "type": "in_bounding_box"
        },
        "horizontal_velocity": {},
        "vertical_velocity": {}
      }
    }
  ]
}
```

## summon_entity
指定したエンティティを召喚する
複数指定した場合はランダムで選択される
- **entity:**
エンティティタイプIDのリスト、単一ID、タグで指定
- **join_team:**
召喚されたエンティティがエンチャントされたアイテムの所有者のチームに参加するかどうかを指定するブール値

例では、ヒットしたブロックにブタかウシをランダムに召喚する
```json:ヒットしたブロックにブタかウシを召喚
{
  "minecraft:hit_block": [
    {
      "effect": {
        "type": "minecraft:summon_entity",
        "entity": [
          "minecraft:cow",
          "minecraft:pig"
        ]
      }
    }
  ]
}
```

# 7.effectsの設定（エフェクトコンポーネント）
`effects`は基本的にリストで指定します。
`effects`リスト内に`effect`オブジェクトを複数指定可能で、後述の`id`を指定します。
値は定数または、レベル毎の値で指定できます。
さらに`effect`にはオプションで`requirements`を指定する事でエンティティや位置など`predicate`と同じような条件をつけることができます。

<!--
:::note warn
`requirements`は`effect`に対してのみ指定できます。
つまり`attributes`や`tick`のような、`effect`がないエフェクトコンポーネントでは使用できません。
:::
-->

## armor_effectiveness
攻撃対象の防御力の効果量を設定する
0から1の範囲で設定され、0の場合は防御力を完全に無視する
デフォルトの値は1で、防御力が全て反映される状態
例では、-0.5を加算することで、結果の値が0.5になり対象の防御力を半分にしている
```json:攻撃対象の防御力を半分にする
{
  "armor_effectiveness": [
    {
      "effect": {
        "type": "add",
        "value": -0.5
      }
    }
  ]
}
```
## attributes
属性効果を設定する
- **attribute:**
変更する属性のID
- **id:**
属性修飾子の名前（なんでもOK）
- **operation:**
属性修飾子の補正形式
  - `add_value`
  - `add_multiplied_base`
  - `add_multiplied_total`
- **amount:**
補正値をレベルごとの値で指定

例では、エンチャントレベル毎にスケールを2倍、3倍、4倍...とする
```json:自分のサイズが2倍、3倍...になる
{
  "minecraft:attributes": [
    {
      "amount": {
        "type": "minecraft:liner",
        "base": 2,
        "per_level_above_first": 1
      },
      "attribute": "minecraft:generic.scale",
      "id": "custom_enchantment.scale",
      "operation": "add_multiplied_base"
    }
  ]
}
```
## ammo_use
発射武器の弾を消費するときに使用される弾の数を変更
弓の発射時やクロスボウの装填時に処理される
例では、弾を消費時に2つ消費する
```json:弾の消費を2個にする
{
  "minecraft:ammo_use": [
    {
      "effect": {
        "type": "minecraft:add",
        "value": 1
      }
    }
  ]
}
```

## block_experience
ブロックを採掘したときにドロップする経験値の量に対する効果
例では、鉱石を掘った時の経験値量が一万倍になる
```json:採掘時の経験値量を一万倍にする
{
  "minecraft:block_experience": [
    {
      "effect": {
        "type": "minecraft:multiply",
        "factor": 10000
      }
    }
  ]
}
```
## crossbow_charging_sounds
クロスボウの装填時の音を変更する
複数指定可能で、再生される音はエンチャントレベルによって決まる
レベル1の時、リストの一番最初の音を再生する
レベルと指定個数が合わない場合、それ以降のレベルはリスト最後の音が設定される
- **start:**
装填開始時に鳴る音を指定
- **mid:**
装填中に鳴る音を指定
- **end:**
装填完了時に鳴る音を指定

例では、
レベル1のときの装填開始時は村人の声、装填中は村人がダメージを受けた音、装填完了時は村人のデス音
レベル2のときは無音
レベル3のときの装填開始時はクリーパーの着火音、装填中はクリーパーのダメージ音、装填完了時は爆発音がなる
レベル4以降もレベル3と同じ音を再生する
```json:レベル1~3で装填音を変更
{
  "minecraft:crossbow_charging_sounds": [
    {
      "end": "minecraft:entity.villager.death",
      "mid": "minecraft:entity.villager.hurt",
      "start": "minecraft:entity.villager.ambient"
    },
    {},
    {
      "end": "minecraft:entity.generic.explode",
      "mid": "minecraft:entity.creeper.hurt",
      "start": "minecraft:entity.creeper.primed"
    }
  ]
}
```
## crossbow_charge_time
クロスボウの装填時間を変更する
0以下の場合右クリック単押しで装填される
例では、レベル1の時の装填時間が通常の半分、レベルが1上がるごとに装填時間全体の1/4ずつ短縮され、レベル3以上で即装填できる
```json:装填時間短縮
{
  "minecraft:crossbow_charge_time": {
    "type": "minecraft:add",
    "value": {
      "type": "minecraft:linear",
      "base": -0.5,
      "per_level_above_first": -0.25
    }
  }
}
```
## damage
攻撃によるダメージ量を変更する
値が大きいほど攻撃力が増加する
例では、ダメージを10増加させる
```json:ダメージ増加+10
{
  "minecraft:damage": [
    {
      "effect": {
        "type": "minecraft:add",
        "value": 10
      }
    }
  ]
}
```
## damage_immunity
受けるダメージを無効にする
条件で無効にするダメージの種類を指定できる
例では、全てのダメージを無効にしている（空腹ダメージや`kill`コマンド等も無効になる）
```json:全ダメージ無効
{
  "minecraft:damage_immunity": [
    {
      "effect": {}
    }
  ]
}
```
## damage_protection
受けるダメージの軽減割合に対する効果
`値*4%`ダメージを軽減する
例では、値が`6.25`なので`6.25*4`で`25%`軽減する
```json:ダメージを25%軽減する
{
  "minecraft:damage_protection": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 6.25
      }
    }
  ]
}
```
## equipment_drops
キルした時に装備がドロップされる確率に対する効果
値は0～1で変化する
1以上の時確定で装備をドロップする
元々の`ArmorDropChances`が`0f`の場合はドロップしない
**enchanted:**
効果を適用するためのエンチャントアイテムを持つエンティティの指定
- `attacker`
攻撃する側が持ってるときに効果を発揮
- `victim`
攻撃される側が持ってるときに効果を発揮（※[バグあり](https://bugs.mojang.com/browse/MC-272157)）

例では、このエンチャントアイテムを持ってキルした時に50%の確率で装備をドロップする
```json:装備を50%の確率でドロップさせる
{
  "minecraft:equipment_drops": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 0.5
      },
      "enchanted": "attacker"
    }
  ]
}
```
## fishing_luck_bonus
釣りをした時の宝を釣る確率に対する効果
値は1あたり宝の釣れる確率が2.1%上昇する
約5で、ゴミが釣れなくなり、宝の釣れる確率が15.5%、魚の釣れる確率が84.5%になる
例では、値が6なので確実に魚か宝が釣れる
```json:100%の確率で魚か宝を釣る
{
  "effects": {
    "minecraft:fishing_luck_bonus": [
      {
        "effect": {
          "type": "minecraft:set",
          "value": 6
        }
      }
    ]
  }
}
```
## fishing_time_reduction
魚が釣れるかどうかの抽選する時間に対する効果
値が低いほど遅くなり、高いほど早く釣れる
デフォルトの釣りの再抽選待ち時間が30秒のため、値が30を超えると釣れなくなる
```json:とても早く釣れる
{
  "minecraft:fishing_time_reduction": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 29.9
      }
    }
  ]
}
```
## hit_block
ブロックに当たるエンティティや、そのブロックに対する効果

:::note warn
クリエイティブ状態では機能しません
:::
例では、左クリックしたブロックまたは、発射体が刺さったブロックをダイヤモンドブロックに変更する
```json:ダイヤモンドブロックに変更
{
  "minecraft:hit_block": [
    {
      "effect": {
        "type": "minecraft:replace_block",
        "block_state": {
          "type": "minecraft:simple_state_provider",
          "state": {
            "Name": "minecraft:diamond_block"
          }
        }
      }
    }
  ]
}
```
## item_damage
アイテムの耐久値の消耗量に対する効果
0以上の値で変化し、ツール使用時に耐久値の減る量を指定する

例では、値が0なのでアイテムの耐久値が減らない
```json:耐久値が減らない
{
  "minecraft:item_damage": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 0
      }
    }
  ]
}
```
## knockback
攻撃時のノックバック量に対する効果
0以上の値で変化する
0の場合、デフォルトのノックバック量になる
```json:とてもノックバックする
{
  "minecraft:knockback": [
    {
      "effect": {
        "type": "minecraft:add",
        "value": 50
      }
    }
  ]
}
```
## location_changed
エンティティが新しいブロックの位置に移動したときに適応する効果
例では、自身のいるブロックの位置が変わるたびに周りの草ブロックを菌糸に置き換える
```json:
{
  "location_changed": [
    {
      "effect": {
        "type": "minecraft:replace_disk",
        "block_state": {
          "type": "minecraft:simple_state_provider",
          "state": {
            "Name": "minecraft:mycelium"
          }
        },
        "height": 1,
        "offset": [
          0,
          -1,
          0
        ],
        "predicate": {
          "type": "minecraft:all_of",
          "predicates": [
            {
              "type": "minecraft:matching_blocks",
              "blocks": "minecraft:grass_block"
            }
          ]
        },
        "radius": 3
      }
    }
  ]
}
```
## mob_experience
MOBを倒したときのドロップする経験値量に対する効果
0以上の値で変化する
例では、値が0なので経験値を落とさなくなる
```json:倒したとき経験値を落とさない
{
  "minecraft:mob_experience": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 0
      }
    }
  ]
}
```
## post_attack
攻撃がターゲットにダメージを与えたり与えられた後に適用される効果(※[バグあり](https://bugs.mojang.com/browse/MC/issues/MC-274538))
- **enchanted:**
効果を適用するときのエンチャントの所有者を指定
  - `attacker`
  攻撃を行ったエンティティ
  - `damaging_entity`
  実際にダメージを与えたエンティティ(矢やトライデントなど)
  - `victim`
  攻撃を受けたエンティティ
- **affected:**
効果を誰に適用するかを指定
`enchanted`と同じ
- **effect:**
エンティティに対する[処理タイプ](#6effectのエンティティやブロックに対する処理タイプ)を指定


例では、ダメージを与えたエンティティに浮遊を付与して上空に飛ばす
```json:攻撃後ダメージを与えたエンティティを上に飛ばす
{
  "minecraft:post_attack": [
    {
      "enchanted": "attacker",
      "affected": "victim",
      "effect": {
        "type": "minecraft:apply_mob_effect",
        "to_apply": "minecraft:levitation",
        "min_duration": 0.3,
        "max_duration": 0.3,
        "min_amplifier": 100,
        "max_amplifier": 100
      }
    }
  ]
}
```
## prevent_armor_change
防具スロットから外せなくなる効果
束縛の呪いのエンチャントに使用されているもの
```json:装備を外せなくなる
{
  "minecraft:prevent_armor_change": {}
}
```
## prevent_equipment_drop
死亡時にアイテムがドロップせず消滅する効果
消滅の呪いのエンチャントに使用されているもの
```json:死亡時消滅する
{
  "prevent_equipment_drop": {}
}
```
## projectile_count
発射武器使用時に発射される発射物の数に対する効果
弓とクロスボウのみに有効
値には、発射される数を指定
例では、発射される数が10本になる
```json:発射数10
{
  "minecraft:projectile_count": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 10
      }
    }
  ]
}
```
## projectile_piercing
発射物が貫通する数に対する効果
弓とクロスボウのみに有効
値には、貫通する回数を指定
例では、値が2なので2体のエンティティを貫通する
```json:2体貫通する
{
  "minecraft:projectile_piercing": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 2
      }
    }
  ]
}
```
## projectile_spawned
発射体が召喚された時に適応する効果
弓とクロスボウのみに有効
例では、矢を放った時に自身の周りにパーティクルを表示する
```json:発射時に自分の周りにパーティクル表示
{
  "minecraft:projectile_spawned": [
    {
      "effect": {
        "type": "minecraft:spawn_particles",
        "particle": {
          "type": "minecraft:gust_emitter_large"
        },
        "horizontal_position": {
          "type": "in_bounding_box",
          "scale": 1
        },
        "horizontal_velocity": {
          "base": 0
        },
        "speed": 0,
        "vertical_position": {
          "type": "in_bounding_box",
          "offset": 1
        },
        "vertical_velocity": {
          "base": 0
        }
      }
    }
  ]
}
```
## projectile_spread
複数の弾を発射する時の弾の拡散を設定
照準線から一番外の矢までの最大角をレベルごとの値で指定
基本的に、`projectile_count`を使用したエンチャントと合わせて使用する
例えば、5本の矢を20°で設定した場合、全体の拡散角は40°になり、矢と矢の間の角は10°になる
例では、10本の矢を全方位に放つ（間隔は36°）
```json:全方位に矢を放つ
{
  "minecraft:projectile_count": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 10
      }
    }
  ],
  "minecraft:projectile_spread": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 162
      }
    }
  ]
}
```
## repair_with_xp
プレイヤーが経験値を拾ったときにアイテムを修理する効果を設定
別の処理タイプを含む場合でも、修繕効果を適応する
例では、取得した経験値の100倍で耐久値を回復する
```json:取得経験値の100倍で耐久値回復
{
  "minecraft:repair_with_xp": [
    {
      "effect": {
        "type": "minecraft:multiply",
        "factor": 100
      }
    }
  ]
}
```
## smash_damage_per_fallen_block
メイスの落下攻撃による1ブロック当たりのダメージ量を設定
ダメージの増加量をレベルごとの値で指定
ダメージ計算式は落下距離によって変動する

例では、落下攻撃力のダメージ係数が100増加する
```json:落下ダメージ係数100増加
{
  "minecraft:smash_damage_per_fallen_block": [
    {
      "effect": {
        "type": "minecraft:add",
        "value": 100
      }
    }
  ]
}
```
## tick
毎ティック適用される効果
エンティティやブロックに対する[処理タイプ](#6effectのエンティティやブロックに対する処理タイプ)を指定
```json:
{
  "minecraft:tick": [
    {
      "effect": {
        "type": "minecraft:spawn_particles",
        "horizontal_position": {
          "type": "in_bounding_box",
          "scale": 1
        },
        "horizontal_velocity": {
          "Base": 0
        },
        "particle": {
          "type": "minecraft:trial_spawner_detection"
        },
        "vertical_position": {
          "type": "in_bounding_box",
          "scale": 1
        },
        "vertical_velocity": {
          "base": 0
        }
      }
    }
  ]
}
```
## trident_return_acceleration
トライデントを所有者の元へ返す時の加速値の設定
```json:
{
  "minecraft:trident_return_acceleration": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 10
      }
    }
  ]
}
```
## trident_spin_attack_strength
トライデントのスピンアタックの強さを設定
値は0以上で設定し、高いほど攻撃力が高くなる
値が0の場合は、スピンアタックにはならず投げ攻撃になる
```json:超強いスピンアタック
{
  "minecraft:trident_spin_attack_strength": {
    "type": "minecraft:set",
    "value": 10
  }
}
```
## trident_sound
トライデントの攻撃音を変更する
複数指定可能で、再生される音はエンチャントレベルによって決まる
レベル1の時、リストの一番最初の音を再生する
レベルと指定個数が合わない場合、それ以降のレベルはリスト最後の音が設定される

例では、
レベル1のときは村人のデス音を再生
レベル2のときは爆発音を再生
レベル3以降もレベル2と同じ爆発音を再生する
```json:レベル1~2で攻撃音を変更
{
  "minecraft:trident_sound": [
    "minecraft:entity.villager.death",
    "minecraft:entity.generic.explode"
  ]
}
```

# 8.エンチャント関係のタグ
- **エンチャントの機能や表示に関係するタグ**
`minecraft:tags/enchantment`ファイル内で変更できる

|タグ名|説明|
|:-|:-|
|**curse**|呪いのエンチャントになる<br>ツールチップに赤く表示され、削除できなくなる|
|**prevents_bee_spawns_when_mining**|ミツバチの巣や養蜂箱をミツバチが入ったまま採掘できるようになる|
|**prevents_decorated_pot_shattering**|飾り壺を破壊しないようになる|
|**prevents_ice_melting**|氷を採掘した際に水にならなくなる|
|**prevents_infested_spawns**|虫食いブロックを採掘できるようになり、シルバーフィッシュがスポーンしなくなる|
|**smelts_loot**|倒した敵のドロップを精錬できる（例：火属性で牛を倒すと生の牛肉がステーキになる）|
|**tooltip_order**|ツールチップにエンチャントがリストされる順序を決定する|
|**tradeable**|村人の取引でエンチャント本として表示される|
|**on_traded_equipment**|村人の取引でこのタグのエンチャントを付与した装備が表示される|
|**double_trade_price**|取引時にエメラルドの価格が2倍になる|
|**in_enchanting_table**|エンチャントテーブルに表示される|
|**on_mob_spawn_equipment**|ランダムでスポーンした装備付きMOBにこのタグのエンチャントが付与される|
|**on_random_loot**|ワールド内の宝箱の戦利品に付与される|

- **デフォルトエンチャントの`exclusive_set`で使用されているタグ**
`minecraft:tags/enchantment/exclusive_set`ファイル内で変更できる

|タグ名|説明|
|:-|:-|
|**armor**|防具に共存できないエンチャント|
|**boots**|ブーツに共存できないエンチャント|
|**bow**|弓に共存できないエンチャント|
|**crossbow**|クロスボウに共存できないエンチャント|
|**damage**|共存できないダメージ増加エンチャント|
|**mining**|共存できない採掘関連のエンチャント|
|**riptide**|激流と共存できないエンチャント|


# 9.エンチャントID
ツールチップオーダー順です
|エンチャントID|エンチャント名|
|:-|:-|
|**binding_curse**|束縛の呪い|
|**vanishing_curse**|消滅の呪い|
|**riptide**|激流|
|**channeling**|召雷|
|**wind_burst**|ウィンドバースト|
|**frost_walker**|氷渡り|
|**sharpness**|ダメージ増加|
|**smite**|アンデッド特効|
|**bane_of_arthropods**|虫特効|
|**impaling**|水生特効|
|**power**|射撃ダメージ増加|
|**density**|重撃|
|**breach**|防具貫通|
|**piercing**|貫通|
|**sweeping_edge**|範囲ダメージ増加‌|
|**multishot**|拡散|
|**fire_aspect**|火属性|
|**flame**|フレイム|
|**knockback**|ノックバック|
|**punch**|パンチ|
|**protection**|ダメージ軽減|
|**blast_protection**|爆発耐性|
|**fire_protection**|火炎耐性|
|**projectile_protection**|飛び道具耐性|
|**feather_falling**|落下耐性|
|**fortune**|幸運|
|**looting**|ドロップ増加|
|**silk_touch**|シルクタッチ|
|**luck_of_the_sea**|宝釣り|
|**efficiency**|効率強化|
|**quick_charge**|高速装填|
|**lure**|入れ食い|
|**respiration**|水中呼吸|
|**aqua_affinity**|水中採掘|
|**soul_speed**|ソウルスピード|
|**swift_sneak**|スニーク速度上昇|
|**depth_strider**|水中歩行|
|**thorns**|棘の鎧|
|**loyalty**|忠誠|
|**unbreaking**|耐久力|
|**infinity**|無限|
|**mending**|修繕|

# 10.翻訳のやり方
翻訳キーを指定した場合、リソースパックの言語ファイルを追加することで翻訳できます。
`assets/minecraft/lang/ja_jp.json`のようにファイルを追加します。
`description`の`translate`で`enchantment.minecraft.custom`と指定した場合は以下のようになります。
```json:ja_jp.json
{
  "enchantment.minecraft.custom":"エンチャント表示名"
}
```

# 11.実際の使用例
カスタムエンチャントを使って他にどのようなことができるのか、
自分がX（旧Twitter）に上げたものをいくつか紹介します。
- ## 道路生成ブーツ
装備した状態で移動すると、自身の周りのブロックを石系ブロックで置き換え道を生成する
`predicate`で置き換えるブロックの条件を指定し、`weighted_state_provider`でランダムにブロックを設置できる（worldgenと同じ書き方で指定できる）

<details><summary><font color=#1a73e8>JSONの記述</font></summary>

```json:
{
  "description": "道路生成エンチャント",
  "supported_items": "minecraft:diamond_boots",
  "weight": 1,
  "max_level": 1,
  "min_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "max_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "anvil_cost": 0,
  "slots": [
    "feet"
  ],
  "effects": {
    "minecraft:location_changed": [
      {
        "effect": {
          "type": "minecraft:replace_disk",
          "block_state": {
            "type": "minecraft:weighted_state_provider",
            "entries": [
              {
                "weight": 14,
                "data": {
                  "Name": "minecraft:stone_bricks"
                }
              },
              {
                "weight": 7,
                "data": {
                  "Name": "minecraft:mossy_stone_bricks"
                }
              },
              {
                "weight": 4,
                "data": {
                  "Name": "minecraft:mossy_cobblestone"
                }
              }
            ]
          },
          "predicate": {
            "type": "minecraft:all_of",
            "predicates": [
              {
                "type": "minecraft:has_sturdy_face",
                "direction": "up"
              },
              {
                "type": "minecraft:matching_block_tag",
                "offset": [
                  0,
                  1,
                  0
                ],
                "tag": "minecraft:air"
              }
            ]
          },
          "radius": 3,
          "height": -2,
          "offset": [
            0,
            1,
            0
          ]
        }
      }
    ]
  }
}
```
</details>

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">カスタムエンチャントで歩いたところが石系のブロックに置き換わるの作った！<br>道をブラシツールみたいに描ける💪 <br>location_changedのreplace_diskでworldgenの書き方できるの優秀～<a href="https://twitter.com/hashtag/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%A9?src=hash&amp;ref_src=twsrc%5Etfw">#マイクラ</a> <a href="https://twitter.com/hashtag/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#コマンド</a> <a href="https://twitter.com/hashtag/%E3%82%A8%E3%83%B3%E3%83%81%E3%83%A3%E3%83%B3%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#エンチャント</a> <a href="https://t.co/3sOIBJMYo2">pic.twitter.com/3sOIBJMYo2</a></p>&mdash; ひろばお🙃コマンド (@Hirobao1) <a href="https://twitter.com/Hirobao1/status/1800178334758039902?ref_src=twsrc%5Etfw">June 10, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- ## 連鎖花火クロスボウ
矢を10本発射し、ブロックに当たると花火を召喚するコマンドを実行する
他のエンティティに当たると大爆発してしまう

<details><summary><font color=#1a73e8>JSONの記述</font></summary>

```json:
{
  "description": {
    "text": "連鎖花火エンチャント"
  },
  "supported_items": "#minecraft:enchantable/durability",
  "weight": 1,
  "max_level": 1,
  "min_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "max_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "anvil_cost": 0,
  "slots": [
    "hand"
  ],
  "effects": {
    "minecraft:post_attack": [
      {
        "enchanted": "attacker",
        "affected": "victim",
        "effect": {
          "type": "minecraft:run_function",
          "function": "custom:summon_fireworks"
        }
      },
      {
        "enchanted": "attacker",
        "affected": "damaging_entity",
        "effect": {
          "type": "minecraft:explode",
          "damage_type": "minecraft:player_explosion",
          "radius": 10,
          "offset": [
            0,
            1,
            0
          ],
          "block_interaction": "tnt",
          "small_particle": {
            "type": "minecraft:explosion_emitter"
          },
          "large_particle": {
            "type": "minecraft:explosion_emitter"
          },
          "sound": "minecraft:entity.generic.explode",
          "knockback_multiplier": 0,
          "attribute_to_user": true,
          "create_fire": false
        }
      }
    ],
    "minecraft:projectile_count": [
      {
        "effect": {
          "type": "minecraft:set",
          "value": 10
        }
      }
    ],
    "minecraft:projectile_spread": [
      {
        "effect": {
          "type": "minecraft:set",
          "value": 40
        }
      }
    ],
    "minecraft:hit_block": [
      {
        "effect": {
          "type": "minecraft:run_function",
          "function": "custom:summon_fireworks"
        }
      }
    ]
  }
}
```
```:custom:summon_fireworks.mcfunction
summon firework_rocket ~ ~1 ~ {LifeTime: 20,FireworksItem: {components: {"minecraft:fireworks": {explosions: [{shape: "large_ball", colors: [I; 16699434]}, {shape: "large_ball", has_trail: 1b, colors: [I; 16775336]}]}}, count: 1, id: "minecraft:firework_rocket"}}
kill @s
```
</details>

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">いっぱい花火が出てくるエンチャント！<br>MOBに当たると大爆発するよ<br>爆発は何と合わせても楽しいw<a href="https://twitter.com/hashtag/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%A9?src=hash&amp;ref_src=twsrc%5Etfw">#マイクラ</a> <a href="https://twitter.com/hashtag/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#コマンド</a> <a href="https://twitter.com/hashtag/%E3%82%A8%E3%83%B3%E3%83%81%E3%83%A3%E3%83%B3%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#エンチャント</a> <a href="https://t.co/nGRDqp9dB7">pic.twitter.com/nGRDqp9dB7</a></p>&mdash; ひろばお🙃コマンド (@Hirobao1) <a href="https://twitter.com/Hirobao1/status/1800179149291852022?ref_src=twsrc%5Etfw">June 10, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- ## 吸血鬼の剣
この剣でエンティティを攻撃すると自身に回復能力Ⅲが付与されるが、昼間に日光の当たる場所で使うと自身が炎上する
時間や日光に当たっているかどうかは、`requirements`で検知できる
<details><summary><font color=#1a73e8>JSONの記述</font></summary>

```json:
{
  "description": {
		"text": "吸血鬼のエンチャント",
		"color": "light_purple",
		"bold": true
	},
  "supported_items": "minecraft:diamond_sword",
  "weight": 1,
  "max_level": 1,
  "min_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "max_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "anvil_cost": 0,
  "slots": [
    "mainhand"
  ],
  "effects":{
    "minecraft:post_attack": [
			{
				"enchanted": "attacker",
				"affected": "attacker",
				"effect": {
					"type": "minecraft:apply_mob_effect",
					"to_apply": "minecraft:regeneration",
					"min_duration": 3,
					"max_duration": 3,
					"min_amplifier": 2,
					"max_amplifier": 2
				}
			}
		],
		"minecraft:tick": [
			{
				"effect": {
					"type": "minecraft:ignite",
					"duration": 1
				},
				"requirements": {
					"condition": "minecraft:all_of",
					"terms": [
						{
							"condition": "minecraft:entity_properties",
							"entity": "this",
							"predicate": {
								"location": {
									"can_see_sky": true
								}
							}
						},
						{
							"condition": "minecraft:time_check",
							"value": {
								"min": 0,
								"max": 12000
							},
							"period": 24000
						}
					]
				}
			}
		]
  }
}
```
</details>

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">吸血鬼になるエンチャントできた！<br>攻撃すると3秒間の回復エフェクトが付く！<br>日光に当たると炎上しちゃうから注意<a href="https://twitter.com/hashtag/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%A9?src=hash&amp;ref_src=twsrc%5Etfw">#マイクラ</a> <a href="https://twitter.com/hashtag/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#コマンド</a> <a href="https://twitter.com/hashtag/%E3%82%A8%E3%83%B3%E3%83%81%E3%83%A3%E3%83%B3%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#エンチャント</a> <a href="https://t.co/YAH95GqHB4">pic.twitter.com/YAH95GqHB4</a></p>&mdash; ひろばお🙃コマンド (@Hirobao1) <a href="https://twitter.com/Hirobao1/status/1800178775055056994?ref_src=twsrc%5Etfw">June 10, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- ## 一撃の斧
人狼やその他コマンドのゲームなどによく使われる一撃でキルできる斧
攻撃した時に大きな音を鳴らし、大ダメージを与える
一度使用すると壊れる
`damage_entity`によって武器のクールダウンを無視して固定で大ダメージを与えられる
<details><summary><font color=#1a73e8>JSONの記述</font></summary>

```json:
{
  "description": {
    "text": "一撃のエンチャント",
    "color": "red",
    "bold": true
  },
  "supported_items": "minecraft:stone_axe",
  "weight": 1,
  "max_level": 1,
  "min_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "max_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "anvil_cost": 0,
  "slots": [
    "hand"
  ],
  "effects": {
    "minecraft:post_attack": [
      {
        "enchanted": "attacker",
        "affected": "victim",
        "effect": {
          "type": "minecraft:spawn_particles",
          "particle": {
            "type": "minecraft:sonic_boom"
          },
          "horizontal_position": {
            "type": "entity_position"
          },
          "vertical_position": {
            "type": "entity_position",
            "offset": 1
          },
          "horizontal_velocity": {},
          "vertical_velocity": {},
          "speed": 0
        }
      },
      {
        "enchanted": "attacker",
        "affected": "victim",
        "effect": {
          "type": "minecraft:play_sound",
          "sound": "minecraft:item.totem.use",
          "volume": 2,
          "pitch": 2
        }
      },
      {
        "enchanted": "attacker",
        "affected": "victim",
        "effect": {
          "type": "minecraft:damage_entity",
          "damage_type": "minecraft:generic_kill",
          "min_damage": 1000000,
          "max_damage": 1000000
        }
      },
      {
        "enchanted": "attacker",
        "affected": "attacker",
        "effect": {
          "type": "minecraft:damage_item",
          "amount": 1000000
        }
      }
    ]
  }
}
```
</details>

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">人狼とかでよく使われる一撃の斧をカスタムエンチャントで再現してみた！<br>damage_entityで武器のクールダウン中でも固定で大ダメージ与えれるの良い～<a href="https://twitter.com/hashtag/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%A9?src=hash&amp;ref_src=twsrc%5Etfw">#マイクラ</a> <a href="https://twitter.com/hashtag/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#コマンド</a> <a href="https://twitter.com/hashtag/%E3%82%A8%E3%83%B3%E3%83%81%E3%83%A3%E3%83%B3%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#エンチャント</a> <a href="https://t.co/4oq8tCGwnL">pic.twitter.com/4oq8tCGwnL</a></p>&mdash; ひろばお🙃コマンド (@Hirobao1) <a href="https://twitter.com/Hirobao1/status/1800178925026595322?ref_src=twsrc%5Etfw">June 10, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- ## 誘雷の鎧
天候が雷雨の時に装備していると、体の周りに電気のパーティクルをまとい、確率で自身に雷が落ちる
`effect`を`all_of`でまとめることで、`requirements`の確率の成功時に同時に適用できる
パーティクルの個数を指定できないため、JSONが少し長くなっている
<details><summary><font color=#1a73e8>JSONの記述</font></summary>

```json:
{
  "description": {
    "text": "誘雷エンチャント",
    "color": "red"
  },
  "supported_items": "minecraft:iron_chestplate",
  "weight": 1,
  "max_level": 1,
  "min_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "max_cost": {
    "base": 0,
    "per_level_above_first": 0
  },
  "anvil_cost": 0,
  "slots": [
    "chest"
  ],
  "effects": {
    "minecraft:tick": [
      {
        "effect": {
          "type": "minecraft:spawn_particles",
          "particle": {
            "type": "minecraft:electric_spark"
          },
          "horizontal_position": {
            "type": "in_bounding_box",
            "scale": 1.4
          },
          "vertical_position": {
            "type": "in_bounding_box",
            "scale": 0.5,
            "offset": 0.1
          },
          "horizontal_velocity": {},
          "vertical_velocity": {
            "base": 0.4
          },
          "speed": 1
        },
        "requirements": [
          {
            "condition": "minecraft:random_chance",
            "chance": 0.6
          },
          {
            "condition": "minecraft:weather_check",
            "thundering": true
          },
          {
            "condition": "minecraft:location_check",
            "predicate": {
              "can_see_sky": true
            }
          }
        ]
      },
      {
        "effect": {
          "type": "minecraft:all_of",
          "effects": [
            {
              "type": "minecraft:summon_entity",
              "entity": "minecraft:lightning_bolt"
            },
            {
              "type": "minecraft:spawn_particles",
              "particle": {
                "type": "minecraft:end_rod"
              },
              "horizontal_position": {
                "type": "in_bounding_box",
                "offset": 0.1,
                "scale": 3
              },
              "vertical_position": {
                "type": "in_bounding_box",
                "scale": 0.3
              },
              "horizontal_velocity": {},
              "vertical_velocity": {},
              "speed": 0
            },
            {
              "type": "minecraft:spawn_particles",
              "particle": {
                "type": "minecraft:end_rod"
              },
              "horizontal_position": {
                "type": "in_bounding_box",
                "offset": 0.1,
                "scale": 3
              },
              "vertical_position": {
                "type": "in_bounding_box",
                "scale": 0.3
              },
              "horizontal_velocity": {},
              "vertical_velocity": {},
              "speed": 0
            },
            {
              "type": "minecraft:spawn_particles",
              "particle": {
                "type": "minecraft:end_rod"
              },
              "horizontal_position": {
                "type": "in_bounding_box",
                "offset": 0.1,
                "scale": 3
              },
              "vertical_position": {
                "type": "in_bounding_box",
                "scale": 0.3
              },
              "horizontal_velocity": {},
              "vertical_velocity": {},
              "speed": 0
            },
            {
              "type": "minecraft:spawn_particles",
              "particle": {
                "type": "minecraft:end_rod"
              },
              "horizontal_position": {
                "type": "in_bounding_box",
                "offset": 0.1,
                "scale": 3
              },
              "vertical_position": {
                "type": "in_bounding_box",
                "scale": 0.3
              },
              "horizontal_velocity": {},
              "vertical_velocity": {},
              "speed": 0
            },
            {
              "type": "minecraft:spawn_particles",
              "particle": {
                "type": "minecraft:end_rod"
              },
              "horizontal_position": {
                "type": "in_bounding_box",
                "offset": 0.1,
                "scale": 3
              },
              "vertical_position": {
                "type": "in_bounding_box",
                "scale": 0.3
              },
              "horizontal_velocity": {},
              "vertical_velocity": {},
              "speed": 0
            },
            {
              "type": "minecraft:spawn_particles",
              "particle": {
                "type": "instant_effect"
              },
              "horizontal_position": {
                "type": "in_bounding_box",
                "offset": 0.1,
                "scale": 3
              },
              "vertical_position": {
                "type": "in_bounding_box",
                "scale": 0.3
              },
              "horizontal_velocity": {},
              "vertical_velocity": {},
              "speed": 0
            },
            {
              "type": "minecraft:spawn_particles",
              "particle": {
                "type": "instant_effect"
              },
              "horizontal_position": {
                "type": "in_bounding_box",
                "offset": 0.1,
                "scale": 3
              },
              "vertical_position": {
                "type": "in_bounding_box",
                "scale": 0.3
              },
              "horizontal_velocity": {},
              "vertical_velocity": {},
              "speed": 0
            },
            {
              "type": "minecraft:spawn_particles",
              "particle": {
                "type": "instant_effect"
              },
              "horizontal_position": {
                "type": "in_bounding_box",
                "offset": 0.1,
                "scale": 3
              },
              "vertical_position": {
                "type": "in_bounding_box",
                "scale": 0.3
              },
              "horizontal_velocity": {},
              "vertical_velocity": {},
              "speed": 0
            }
          ]
        },
        "requirements": [
          {
            "condition": "minecraft:random_chance",
            "chance": 0.003
          },
          {
            "condition": "minecraft:weather_check",
            "thundering": true
          },
          {
            "condition": "minecraft:location_check",
            "predicate": {
              "can_see_sky": true
            }
          }
        ]
      }
    ]
  }
}
```
</details>

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">雷雨の時に装備すると稀に雷が落ちてくるエンチャントできたー<br>パーティクルが出てるときは注意<br>屋根があるとこに逃げれば安全！<a href="https://twitter.com/hashtag/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%A9?src=hash&amp;ref_src=twsrc%5Etfw">#マイクラ</a> <a href="https://twitter.com/hashtag/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#コマンド</a> <a href="https://twitter.com/hashtag/%E3%82%A8%E3%83%B3%E3%83%81%E3%83%A3%E3%83%B3%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#エンチャント</a> <a href="https://t.co/pYEwBx5E7v">pic.twitter.com/pYEwBx5E7v</a></p>&mdash; ひろばお🙃コマンド (@Hirobao1) <a href="https://twitter.com/Hirobao1/status/1800178567667708297?ref_src=twsrc%5Etfw">June 10, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 12.参考サイト
- [Minecraftスナップショット](https://www.minecraft.net/en-us/article/minecraft-snapshot-24w18a)
- [misode氏のEnchantmentジェネレーター](https://misode.github.io/enchantment/)
- [slicedlime氏の参考データパック](https://github.com/slicedlime/examples/tree/master/datapacks/enchantments)
- [エンチャントの仕組み](https://minecraft.fandom.com/ja/wiki/%E3%82%A8%E3%83%B3%E3%83%81%E3%83%A3%E3%83%B3%E3%83%88%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF)
- [Custom world generation](https://minecraft.fandom.com/wiki/Custom_world_generation)