ルッキーのコマンドメモ

主にマイクラのコマンドやデータパックに関することを書いていきます。

(マイクラ コマンド・データパック)釣りからモブが釣れるようにする方法

釣りからモブが釣れるようにする方法

今回は釣りからモブが釣れるようにする方法を紹介します。

目次

基本的な方針

モブが釣れるようにするための基本的な方針としては、釣れたアイテムの座標にモブを出現させ、釣れたアイテムはkillすることになります。

例えば、以下のようなコマンドを毎tick実行すれば、鮭が釣れた時に代わりにゾンビが出現するようになります。

execute as @e[type=item,nbt={Item:{id:"minecraft:salmon"}}] at @s run summon zombie
kill @e[type=item,nbt={Item:{id:"minecraft:salmon"}}]

釣れた時にプレイヤの方へ飛んでくるようにしたい場合

基本的な方針で紹介したコマンドのままでは、釣れた瞬間に釣り竿の針があったところにモブが出現するだけになります。

アイテムを釣り上げた時と同じようにプレイヤの方へ飛んでくるようにしたい場合には、以下のように釣れたアイテムのMotionを代入する必要があります。

# ゾンビを召喚してアイテムのMotionの値を代入
execute as @e[type=item,nbt={Item:{id:"minecraft:salmon"}}] at @s positioned ~ ~1 ~ summon zombie run data modify entity @s Motion set from entity @e[type=item,nbt={Item:{id:"minecraft:stone"}},sort=nearest,limit=1] Motion
#釣れたアイテムをkill
kill @e[type=item,nbt={Item:{id:"minecraft:salmon"}}]

他のアイテムを消さずにモブを釣れるようにする

これまで紹介したコマンドでは、モブの召喚用に設定したアイテムはすべて消されてモブに変換されてしまうため、モブを1種類追加するごとにアイテムが一つ入手できなくなってしまいます。

そこで、釣りから釣れるアイテムにモブと変換するためだけのアイテムを追加で設定してやることにより、元々の釣りのアイテムを維持したままモブも釣れるようにできます。

デフォルトの釣りのルートテーブル

まず、通常の状態の釣りのルートテーブルを紹介します。

少し長いですがこのようになっています。

{
  "type": "minecraft:fishing",
  "pools": [
    {
      "bonus_rolls": 0.0,
      "entries": [
        {
          "type": "minecraft:loot_table",
          "name": "minecraft:gameplay/fishing/junk",
          "quality": -2,
          "weight": 10
        },
        {
          "type": "minecraft:loot_table",
          "conditions": [
            {
              "condition": "minecraft:entity_properties",
              "entity": "this",
              "predicate": {
                "type_specific": {
                  "type": "fishing_hook",
                  "in_open_water": true
                }
              }
            }
          ],
          "name": "minecraft:gameplay/fishing/treasure",
          "quality": 2,
          "weight": 5
        },
        {
          "type": "minecraft:loot_table",
          "name": "minecraft:gameplay/fishing/fish",
          "quality": -1,
          "weight": 85
        }
      ],
      "rolls": 1.0
    }
  ],
  "random_sequence": "minecraft:gameplay/fishing"
}

内容を簡単に説明します。

  • 1回釣りを行うごとに上記のルートテーブルから一回抽選が行われます。

  • 抽選によってジャンクアイテム、宝アイテム、魚のどれか一つのルートテーブルを選択する

    このルートテーブルではランダムにジャンクアイテム、宝アイテム、魚のどれかが釣れるように設定されています。
    それぞれが釣れる確率に10、5、85という確率の重みがつけられていて、これを重みの合計で割った値がそれぞれのアイテムが釣れる確率になります。

    今回の場合は重みの合計が100なのでそれぞれ10%、5%、85%という確率になります。

    なお、この重みの値はweightという部分に記載されていますが、(プレイヤの幸運の値)×(qualityの値)だけ変動します。

  • 選択されたルートテーブルからアイテムを出現させる。

    選択された、ジャンクアイテム、宝アイテム、魚のどれかのルートテーブルからアイテムを出現させます。

デフォルトのルートテーブルの書き換え方

デフォルトの釣りのルートテーブルを書き変えるには

データパックのdata/minecraft/loot_tables/gameplayfishing.jsonという名前でファイルを作る必要があります。

例えば、以下のように書き換えます

fishing.json

{
  "type": "minecraft:fishing",
  "pools": [
    {
      "bonus_rolls": 0.0,
      "entries": [
        {
          "type": "minecraft:loot_table",
          "name": "minecraft:gameplay/fishing/junk",
          "quality": -2,
          "weight": 10
        },
        {
          "type": "minecraft:loot_table",
          "conditions": [
            {
              "condition": "minecraft:entity_properties",
              "entity": "this",
              "predicate": {
                "type_specific": {
                  "type": "fishing_hook",
                  "in_open_water": true
                }
              }
            }
          ],
          "name": "minecraft:gameplay/fishing/treasure",
          "quality": 2,
          "weight": 5
        },
        {
          "type": "minecraft:loot_table",
          "name": "minecraft:gameplay/fishing/fish",
          "quality": -1,
          "weight": 85
        },
        {
          "type": "minecraft:loot_table",
          "name": "test:mobs",
          "quality": 0,
          "weight": 50
        }
      ],
      "rolls": 1.0
    }
  ],
  "random_sequence": "minecraft:gameplay/fishing"
}

ルートテーブルの下の方に新しく5行ほど追加されているのがわかると思います。

内容としては、重みが50でqualityが0の確率でtestという名前空間内のmobsというルートテーブルを適用するというものです。

重みが50であるので重みの合計値が150になり、3回に一回の確率でmobsというルートテーブルが適用されることになります。

あとは、以下のようにルートテーブルを作成して、このアイテムに対して今まで紹介したようなコマンドを動かすだけです。

mobs.json

{
  "type": "minecraft:fishing",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:stone",
          "functions": [
            {
              "function": "minecraft:set_nbt",
              "tag": "{fishing:1}"
            }
          ]
        }
      ]
    }
  ]
}

tick.mcfunction

# ゾンビを召喚してアイテムのMotionの値を代入
execute as @e[type=item,nbt={Item:{tags:{fishing:1}}}] at @s positioned ~ ~1 ~ summon zombie run data modify entity @s Motion set from entity @e[type=item,nbt={Item:{id:"minecraft:stone"}},sort=nearest,limit=1] Motion
#釣れたアイテムをkill
kill @e[type=item,nbt={Item:{tags:{fishing:1}}}]

mobs.jsonでは必ず、{fishing:1}というタグのついた石が出現するようになっています。

そのため、tick.mcfunction内でこのタグがついたアイテムをモブにするように設定することで、釣りからモブが出現するようになります。

まとめ

釣れたアイテムの座標にモブを召喚してアイテムは消すことにより、擬似的にモブが釣れるようにすることができます。

通常の釣りから釣れるアイテムを消したくない場合には、デフォルトの釣りのルートテーブルを変更して、モブとかきかえるためだけのアイテムを釣れるようにする必要があります。