9
1

マイクラ1.21のカスタムエンチャントまとめ

Last updated at Posted at 2024-06-13

1.はじめに

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

Java版 Minecraft 1.21 時点の情報です

2.初期設定

何も指定していない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
{
  "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": {}
}

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

エンチャントのデータパック更新は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以上の整数を指定

エンチャントテーブルに表示させる場合in_enchanting_tableタグを設定する必要がありますが、
デフォルトでエンチャントを付与出来ないアイテム(ブロックや食べ物など)では表示されません。

anvil_cost

金床のエンチャントに必要なレベル
0以上の整数を指定

slot

エンチャントが機能するスロットを指定

指定スロット 効果が発動する位置
any 下記全てのスロット
hand メインハンドとオフハンド
mainhand メインハンド
offhand オフハンド
armor 下記全ての装備スロット
head
chest
legs
feet
body 馬や狼などの鎧スロット

effects(オプション)

色んなエンチャント効果を設定できる
後述で記載

4.値の指定

後述で記載しているeffect内などで、値を指定するときに使用する記述の解説です。

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

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で指定したサイズよりレベルが大きい場合に適用される値
この見出しのJSON例を表示

linear:
例では、エンチャントレベルが1の時の値は5で、レベルが上がるごとに2ずつ増加する

linearの使用例
{
  "type": "minecraft:linear",
  "base": 5,
  "per_level_above_first": 2
}

clamped:
例では、値は016の間で変化し、レベル1の場合は3で、レベルが上がるごとに5ずつ増加する
4レベル以上は16のまま変化しない

clampedの使用例
{
  "type": "minecraft:clamped",
  "max": 16,
  "min": 0,
  "value": {
    "type": "minecraft:linear",
    "base": 3,
    "per_level_above_first": 5
  }
}

fraction:
例では、レベル1の時の値は1/2で、レベルが上がるごとに1/31/4…と0に近づくように変化する

fractionの使用例1
{
  "type": "minecraft:fraction",
  "denominator": {
    "type": "minecraft:linear",
    "base": 2,
    "per_level_above_first": 1
  },
  "numerator": 1
}

levels_squared:
例では、レベル1の時の値は2で、レベルが上がるごとに51017...と増加する

levels_squaredの使用例
{
  "type": "minecraft:levels_squared",
  "added": 1.0
}

lookup:
例では、レベル1の時は3、レベル2の時は5、レベル3の時は11となり、
レベル4以降はすべて19になる

lookupの使用例
{
  "type": "minecraft:lookup",
  "values": [
    3,
    5,
    11
  ],
  "fallback": 19
}

5.effectの効果値に対する処理タイプ

add

処理後の値にvalueの値を加算する

  • value:
    加算する値をレベルごとの値で指定
    負の値も可能

all_of

リストに含まれる複数の効果値の処理タイプを処理する

  • effects:
    実行する効果値の処理タイプのリスト

multiply

処理後の値にfactorの値を乗算する

  • factor:
    乗算する値をレベルごとの値で指定

remove_binomial

確率で成功すると処理後の値から1減らす処理をする

  • chance:
    1減らす確率をレベルごとの値で指定
    1に近いほど成功する

set

処理後の値をvalueの値で上書きする処理をする

  • value:
    上書きする値をレベルごとの値で指定

6.effectのエンティティやブロックに対する処理タイプ

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

all_of

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

  • effects:
    実行するエフェクトのリスト

例では、オフハンドにタマゴを持っている時のみ、確率で音を鳴らしニワトリをスポーンさせる

オフハンドにタマゴを持っていると稀に音を鳴らしニワトリ召喚
{
  "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秒だけ高レベルの浮遊を付与し、上空に飛ばす

攻撃したエンティティに一瞬だけ浮遊を付与

{
  "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のダメージを与える

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

damage_item

エンチャントされたアイテムの耐久値を増減させる

  • amount:
    アイテムの耐久値の消耗する値をレベルごとの値で指定

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

例では、水中にいるとき耐久値の消耗する値をマイナスにすることで耐久値を回復させている

水中にいると耐久値が徐々に回復する
{
  "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が爆発を引き起こしたかのように動作する
      ゲームルールのmobExplosionDropDecaymobGriefing?の影響を受ける
    • tnt
      TNTが爆発を引き起こしたかのように動作する
      ゲームルールのtntExplosionDropDecayの影響を受ける
    • trigger
      レッドストーンで起動するブロックをトリガーする(ウィンドチャージと同じ)
  • small_particle:
    爆発時に発生する小さなパーティクルを指定
  • large_particle:
    爆発時に発生する大きなパーティクルを指定(※バグあり)
  • sound:
    爆発時に再生されるサウンドを指定
矢が刺さると爆発する
{
  "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秒間延焼させる

攻撃した相手を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の浮動小数点で指定
矢を放つと音が出る
{
  "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を指定

例では、左クリックしたブロックや、矢などが刺さったブロックをダイヤモンドブロックに置き換える

ダイヤモンドブロックに変更
{
  "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マス内の草ブロックを菌糸に置き換える

周囲の草ブロックを菌糸に変更
{
  "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
矢を撃てなくする
{
  "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を指定

例では、殴ったブロックのwaterloggedtrueにする

殴ったブロックが浸水可のブロックの場合、水を満たす
{
  "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(オプション)
      typein_bounding_boxの場合のみ使用可能(デフォルト:1
  • horizontal_velocity・vertical_velocity:
    • base(オプション)
      指定された軸に沿った基本速度を指定(デフォルト:0
    • movement_scale(オプション)
      エンティティの移動速度に応じて、指定された軸に沿った速度に追加(デフォルト:0
      例えば、1の場合はエンティティの速度が生成されたパーティクルに追加される
  • speed(オプション):
    パーティクルの基本スピードを指定(デフォルト:0
    指定しない場合、上記で設定しても速度は0になる
    horizontal_velocityvertical_velocity の値に乗算される(※要検証)

例では、自信のヒットボックス内に毎ティックtrial_spawner_detectionパーティクルを表示

自身のヒットボックスの範囲内にパーティクルを表示
{
  "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:
    召喚されたエンティティがエンチャントされたアイテムの所有者のチームに参加するかどうかを指定するブール値

例では、ヒットしたブロックにブタかウシをランダムに召喚する

ヒットしたブロックにブタかウシを召喚
{
  "minecraft:hit_block": [
    {
      "effect": {
        "type": "minecraft:summon_entity",
        "entity": [
          "minecraft:cow",
          "minecraft:pig"
        ]
      }
    }
  ]
}

7.effectsの設定(エフェクトコンポーネント)

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

armor_effectiveness

攻撃対象の防御力の効果量を設定する
0から1の範囲で設定され、0の場合は防御力を完全に無視する
デフォルトの値は1で、防御力が全て反映される状態
例では、-0.5を加算することで、結果の値が0.5になり対象の防御力を半分にしている

攻撃対象の防御力を半分にする
{
  "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倍...とする

自分のサイズが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つ消費する

弾の消費を2個にする
{
  "minecraft:ammo_use": [
    {
      "effect": {
        "type": "minecraft:add",
        "value": 1
      }
    }
  ]
}

block_experience

ブロックを採掘したときにドロップする経験値の量に対する効果
例では、鉱石を掘った時の経験値量が一万倍になる

採掘時の経験値量を一万倍にする
{
  "minecraft:block_experience": [
    {
      "effect": {
        "type": "minecraft:multiply",
        "factor": 10000
      }
    }
  ]
}

crossbow_charging_sounds

クロスボウの装填時の音を変更する
複数指定可能で、再生される音はエンチャントレベルによって決まる
レベル1の時、リストの一番最初の音を再生する
レベルと指定個数が合わない場合、それ以降のレベルはリスト最後の音が設定される

  • start:
    装填開始時に鳴る音を指定
  • mid:
    装填中に鳴る音を指定
  • end:
    装填完了時に鳴る音を指定

例では、
レベル1のときの装填開始時は村人の声、装填中は村人がダメージを受けた音、装填完了時は村人のデス音
レベル2のときは無音
レベル3のときの装填開始時はクリーパーの着火音、装填中はクリーパーのダメージ音、装填完了時は爆発音がなる
レベル4以降もレベル3と同じ音を再生する

レベル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以上で即装填できる

装填時間短縮
{
  "minecraft:crossbow_charge_time": {
    "type": "minecraft:add",
    "value": {
      "type": "minecraft:linear",
      "base": -0.5,
      "per_level_above_first": -0.25
    }
  }
}

damage

攻撃によるダメージ量を変更する
値が大きいほど攻撃力が増加する
例では、ダメージを10増加させる

ダメージ増加+10
{
  "minecraft:damage": [
    {
      "effect": {
        "type": "minecraft:add",
        "value": 10
      }
    }
  ]
}

damage_immunity

受けるダメージを無効にする
条件で無効にするダメージの種類を指定できる
例では、全てのダメージを無効にしている(空腹ダメージやkillコマンド等も無効になる)

全ダメージ無効
{
  "minecraft:damage_immunity": [
    {
      "effect": {}
    }
  ]
}

damage_protection

受けるダメージの軽減割合に対する効果
値*4%ダメージを軽減する
例では、値が6.25なので6.25*425%軽減する

ダメージを25%軽減する
{
  "minecraft:damage_protection": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 6.25
      }
    }
  ]
}

equipment_drops

キルした時に装備がドロップされる確率に対する効果
値は0~1で変化する
1以上の時確定で装備をドロップする
元々のArmorDropChances0fの場合はドロップしない
enchanted:
効果を適用するためのエンチャントアイテムを持つエンティティの指定

  • attacker
    攻撃する側が持ってるときに効果を発揮
  • victim
    攻撃される側が持ってるときに効果を発揮(※バグあり

例では、このエンチャントアイテムを持ってキルした時に50%の確率で装備をドロップする

装備を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なので確実に魚か宝が釣れる

100%の確率で魚か宝を釣る
{
  "effects": {
    "minecraft:fishing_luck_bonus": [
      {
        "effect": {
          "type": "minecraft:set",
          "value": 6
        }
      }
    ]
  }
}

fishing_time_reduction

魚が釣れるかどうかの抽選する時間に対する効果
値が低いほど遅くなり、高いほど早く釣れる
デフォルトの釣りの再抽選待ち時間が30秒のため、値が30を超えると釣れなくなる

とても早く釣れる
{
  "minecraft:fishing_time_reduction": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 29.9
      }
    }
  ]
}

hit_block

ブロックに当たるエンティティや、そのブロックに対する効果

クリエイティブ状態では機能しません

例では、左クリックしたブロックまたは、発射体が刺さったブロックをダイヤモンドブロックに変更する

ダイヤモンドブロックに変更
{
  "minecraft:hit_block": [
    {
      "effect": {
        "type": "minecraft:replace_block",
        "block_state": {
          "type": "minecraft:simple_state_provider",
          "state": {
            "Name": "minecraft:diamond_block"
          }
        }
      }
    }
  ]
}

item_damage

アイテムの耐久値の消耗量に対する効果
0以上の値で変化し、ツール使用時に耐久値の減る量を指定する

例では、値が0なのでアイテムの耐久値が減らない

耐久値が減らない
{
  "minecraft:item_damage": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 0
      }
    }
  ]
}

knockback

攻撃時のノックバック量に対する効果
0以上の値で変化する
0の場合、デフォルトのノックバック量になる

とてもノックバックする
{
  "minecraft:knockback": [
    {
      "effect": {
        "type": "minecraft:add",
        "value": 50
      }
    }
  ]
}

location_changed

エンティティが新しいブロックの位置に移動したときに適応する効果
例では、自身のいるブロックの位置が変わるたびに周りの草ブロックを菌糸に置き換える

{
  "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なので経験値を落とさなくなる

倒したとき経験値を落とさない
{
  "minecraft:mob_experience": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 0
      }
    }
  ]
}

post_attack

攻撃がターゲットにダメージを与えた後に適用される効果

  • enchanted:
    効果を適用するときのエンチャントの所有者を指定
    • attacker
      攻撃を行ったエンティティ
    • damaging_entity
      実際にダメージを与えたエンティティ(矢やトライデントなど)
    • victim
      攻撃を受けたエンティティ
  • affected:
    効果を誰に適用するかを指定
    enchantedと同じ
  • effect:
    エンティティに対する処理タイプを指定

例では、ダメージを与えたエンティティに浮遊を付与して上空に飛ばす

攻撃後ダメージを与えたエンティティを上に飛ばす
{
  "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

防具スロットから外せなくなる効果
束縛の呪いのエンチャントに使用されているもの

装備を外せなくなる
{
  "minecraft:prevent_armor_change": {}
}

prevent_equipment_drop

死亡時にアイテムがドロップせず消滅する効果
消滅の呪いのエンチャントに使用されているもの

死亡時消滅する
{
  "prevent_equipment_drop": {}
}

projectile_count

発射武器使用時に発射される発射物の数に対する効果
弓とクロスボウのみに有効
値には、発射される数を指定
例では、発射される数が10本になる

発射数10
{
  "minecraft:projectile_count": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 10
      }
    }
  ]
}

projectile_piercing

発射物が貫通する数に対する効果
弓とクロスボウのみに有効
値には、貫通する回数を指定
例では、値が2なので2体のエンティティを貫通する

2体貫通する
{
  "minecraft:projectile_piercing": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 2
      }
    }
  ]
}

projectile_spawned

発射体が召喚された時に適応する効果
弓とクロスボウのみに有効
例では、矢を放った時に自身の周りにパーティクルを表示する

発射時に自分の周りにパーティクル表示
{
  "minecraft:": [
    {
      "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°)

全方位に矢を放つ
{
  "minecraft:projectile_count": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 10
      }
    }
  ],
  "minecraft:projectile_spread": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 162
      }
    }
  ]
}

repair_with_xp

プレイヤーが経験値を拾ったときにアイテムを修理する効果を設定
別の処理タイプを含む場合でも、修繕効果を適応する
例では、取得した経験値の100倍で耐久値を回復する

取得経験値の100倍で耐久値回復
{
  "minecraft:repair_with_xp": [
    {
      "effect": {
        "type": "minecraft:multiply",
        "factor": 100
      }
    }
  ]
}

smash_damage_per_fallen_block

メイスの落下攻撃による1ブロック当たりのダメージ量を設定
ダメージの増加量をレベルごとの値で指定
ダメージ計算式は落下距離によって変動する

例では、落下攻撃力のダメージ係数が100増加する

落下ダメージ係数100増加
{
  "minecraft:smash_damage_per_fallen_block": [
    {
      "effect": {
        "type": "minecraft:add",
        "value": 100
      }
    }
  ]
}

tick

毎ティック適用される効果
エンティティやブロックに対する処理タイプを指定

{
  "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

トライデントを所有者の元へ返す時の加速値の設定

{
  "minecraft:trident_return_acceleration": [
    {
      "effect": {
        "type": "minecraft:set",
        "value": 10
      }
    }
  ]
}

trident_spin_attack_strength

トライデントのスピンアタックの強さを設定
値は0以上で設定し、高いほど攻撃力が高くなる
値が0の場合は、スピンアタックにはならず投げ攻撃になる

超強いスピンアタック
{
  "minecraft:trident_spin_attack_strength": {
    "type": "minecraft:set",
    "value": 10
  }
}

trident_sound

トライデントの攻撃音を変更する
複数指定可能で、再生される音はエンチャントレベルによって決まる
レベル1の時、リストの一番最初の音を再生する
レベルと指定個数が合わない場合、それ以降のレベルはリスト最後の音が設定される

例では、
レベル1のときは村人のデス音を再生
レベル2のときは爆発音を再生
レベル3以降もレベル2と同じ爆発音を再生する

レベル1~2で攻撃音を変更
{
  "minecraft:trident_sound": [
    "minecraft:entity.villager.death",
    "minecraft:entity.generic.explode"
  ]
}

8.エンチャント関係のタグ

  • エンチャントの機能や表示に関係するタグ
    minecraft:tags/enchantmentファイル内で変更できる
タグ名 説明
curse 呪いのエンチャントになる
ツールチップに赤く表示され、削除できなくなる
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のようにファイルを追加します。
descriptiontranslateenchantment.minecraft.customと指定した場合は以下のようになります。

ja_jp.json
{
  "enchantment.minecraft.custom":"エンチャント表示名"
}

11.実際の使用例

カスタムエンチャントを使って他にどのようなことができるのか、
自分がX(旧Twitter)に上げたものをいくつか紹介します。

  • 道路生成ブーツ

装備した状態で移動すると、自身の周りのブロックを石系ブロックで置き換え道を生成する
predicateで置き換えるブロックの条件を指定し、weighted_state_providerでランダムにブロックを設置できる(worldgenと同じ書き方で指定できる)

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
          ]
        }
      }
    ]
  }
}
  • 連鎖花火クロスボウ

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

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
  • 吸血鬼の剣

この剣でエンティティを攻撃すると自身に回復能力Ⅲが付与されるが、昼間に日光の当たる場所で使うと自身が炎上する
時間や日光に当たっているかどうかは、requirementsで検知できる

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
						}
					]
				}
			}
		]
  }
}
  • 一撃の斧

人狼やその他コマンドのゲームなどによく使われる一撃でキルできる斧
攻撃した時に大きな音を鳴らし、大ダメージを与える
一度使用すると壊れる
damage_entityによって武器のクールダウンを無視して固定で大ダメージを与えられる

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
        }
      }
    ]
  }
}
  • 誘雷の鎧

天候が雷雨の時に装備していると、体の周りに電気のパーティクルをまとい、確率で自身に雷が落ちる
effectall_ofでまとめることで、requirementsの確率の成功時に同時に適用できる
パーティクルの個数を指定できないため、JSONが少し長くなっている

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
            }
          }
        ]
      }
    ]
  }
}

12.参考サイト

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1