カスタムレシピのメモ書き
カスタムレシピ
いくつかのアイテムを他のアイテムに変換するための設定JSON。データパックで指定可能。
以下のレシピを好きに作れる。
- インベントリでのクラフト
- 作業台でのクラフト
- かまどでの製錬
- 燻製器での製錬
- 溶鉱炉での製錬
- 焚き火での製錬
- 石切り台でのクラフト
カスタムレシピの置き場所
datapack/<データパック>/data/<パック>/recipes/<レシピ名>.json
もしもバニラの挙動を置き換える場合は、
datapack/<データパック>/data/minecraft/recipes/<置き換える対象>.json
JSONの内容
共通のプロパティ
{ "type": "minecaraft:crafting_shaped", "group": "x" }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
type | クラフトのタイプ。 このタイプによって他のプロパティが異なる。 - crafting_shaped : 形が固定のクラフトレシピ - crafting_shapeless : 形が自由なクラフトレシピ - smelting : かまどのレシピ - smoking : 燻製器のレシピ - blasting : 溶鉱炉のレシピ - campfire_cooking : 焚き火のレシピ - stonecutting : 石切り台のレシピ |
string | ● |
group | 複数のレシピを1つにまとめるタグ。 ここが同じ文字のレシピは、1つのレシピヘルパーとして扱われる。 (インベントリのレシピを見た時に1つにまとめられる) |
string |
形が固定なクラフトのプロパティ
作業台やインベントリで使える形が固定のクラフトレシピのみ。
{ "pattern": [ " A ", "BBB" ], "key": { "A": { "item": "minecraft:stone" }, "B": { "tag": "x:stones" } }, "result": { "item": "minecraft:diamond", "count": 2 } }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
pattern | レシピの形。 任意の1文字で種類を配置する。 空白は何も置かないという設定。 |
list | ● |
key | pattern で使った文字に割り当てるアイテム。アイテムID item もしくはアイテムタグtag を指定可能。 |
object | ● |
result.item | クラフト後のアイテム。 | string | ● |
result.count | クラフト後のアイテムの数。 | number |
形が自由なクラフト共通のプロパティ
作業台やインベントリで使える配置が決まっていないクラフトレシピのみ。
{ "ingredients": [ { "item": "minecraft:stone" }, { "tag": "x:armors" } ], "result": { "item": "minecraft:diamond", "count": 2 } }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
ingredients | クラフトに使うアイテム。 アイテムID item もしくはアイテムタグtag を指定可能。 |
list | ● |
result.item | クラフト後のアイテム。 | string | ● |
result.count | クラフト後のアイテムの数。 | number |
製錬のクラフト共通のプロパティ
かまど、燻製器、溶鉱炉、焚き火のクラフトレシピ。
{ "ingredient": [ { "item": "minecraft:stone" }, { "tag": "x:armors" } ], "result": "minecraft:diamond", "experience": 0.1, "cookingtime": 200 }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
ingredient | クラフトに使うアイテム。 アイテムID item もしくはアイテムタグtag を指定可能。 |
list | ● |
result | クラフト後のアイテム。 | string | ● |
experience | クラフト完了時に経験値を取得できる確率。 0~1の間で指定。 |
number | |
cookingtime | クラフト完了までかかる時間(tick)。 | number |
石切りのクラフトのプロパティ
石切り台のクラフトレシピ。
{ "ingredient": [ { "item": "minecraft:stone" }, { "tag": "x:armors" } ], "result": "minecraft:diamond", "count": 1 }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
ingredient | クラフトに使うアイテム。 アイテムID item もしくはアイテムタグtag を指定可能。 |
list | ● |
result | クラフト後のアイテム。 | string | ● |
count | クラフト後のアイテムの数。 | number | ● |
サンプル
時計のクラフトレシピ
{ "type": "minecraft:crafting_shaped", "pattern": [ " # ", "#X#", " # " ], "key": { "#": { "item": "minecraft:gold_ingot" }, "X": { "item": "minecraft:redstone" } }, "result": { "item": "minecraft:clock" } }
金インゴットの製錬レシピ
{ "type": "minecraft:smelting", "ingredient": { "item": "minecraft:gold_ore" }, "result": "minecraft:gold_ingot", "experience": 1.0, "cookingtime": 200 }
レシピの覚え方
パック名をminecraftにして、バニラの情報を書き換える
デフォルトの挙動が変わるので注意
コマンドでレシピを覚える
## レシピを覚える recipe give @p x:original_recipe
進捗でレシピを覚える
{ : "rewards": { "recipes": ["x:original_recipe"] } }
クラフト後のアイテムにNBTを指定する
現状、クラフト元のアイテムやクラフト後のアイテムにはNBTを指定できません。
なので、多少強引ではありますが、クラフト後のアイテムだけでもNBTを指定するために、進捗を使って強制的にアイテムの置き換えを行います。
アイテムのクラフト結果を「知識の本にする」
{ : "result": { "item": "minecraft:knowledge_book" } }
進捗で「レシピ開放」を検知してファンクションを呼び出す
{ "criteria": { "placeholder": { "trigger": "minecraft:recipe_unlocked", "conditions": { "recipe": "x:original_recipe" } } }, "rewards": { "function": "x:unlock_recipe" } }
ファンクションで「知識の本」を取り替える
# 知識の本を消す clear @s knowledge_book # アイテムを渡す give @s (アイテム) # 再度トリガーをかけるため、進捗を取り消す advancement revoke @s only x:advancement # レシピも消しておく recipe take @s x:recipe
ルートテーブルのメモ書き
ルートテーブル
以下のような時に手に入れるアイテムを設定できるJSON。データパックで指定可能。
- ブロックを破壊した、された時
- エンティティを倒した時
- チェストなどを開いた時
- 釣りをした時
- 特定のモブからアイテムを貰う、交換する時
- 進捗などの報酬で手に入れる時
.minecraft/versions/<バージョン>/<バージョン>.jarを7-zipなどで開いて、data/minecraft/loot_tablesからバニラのサンプルをゲットできる。
ルートテーブルの置き場所
datapacks/<データパック>/data/<パック>/loot_tables/<ルートテーブル名>.json
もしもバニラの挙動を置き換える場合は、
datapacks/<データパック>/data/minecraft/loot_tables/<置き換える対象>.json
JSONの内容
ルート
{ "type": "minecraft:empty", "pools": [ { (ルートテーブル情報) } ] }
プロパティ | 説明 | 定義値 |
---|---|---|
type | ルートテーブルの種類 - empty : なし - entity : エンティティのドロップ - block : ブロックのドロップ - chest : チェストの中身 - fishing : 釣りの結果 - gift : 猫や村人からのギフト - advancement_reward : 進捗達成時 - generic : その他 |
string |
pools | ドロップ情報のリスト。上から順番に適用される。 | list |
ルートテーブル情報
{ "conditions": [ { (動作条件) } ], "rolls": 1, "bonus_rolls": 1, "entries": [ { (アイテムの候補) } ] }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
conditions | ルートテーブルを動作させる条件。 | list | |
rolls | entries の中からいくつ動作させるか。{ "min": 1, "max": 3 } という書き方もできる。 この場合は entries から1~3個動作させる。バニラは、基本的に1しか無い。ほぼ固定値で良い。 |
number / object | ● |
bonus_rolls | rolls に加えて、Luckの効果がついていた場合に、追加でrolls を実行させる。( rolls + bonus_rolls の回数だけentries を実行 )こちらも { "min": 1, "max": 3 }という書き方ができる。 バニラは、基本的に設定されてない。過去の遺物? |
number / object | |
entries | アイテムの候補。 | list | ● |
動作条件
{ "condition": "minecraft:survives_explosion", (conditionで設定した条件のサブパラメータ) }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
condition | ルートテーブルの動作させる条件のタイプ。 ここのタイプはpredicateと一緒なため、predicateについて書いたブログを参照。 |
string | ● |
サブパラメータ | condition で設定した条件のサブパラメータ。ここもpredicateを参照。 |
- |
ちなみにブロック壊した系は、基本minecraft:survives_explosion
。サブパラなし。
エンティティ倒した系は、基本minecraft:killed_by_player
。サブパラなし。
他は基本的にconditions
が設定されていない。
アイテムの候補
{ "type": "minecraft:item", "name": "minecraft:diamond", "weight": 10, "quality": 20, "conditions": [ { (動作条件) } ], "functions": [ { (追加機能) } ], "children": [ { (アイテムのサブ候補) } ], "expand": false, }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
type | アイテム候補のタイプ。 - item : アイテムを取得する - tag : アイテムのタグ(data packのtags)で指定する - loot_table : コピー元のルートテーブルを指定する - group : children を使って複数候補を返す(後述)- alternatives : children を使って最初の候補を返す(後述)- sequence : children を使って失敗するまでの候補を返す(後述)- dynamic : ブロック固有の情報付きで返す - empty : 何も生成しない(アイテムを取得しない) |
string | ● |
name | - type がitem ならば、アイテムID。- type がtag ならば、アイテムのタグ。- type がloot_table ならば、ルートテーブル。- type がdynamic ならば、contents もしくはself 。contents はブロックエンティティの中身。(シュルカー)self は旗やモブの頭に使われる。 |
string | |
weight | アイテム候補が複数ある場合に、選ばれやすさ。 面倒だったら、全部足した時に100にしておくと、そのまま%になる。 |
number | |
quality | プレイヤーのLuckの効果によって、weight を書き換える値。 |
number | |
conditions | アイテム候補を実行する条件。 内容は動作条件と同じ。 |
list | |
functions | アイテムを取得する時に、アイテムに付与するオプション機能。 | list | |
children | type がgroup , alternatives , sequecne の時にだけ指定する。指定可能な内容は、アイテムの候補と同じ。効果は複雑なので、後述。 |
string | |
expand | type がtag の時にだけ指定する。- true なら、name で指定したタグのアイテムを1つ取得する。- false なら、name で指定したタグのアイテムを全部取得する。 |
bool |
アイテムのサブ候補
まず、children
の内容は、アイテムの候補と全く同じ。ただし、type
に指定した内容によって効果が変わる。
group
{ "type": "minecraft:group", "children": [ { (アイテムのサブ候補1) }, { (アイテムのサブ候補2) }, { (アイテムのサブ候補3) } ] }
group
はアイテムのサブ候補を全部(1~3)を全部実行します。
これがある理由は、アイテムのサブ候補全部にconditions
を書くのを省略するため。
現在、バニラでは使われていない。
alternatives
{ "type": "minecraft:alternatives", "children": [ { (アイテムのサブ候補1) }, { (アイテムのサブ候補2) }, { (アイテムのサブ候補3) } ] }
alternatives
はアイテムのサブ候補を1(上)から順番にチェックしていって、最初にチェックに引っかかったアイテム候補だけ実行します。
要するに、1は失敗。2は成功。ならば、アイテムのサブ候補2だけが実行されます。
例えば、シルクタッチで破壊するとサブ候補1だけど、そうじゃなかったらサブ候補2みたいな書き方がバニラではメジャーです。
sequence
{ "type": "minecraft:sequence", "children": [ { (アイテムのサブ候補1) }, { (アイテムのサブ候補2) }, { (アイテムのサブ候補3) } ] }
sequence
はgroup
と似たようなものです。
ただし、group
は途中で失敗するサブ候補があっても、全部チェックしてくれますが、sequence
は1(上)から順番にチェックしていって、失敗したらそこまでのサブ候補しか実行されません。
現在、バニラでは使われていません。
追加機能
{ "function": "minecraft:copy_name", (functionで設定した機能のサブパラメータ), "conditions": [ { (動作条件) } ] }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
function | アイテムに追加する機能のタイプ。 一覧は後述。 |
string | ● |
サブパラメータ | function で設定したサブパラメータ。こちらも後述。 |
- | |
conditions | 追加機能を実行する条件。 内容は動作条件と同じ。 |
list |
追加機能の例
機能 | 説明 | バニラでの使用例 |
---|---|---|
apply_bonus | エフェクトによってボーナスを受ける。 | ダイヤ鉱石を幸運状態で採掘したらアイテム増える。 |
copy_name | 破壊されたブロックの名前をコピーする。 | 旗を壊したら旗についてた名前をコピー。 |
copy_nbt | NBTを一部コピーする。 壊した、倒した相手のNBTも可能。 |
旗を壊したら旗の柄をコピー。 |
copy_state | ブロックのBlockStateTag をコピーする。(ブロックを見た時にF3の右に出てくるブロック情報) |
ミツバチの巣をシルクタッチで壊したら巣のレベルをコピー。 |
enchant_randomly | ランダムにエンチャントを付ける。 エンチャントリストを指定することもOK。 |
ピラミッドのチェストにある革装備にランダムエンチャントをつける。 |
enchant_with_levels | エンチャントのレベルを指定する。 | エンドシティのチェストの本にレベル30のエンチャントをつける。 |
exploration_map | 何も書かれていないマップに近くの建造物付近を描く。 | 海底遺跡のチェストの地図を宝の地図にする。 |
explosion_decay | ブロックが爆発で壊された場合に、一定数アイテムが減る。 | 草が爆破された場合に小麦の種を一定数減らす。 |
furnace_smelt | かまどで精錬した後のアイテムになるようにする。 | 鶏が燃えて死んだ場合に、焼き鳥になる。 |
fill_player_head | モブの頭を壊した、殺したプレイヤーやモブの頭にする。 | - |
limit_count | set_count で指定したアイテム数に制限をかける。 |
グロウストーンが普通に壊された場合に、1~4個、グロウストーンダストを落とす。 |
looting_enchant | ドロップ増加のエンチャントによってアイテム数を増減させる。 | 鶏を倒した場合に0~1個、追加で羽を落とす。 |
set_attributes | アイテムにAttributeを付与する。 | - |
set_contents | コンテナの中身を保持する。 | シュルカーボックスを破壊した時に中身を保持する。 |
set_count | アイテム数を設定する。 ランダムで数値を決定することも可能。 |
本棚を壊した場合に、本を3個落とす。 |
set_damage | ツール系アイテムの耐久値を設定する。 | 釣りで手に入れた釣り竿の耐久値を減らす。 |
set_lore | アイテムに説明文を設定する。 | - |
set_name | アイテムの名前を設定する。 | - |
set_nbt | アイテムにNBTを設定する。 | 釣りで手に入れたポーションの効果をただの水にする。 |
set_stew_effect | 怪しげなシチューを飲んだ時に発生するステータス効果を設定する。 怪しげなシチューはクリエイティブのインベントリからは取得できない。(ただし、サバイバルで作れる) |
怪しげなシチューを飲むと、エフェクトを一定時間付ける。 |
その他、細かいところは英語Wiki参照。
Loot table – Official Minecraft Wiki
サンプル
石を壊した時のルートテーブル
{ "type": "minecraft:block", // ブロックを破壊した時 "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:alternatives", // 上から順番に見ていって最初のやつだけ実行 "children": [ { // サブ候補その1 "type": "minecraft:item", // アイテムを取得 "conditions": [ { "condition": "minecraft:match_tool", // ツールが一致していれば "predicate": { "enchantments": [ { "enchantment": "minecraft:silk_touch", // シルクタッチLv1以上 "levels": { "min": 1 } } ] } } ], "name": "minecraft:stone" // 石を取得 }, { // サブ候補その2 "type": "minecraft:item", // アイテムを取得 "conditions": [ { "condition": "minecraft:survives_explosion" // 普通に破壊した時 } ], "name": "minecraft:cobblestone" // 丸石を取得 } ] } ] } ] }
旗を壊した時のルートテーブル
{ "type": "minecraft:block", // ブロックを破壊した時 "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:item", // アイテムを取得 "functions": [ // 追加機能を付与 { "function": "minecraft:copy_name", // ブロック自身の名前をコピー "source": "block_entity" }, { "function": "minecraft:copy_nbt", // ブロック自身のNBTをコピー "source": "block_entity", "ops": [ { "source": "Patterns", // 絵柄だけ置き換え "target": "BlockEntityTag.Patterns", "op": "replace" } ] } ], "name": "minecraft:black_banner" // 黒の旗を取得 } ], "conditions": [ { "condition": "minecraft:survives_explosion" // 普通に破壊した時 } ] } ] }
鶏を倒した時のルートテーブル
{ "type": "minecraft:entity", // エンティティを倒した時 "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:item", // アイテムを取得 "functions": [ { "function": "minecraft:set_count", // 0~2個落とす "count": { "min": 0.0, "max": 2.0, "type": "minecraft:uniform" } }, { "function": "minecraft:looting_enchant", // ドロップ増加がついてたら追加で0~1個 "count": { "min": 0.0, "max": 1.0 } } ], "name": "minecraft:feather" // 羽を取得 } ] }, { "rolls": 1, "entries": [ { "type": "minecraft:item", // アイテムを取得 "functions": [ { "function": "minecraft:furnace_smelt", // 精錬した結果を取得 "conditions": [ { "condition": "minecraft:entity_properties", // エンティティ自身が燃えていた場合 "predicate": { "flags": { "is_on_fire": true } }, "entity": "this" } ] }, { "function": "minecraft:looting_enchant", // ドロップ増加がついてたら追加で0~1個 "count": { "min": 0.0, "max": 1.0 } } ], "name": "minecraft:chicken" // 鶏肉を取得 } ] } ] }
クリーパーを倒した時のルートテーブル
{ "type": "minecraft:entity", // エンティティを倒した時 "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:item", // アイテムを取得 "functions": [ { "function": "minecraft:set_count", // 0~2個落とす "count": { "min": 0.0, "max": 2.0, "type": "minecraft:uniform" } }, { "function": "minecraft:looting_enchant", // ドロップ増加だと0~1個追加で落とす "count": { "min": 0.0, "max": 1.0 } } ], "name": "minecraft:gunpowder" // 火薬を取得 } ] }, { "rolls": 1.0, "entries": [ { "type": "minecraft:tag", // アイテムタグを取得 "name": "minecraft:music_discs", // レコードのタグ "expand": true // タグの中のどれか1つを落とす } ], "conditions": [ { "condition": "minecraft:entity_properties", // スケルトン系を倒した時 "predicate": { "type": "#minecraft:skeletons" }, "entity": "killer" } ] } ] }
武器屋のチェストを開いた時のルートテーブル
{ "type": "minecraft:chest", // チェストを開いた時 "pools": [ { "rolls": { // アイテム候補を1~5個実行する "min": 1.0, "max": 5.0, "type": "minecraft:uniform" }, "entries": [ { "type": "minecraft:item", // アイテムを取得 "weight": 2, // 2/8 (2/2+4+1+1) の確率で実行する "functions": [ { "function": "minecraft:set_count", // アイテム数を1~3個にする "count": { "min": 1.0, "max": 3.0, "type": "minecraft:uniform" } } ], "name": "minecraft:iron_ingot" // 鉄インゴットを取得 }, { "type": "minecraft:item", // アイテムを取得 "weight": 4, // 4/8 (4/2+4+1+1) の確率で実行する "functions": [ { "function": "minecraft:set_count", // アイテム数を1~4個にする "count": { "min": 1.0, "max": 4.0, "type": "minecraft:uniform" } } ], "name": "minecraft:bread" // パンを取得 }, { // 何も書いてない場合は、weightは1、set_countも1 "type": "minecraft:item", // アイテムを取得 "name": "minecraft:iron_helmet" // 鉄ヘルメットを取得 }, { "type": "minecraft:item", // アイテムを取得 "name": "minecraft:emerald" // エメラルドを取得 } ] } ] }
ルートテーブルを設定する方法
パック名をminecraftにして、バニラの情報を書き換える
全てに反映されてしまうので、注意。
コマンドでルートテーブルを上書きする
# コンテナ系はsetblockでLootTableをNBTに書いて設定 setblock 0 60 0 minecraft:chest{LootTable:"x:original_chest"} # エンティティ系はsummonでDeathLootTableをNBTに書いて設定 summon minecraft:creeper 0 60 0 {DeathLootTable:"x:original_creeper"} # ルートテーブルの設定をminecraft:emptyで消す summon minecraft:creeper 0 60 0 {LootTable:"minecraft:empty"}
進捗でルートテーブルを設定する
{ : "rewards": { "loot": ["x:original_advance"] } }
こんな感じで進捗達成時にルートテーブルで報酬が書ける。
データパックのタグ付け備忘録
タグ付けとは
コマンドの/tag
ではなく、データパック内に作ることができるタグの備忘録です。
簡潔に言うと、複数のブロック、アイテム、エンティティ、ファンクションなどを1つにまとめてしまおうという機能です。
例えばブロックだと、下のようなチェックが
# 0 60 0にあるブロックが石か砂か土ならtestという execute if block 0 60 0 stone run say test execute if block 0 60 0 sand run say test execute if block 0 60 0 dirt run say test
こういうふうにできます。
execute if block 0 60 0 #x:test run say test
どうやってタグ付けするの?
データパック内にフォルダを作る
まずは以下のようにフォルダを作りましょう。
<セーブデータ>/datapacks/data/<パック名>/tags
もちろんデータパックなので、pack.mcmeta
も用意しておいてくださいね。
種類でフォルダを分ける
次にtagsの下に何のタグを付けるか決めます。
種類によってフォルダ名が決まっているので注意しましょう。
# ブロックをタグ付けする <セーブデータ>/datapacks/data/<パック名>/tags/blocks/<タグ>.json # アイテムをタグ付けする <セーブデータ>/datapacks/data/<パック名>/tags/items/<タグ>.json # ファンクションをタグ付けする <セーブデータ>/datapacks/data/<パック名>/tags/functions/<タグ>.json # エンティティをタグ付けする <セーブデータ>/datapacks/data/<パック名>/tags/entity_types/<タグ>.json
タグをつけたい項目を入れていく
それでは、<タグ>.jsonの中身を書いていきましょう。例えば上で説明したブロックのタグ付ならばこんな感じになります。
{ "values": [ "minecraft:stone", "minecraft:sand", "minecraft:dirt" ] }
構造はシンプル!ただ並べるだけ!
他のアイテムやファンクション、エンティティも同じかんじでタグ付けできます。
どうやって使うの?
タグ付けしたものは、#<パック名>:<タグ>
という形で指定できます。
例えば、
<セーブデータ>/datapacks/data/x/tags/blocks/test.json
とならば、
execute if block 0 60 0 #x:test run say test
という感じで使えるようになります。
使えるコマンドは限られている
基本的にタグ付けで使えるコマンドはチェックする対象を調べる時がほとんどです。
ブロックなら上でも説明したような感じですね。
エンティティならば、こんな感じでエンティティのtypeに指定できます。
replaceitem entity @e[type=#x:mob] armor.head stone
アイテムならば、Predicateで下みたいに書くとそのアイテムのどれかを右手で持っていたらってことができます。
{ "condition": "minecraft:entity_properties", "entity": "this", "predicate": { "equipment": { "mainhand": { "tag": "x:super_items" } } } }
(PredicateやLoot Tableなどの上記の場合は、#
は不要です)
ちなみに、クリエイティブのインベントリの検索欄にもタグは使えます。
ファンクションのタグ付けの呼び出しルール
ファンクションは単純にこういう形で呼び出せます。
{ "values": [ "x:aaa", "x:bbb", "x:ccc" ] }
function #x:call
さて、この場合は、x:aaa
x:bbb
x:ccc
はどういう順番で呼び出されるのか。
実は上から順番に1回ずつ呼び出されます。前後関係が重要な場合など使えるかもですね。
特殊なタグ付け
<パック名>をデフォルトのminecraftにすることで、ちょっと特殊なタグを付けることができます。
minecraft/tags/functions/load.json
ここに同じようにタグを付けると、ゲームのロード時やサーバーのリロード時に、ここでタグ付けされたファンクションが必ず呼び出されるようになります。
データパック配布する人とかは常用しているのでは?
minecraft/tags/functions/tick.json
ここに同じようにタグを付けると、1tickごと、tick開始時に、ここでタグ付けされたファンクションが必ず呼び出されるようになります。
常時実行しておきたいコマンドとかはここでタグ付けしておくと便利ですね。
タグ付けのタグ付け
さて、ここまでタグ付け方法などを書いてきましたが、実はタグ付けしたものを更にタグ付けできます。
{ "values": [ "#x:test", "minecraft:glass" ] }
こんな感じですね。
デフォルトでも結構、タグが多く登録されているので、使えるものは使っちゃいましょう。
サブフォルダ内に置くこともできる
タグはフォルダの階層をさらに掘ることができます。例えば、
<セーブデータ>/datapacks/data/x/tags/blocks/aaa/bbb/ccc/test.json
という感じであれば、
#x:aaa/bbb/ccc/test
というふうに利用することができます。
マイクラのワールドの設定を整理してみた
最初にやること
配布マップを作る時には、まず最初にワールドを生成したら、すぐさまこれを私はやります。
gamerule doDaylightCycle false
別にこれからやらなくても良いんですけど、なぜかやってしまうんです。太陽が動くことがまず気になってしまって…
その後は、ひたすらgameruleを設定していくわけですが、これがまあ面倒くさい!
ここまでやったけど、アレ飛ばしたっけな?とか、これなんだったけな?って言うのがしょっちゅうあります。
でも最近はそういう事がなくなりました。なぜかと言うと、ワールド設定を全部一つのfunctionファイルに押し込んだから。
ワールド設定
本題です。ようは、下のやつを毎回呼び出しているわけです。
これさえあれば、あなたも快適なマップ作成のスタートを切れますよ!たぶん!
注意: 下の設定はすごく便利ですが、私のよく設定してある内容になっています。 いきなり反映させたら、ワールド内のモブが消えたとか言う可能性もあるので、 製作中のワールドに反映させる際には、必ず1つずつ項目チェックしてください。
# Minecraft の Gamerule 設定一覧 (v1.16) # チェインコマンドが何個まで一度に実行されるか (functionファイル内のコマンド数含む) ## 場合によっては、小さな値に設定されている可能性があるため、最初に実行 ## 初期値:65536 gamerule maxCommandChainLength 65536 # チャット欄で進捗を開放した時に、テキストチャットにメッセージを出すかどうか (右上の通知は消せない) ## 初期値:true gamerule announceAdvancements false # コマンドブロックを実行したときのログを表示するかどうか ## 初期値:true gamerule commandBlockOutput false # サーバーでエリトラで飛んでいるプレイヤーの速度をチェックするかどうか ## 初期値:false gamerule disableElytraMovementCheck false # 村の襲撃イベントを無効にするかどうか ## 初期値:false gamerule disableRaids true # 時間(太陽と月の動き)が進むかどうか ## 初期値:true gamerule doDaylightCycle false # モブ以外のエンティティを壊した時にアイテムを落とすかどうか ## falseの場合、額縁からアイテムが外せなくなる ## 初期値:true gamerule doEntityDrops false # 炎が燃え広がり、自然に火が消えるかどうか ## 初期値:true gamerule doFireTick false # 死亡画面を出さずに、すぐにリスポーンさせるかどうか ## 初期値:false gamerule doImmediateRespawn true # 夜にファントムがスポーンするかどうか ## ファントムは夜などに、3日間以上ベッドに入っていないプレイヤーの上にスポーンする ## 初期値:true gamerule doInsomnia false # アンロックしたレシピだけをクラフトできるようにするかどうか ## 初期値:false gamerule doLimitedCrafting true # モブがアイテムを落とすかどうか ## 初期値:true gamerule doMobLoot false # モブが自然にスポーンするかどうか ## 初期値:true gamerule doMobSpawning false # 略奪隊がスポーンするかどうか ## 略奪隊はヴィンディケーターとピリジャーで構成された集団 ## 初期値:true gamerule doPatrolSpawning false # ブロックを壊した時にアイテムを落とすかどうか ## falseでもチェストなどは中身のアイテムだけ落とす(シュルカーボックスは中身ごと消える) ## 初期値:true gamerule doTileDrops false # 行商人がスポーンするかどうか ## 初期値:true gamerule doTraderSpawning false # 天候(晴れ、雨、雷雨)が自然に変化するかどうか ## 初期値:true gamerule doWeatherCycle false # プレイヤーが溺れたときにダメージを受けるかどうか ## 酸素ゲージは減っていく ## 初期値:true gamerule drowningDamage false # プレイヤーが落下ダメージを受けるかどうか ## 初期値:true gamerule fallDamage false # プレイヤーが炎によるダメージを受けるかどうか ## 初期値:true gamerule fireDamage false # 中立モブが怒っている状態で対象のプレイヤーが倒れると怒らなくなるかどうか ## 初期値:true gamerule forgiveDeadPlayers true # プレイヤーが死んでもインベントリのアイテムや経験値を残すかどうか ## 体力と空腹値は回復する ## 初期値:false gamerule keepInventory true # 管理者コマンドをサーバーに記録するかどうか ## 初期値:true gamerule logAdminCommands false # モブやプレイヤーが1ブロック以内に何体いたら窒息ダメージを受けるか ## 0にすると何体いても窒息ダメージを受けない ## 初期値:24 gamerule maxEntityCramming 0 # モブが行動することでブロックを変更、アイテムを拾うかどうか ## 村人の繁殖も同じくこの設定 ## 畑を荒らされることもなくなる(プレイヤーは荒らせる) ## 初期値:true gamerule mobGriefing false # 空腹度が満たされている時に、自然に体力を回復するかどうか ## 初期値:true gamerule naturalRegeneration true # 何Tickごとにランダムで植物の成長させるか ## 0Tickだと成長させない ## 初期値:3 gamerule randomTickSpeed 0 # デバッグ画面(F3)にすべての情報を表示するかどうか ## 座標や方角など見せたくない場合はfalse推奨 ## ヒットボックス表示(F3+B)やチャンク境界標示(F3+G)も含む ## 初期値:false # gamerule reducedDebugInfo true # プレイヤーが実行したコマンドをテキストチャットに表示するかどうか ## 初期値:true gamerule sendCommandFeedback false # プレイヤーが死んだ時にテキストチャットにメッセージを表示するかどうか ## 初期値:true gamerule showDeathMessages false # マルチでのワールドログイン時や、スポーンポイントが設定されていないプレイヤーが ## ワールドスポーン地点でスポーンする範囲 ## 0だとワールドスポーン地点のジャストその場所 ## 初期値:10 gamerule spawnRadius 0 # スペクテイターモードのプレイヤーがチャンクを生成できるかどうか ## 初期値:true gamerule spectatorsGenerateChunks true # 怒っている中立モブが、怒っている対象付近のプレイヤーにも攻撃するかどうか ## 初期値:false gamerule universalAnger false # 難易度を何にするか # 値:peaceful | easy | normal | hard # difficulty peaceful # マルチでログイン時にプレイヤーのゲームモードを何にするか # 値:survival | creative | adventure | spectator defaultgamemode adventure # 全プレイヤーのゲームモードを変更する # gamemode adventure @a # ワールドのスポーン地点を設定する # setworldspawn 0 60 0 # 全プレイヤーのスポーン地点を設定する # spawnpoint @a 0 60 0 # 現在の時刻を設定する ## 値:day | noon | night | midnight | tick数 ## 6000(tick)は太陽が真上に来る時間 time set 6000 # 現在の天候を設定する ## 値:clear | rain | thunder weather clear # ワールドの境界を設定する # worldborder center 0 0 # worldborder set 10000 # worldborder damage amount 0 # 強制的に読み込ませるチャンクを設定する ## あまりにも量を増やすと重くなるので注意 ## モブの行動や光源処理が走るところに使うと重くなるので注意 # forceload remove all # forceload add 0 0 48 48
ゲームルール以外の設定
ゲームルールやそれに追随する設定は全部終わりました。
その次は何をやるのか。私は一気に下のやつも初期設定します。
- 基本的な名前のスコアボード
- デバッグ用のtellrawもしくは本の作成
- チームの作成
まあ、ここに関しては、後はご自由にって感じですね。
座標について
私の場合は、ワールドに入ったら、速攻でxが0、zが0の座標にTPします。
そして建物は基本的に+の方向にしか立てていきません。
理由としてはコマンドを組む時に座標を書くことがありますが、
setblock -10051 13 -3049 stone
みたいに長く書くのが嫌じゃないですか。マイナスとか面倒じゃないですか。
そんなしょうもないけど、私にとっては大事なルールです。
triggerコマンドについて使い道を考える
triggerコマンドとは
スコアボードの値を「OP権限」を持たないプレイヤーが変更できるコマンドです。
tellrawなどのクリックイベントで使われることがほとんどですね。
triggerコマンドはどうやって使うの?
オブジェクトを作る
まずはオブジェクトを用意しましょう。
scoreboard objectives add SAMPLE trigger "サンプル"
実はトリガーで変更できるスコアボードはtriggerタイプ
のオブジェクトじゃないと使えません。
トリガー有効化
次に、トリガーを引けるようにするために有効化する必要があります。
有効化されていない場合は、トリガーコマンドは失敗します。
scoreboard players enable @p SAMPLE
@p
の部分はトリガーを引かせたいプレイヤーを指定します。
トリガーを引く
# プレイヤーの値を1にする trigger SAMPLE set 1 # プレイヤーの値を1つ足す trigger SAMPLE add 1
上のような感じで、コマンドを実行すればプレイヤーの値を変更できます。
ただし、普通はプレイヤーがトリガーコマンドを直接実行することはないでしょう。
値を変更するのはスコアボードコマンドでもOK
スコアボードを変更したいだけなら、普通のスコアボードと同じように使えます。
scoreboard players set @p SAMPLE 10
テキストチャットから使う
さて、トリガーを引かせる主な方法はテキストチャットなどで、プレイヤーがクリックさせて実行させます。
tellraw @p {"text":"クリック","clickEvent":{"action":"run_command","value":"/trigger SAMPLE add 1"}}
ちょっと読みにくいので、整形しますね。
tellraw @p { "text": "クリック", "clickEvent": { "action": "run_command", "value": "/trigger SAMPLE add 1" } }
clickEventでaction
とvalue
を指定しています。
さらにactionではrun_command
(コマンドを実行する)、
valueでは/trigger SAMPLE add 1
(クリックした時に実行するコマンド)、
をそれぞれ指定します。
これを実行すると、「クリック」とテキストチャットに表示されるので、それをクリックすると/trigger SAMPLE add 1
が実行されます。
run_commandで指定するコマンドはスラッシュが必要
functionファイルとかでは/
が先頭に無しでコマンドが実行できます。ですが、run_commandのvalueでは必ず/
が先頭に必要です。
よく忘れてしまうので注意しましょう。
トリガーコマンドは1回しか実行されない
ここで、トリガーコマンドの特徴です。
トリガーコマンドは有効化された後に1回だけしか実行できません。
つまり、一回トリガーを引いたら戻せない。これがトリガーコマンドで最も便利な部分です。
テキストチャットなどは一度表示しちゃうと何度でも、チャットを開いてクリックできちゃいますから、それを防ぐための処理が全部なくなるわけです。
再度、トリガーを引かせる場合は、有効化をもう一度やればOKです。
1度、有効化したトリガーは戻せない?
トリガーを有効化してしまったら、無効化することはできないようです。
どうしても無効化したい場合は、以下でなかったことにしましょう。
execute as @p run trigger SAMPLE add 0
まとめ
トリガーコマンドは、
- triggerコマンド専用のスコアボードが必要
- 有効化しないと使えない
- 有効化したら1度だけ実行できる
という特徴があります。
プレイヤーにテキストなどで選択させたい場合で、一度決めさせたら一定期間はロックしたいときに使うといいでしょう。
ArmorStandのNBTでよく使うものをジャンルで整理してみる
ArmorStand
ArmorStand(minecraft:armor_stand。アーマースタンド。以下、アマスタ)っていろんな場面で使うじゃないですか。例えば。
- 防具立て
- マーカー(位置指定)
- 3Dモデル配置用
- 一時的なスコアボード保管用
- パーティクル表示の基準
などなど。そういう時に、いざアマスタを召喚しようとしたら、
「このNBTってどうやって書くんだったかなあ…」
ってよくなります。ということで私がよく使うやつだけ整理してみる。
基本セット(当たり判定・透明化・落下防止)
# 当たり判定を消す {Marker:true} # 透明化する {Invisible:true} # 落下防止する {NoGravity:true} # 3つ合わせて {Marker:true,Invisible:true,NoGravity:true}
上の3つは大体のやつに設定している気がする。特に理由もなく。
※ 宗教上の理由から0b, 1bではなく、false, trueで書いてます。
名前関係
# 名前をつける {CustomName:'{"text":"名前"}'} # 名前を表示する {CustomNameVisible:true} # 2つ合わせて {CustomName:'{"text":"名前"}',CustomNameVisible:true}
やっぱり、名前をつけるのはやるよね。普通のモブに対してもやるからね。
判別用途関係
# 最初からタグをつける {Tags:["aaa","bbb"]} # 最初からチームに含める {Team:"red"} # 2つ合わせて {Tags:["aaa","bbb"],Team:"red"}
タグとかチームはセレクター指定するときに楽になるから、ついつい使っちゃう。
見た目関係
# 小型化 {Small:true} # 手あり {ShowArms:true} # 下の台なし {NoBasePlate:true}
全部をあわせて使うことはあまりないけど、見た目をいじるなら、これは設定しておきたいよね。
姿勢関係
# 召喚時の向き ## 1つ目はアマスタの体の方向(-180:北、-90:東、0:南、90:西) ## 2つ目はアマスタの頭の方向(0:正面、90:真上、-90:真下) Rotation:[0.0f,0.0f] # 頭、体、左手、右手、左足、右足の角度(別サイトで設定することを推奨) Pose:{Body:[...],LeftArm:[...],RightArm:[...],LeftLeg:[...],RightLeg:[...],Head:[...]}
いよいよもって使わなくなってきたけど、アマスタの姿勢調整用。
各パーツはこちらで設定することをおすすめするよ。
アイテム装備関係
# 最初から右手、左手に装備する ## 1つ目は右手 ## 2つ目は左手 {HandItems:[{id:"minecraft:stone",Count:1b},{}]} # 最初から防具を装備する:インベントリとは逆順に装備するって覚えればいけそうだね ## 1つ目は足装備 ## 2つ目は腰装備 ## 3つ目は体装備 ## 4つ目は頭装備 {ArmorItems:[{},{},{},{id:"minecraft:stone",Count:1b}]} # 装備を付けられる、はずれるの設定 ## この値の詳細は後述 {DisableSlots:31}
アマスタの装備関係。最初から装備させなくていいなら、replaceitemでやった方がシンプルだと思う。
装備の付け外し設定
まずは、こちらの表をご確認あれ。
設定 | パーツ | 数値 |
---|---|---|
装備させない、はずさせない | 右手 | 1 |
装備させない、はずさせない | 足 | 2 |
装備させない、はずさせない | 腰 | 4 |
装備させない、はずさせない | 体 | 8 |
装備させない、はずさせない | 頭 | 16 |
装備させない、はずさせない | 左手 | 32 |
装備をはずさせない (装備できる) | 右手 | 256 |
装備をはずさせない (装備できる) | 足 | 512 |
装備をはずさせない (装備できる) | 腰 | 1024 |
装備をはずさせない (装備できる) | 体 | 2048 |
装備をはずさせない (装備できる) | 頭 | 4096 |
装備をはずさせない (装備できる) | 左手 | 8192 |
装備させない (はずせる) | 右手 | 65536 |
装備させない (はずせる) | 足 | 131072 |
装備させない (はずせる) | 腰 | 262144 |
装備させない (はずせる) | 体 | 524288 |
装備させない (はずせる) | 頭 | 1048576 |
装備させない (はずせる) | 左手 | 2097152 |
全部の値の意味はこんな感じなんだけど、複数指定したい場合はどうするのか。
全部足します。
つまり、両手、足、腰、体は「装備させない、はずさせない」だけど、頭は「装備させない、けどはずせる」ようにしたいのであれば
- 右手の「装備させない、はずさせない」は、1
- 左手の「装備させない、はずさせない」は、32
- 足の「装備させない、はずさせない」は、2
- 腰の「装備させない、はずさせない」は、4
- 体の「装備させない、はずさせない」は、8
- 頭の「装備させない、けどはずせる」は、1048576 (表の最後のやつ)
になるので、「1 + 32 + 2 + 4 + 8 + 1048576」の結果、「1048623」をDisableSlotsに指定すればOK。
面倒ならば、MC Stackerとか使ったほうが良いと思います。
ちなみに、全部「装備させない、はずさせない」、アマスタを破壊もできないで良いならばMarkerを使ったほうが楽です。
デバッグ目的
# 光らせる {Glowing:true}
実際の使い方は、もちろん光らせるためにあるんですけど、私はデバッグ用途で使ってます。
なんのデバッグかって?
透明化したアマスタがどこにいるのか見えるようにするため!
光らせてしまえば、壁の向こう側でも見えますからね。便利です。
最後に
まだ指定できるNBTはいっぱいあるんですが、私はそこまで残りのやつは使わないです。
世の中にはUUIDとか指定してアレコレする人やAttributeでアレコレする人がいるそうですね。
世界は広いですね。
マイクラのexecuteについて備忘録
executeとは?
なにやら複雑で初見さんバイバイのexecuteコマンド。そんなexecuteも覚えてしまえば、あっちにもこっちにもexecute、どこを見てもexecute。そんな沼のようなコマンドです。
具体的に表現するのならば、コマンドに条件をつけるコマンドです。もっと雑に言うのであれば、ほぼすべてのコマンドに指定できるオプションです。
特に、mcfunctionファイルを使うのであれば必須級のコマンドです。
executeはどうやって使うの?
execute <ほにゃらら> run <コマンド>
上みたいな感じで、<ほにゃらら>
部分に条件を書いた上でコマンドを実行するんですね。
基本的には、<ほにゃらら>
の部分が結構多いので、私が使う頻度の高いものだけをサクっと説明しちゃいます。
execute <ほにゃらら> の一覧
- [★★★] 必ず使うレベル
- as : 誰が実行する
- at : 誰の場所で実行する
- if : もしも~だったら実行する
- [★★] 結構使うレベル
- unless : もしも~じゃなかったら実行する
- store : 実行した結果を入れる
- [★] 使うときは使うレベル
- positioned : どこで実行する
- facing : どこを向いて実行する
- まず使わないレベル
- anchored : 目/足を向いて実行する
- align : 座標の小数点を無視して実行する
- rotated : どこを向いて実行する
- in : どの世界で実行する
基本はこんな感じです。まず使わないレベルは、本当に使わないので、そういうのがあるんだぁ程度に頭の片隅に置いといてください。まじで私は使わないので。
この記事では、★★★~★までのオプションについて、ほんの少しずつ感覚的説明をします。
必ず使うレベル
as : 誰が実行する
まずは、どういうふうに使うか。
# 「プレイヤー全員が」testって言っちゃうコマンド execute as @a run say test # 「モブも含めて全員が」testって言っちゃうコマンド execute as @e run say test
asというのは、エンティティを指定して、そのエンティティがコマンドを使うってオプションです。
@s について
エンティティの指定方法に@p(最も近いプレイヤー)、@a(全プレイヤー)、@r(ランダムに選択されたプレイヤー)、@e(全エンティティ)という種類があるじゃないですか。
その中の一つに@sというものが存在するんですね。
これ、何かというとasで指定したエンティティ(一人でも複数でも)が@sに割り当てられるのです。例えばこういう風に書くのは嫌じゃないですか。
# 普通はtpから後だけ書くけど、簡単な例として。 execute as @e[type=zombie,team=red,tag=aaa] run tp @e[type=zombie,team=red,tag=aaa] 10 60 10
それをこういうふうにかけちゃうんです。
# @sがasで指定した@e[type=zombie,team=red,tag=aaa]と同じ意味になる execute as @e[type=zombie,team=red,tag=aaa] run tp @s 10 60 10
at : 誰の場所で実行する
まずは、どういうふうに使うか。
# 「全プレイヤーの場所に」石を設置する execute at @a run setblock ~ ~ ~ stone # 「ランダムなプレイヤーの場所に」クリーパーを召喚する execute at @r run summon creeper ~ ~ ~
atというのは、エンティティを指定して、そのエンティティの場所を基準にコマンドを使うってオプションです。さらに、asや@sと組み合わせると、もっと複雑なことができます。
# 全プレイヤーを、「とあるモブの場所に」移動させる execute as @e[tag=point] at @s run tp @a ~ ~ ~
asで「とあるモブ」を指定して、atで「そのモブの場所」を指定すると、こんな感じで書けます。
ちなみに、テキストチャットでexecute無しのコマンドを打つと以下と同じようなことをやっていることになります。
# プレイヤーがその場所でsay test execute as @p at @s run say test
if : もしも~だったら実行する
まずは、どういうふうに使うか。
execute if entity @p[gamemode=creative] run say "誰かがクリエになっている!" execute if block 10 60 10 stone run say "10 60 10のブロックが石だ!" execute if score @p SCORE matches 10 run say "誰かのSCOREというscoreboardの値が10だ!" execute if score @p SCORE matches 1..8 run say "誰かのSCOREという値が1~8だ!"
ifというのは、何かが一致(もしくは存在)していたらコマンドを実行するってオプションです。
こいつがかなり種類が多いのです。つまり、なんでも「もしも」の条件が作れてしまうのです。
- execute if entity:エンティティがいたら
- execute if block:ブロックがあったら
- execute if blocks:とある場所のブロックと一致していたら
- execute if score:スコアボードの条件が一致していたら
- execute if data:NBTやストレージが一致していたら
- execute if predicate:predicateの条件が一致していたら
しかもそれぞれで、かなり深い所まで掘り下げられます。が、実際使うのは上で書いたサンプルがほとんどです。ストレージやpredicateは私は結構使うけど、その辺は過去のブログを参考にしてね。
keiduki.hatenablog.com keiduki.hatenablog.com
結構使うレベル
unless : もしも~じゃなかったら実行する
結論だけ先に書きます。ifの反対です。
ifが成功したら実行だったのに対し、unlessは失敗したら実行です。
execute unless entity @p[gamemode=creative] run say "誰もクリエじゃない!" execute unless block 10 60 10 stone run say "10 60 10のブロックが石じゃない!" execute unless score @p SCORE matches 10 run say "誰かのSCOREというscoreboardの値が10じゃない!" execute unless score @p SCORE matches 1..8 run say "誰かのSCOREという値が1~8じゃない!"
ifが使えたら、unlessも使えるようになる。素晴らしいですね。
store : 実行した結果を入れる
まずは、どういうふうに使うか。
# say testって言えたら@pのSCOREに1をいれる。そうじゃなかったら0をいれる。 execute store success score @p SCORE run say test # SCORE2の@pの値をSCOREの@pにコピーする execute store result score @p SCORE run scoreboard players get @p SCORE2 # ボスの体力をボスバーに反映する execute store result bossbar zombie-boss value run data get entity @e[tag=boss,limit=1] Health
storeは実行した結果を取得できる、他のオプションとは少し違うオプションです。
successはコマンドに成功した回数をいれます。ifとよく組み合わせて使いますね。
resultはコマンドで取得した結果をいれます。どちらかと言うと、resultの方がよく使うかも?
しかもこれらの結果はいろんなものに適用できるので、使い方を覚えれば結構、使えますよ。ただし、数値しか入れられないのが惜しいところ。
- execute store <success|result> block:ブロックのNBTに値を入れる
- execute store <success|result> bossbar:ボスバーの最大値もしくは現在値に入れる
- execute store <success|result> entity:エンティティのNBTに値を入れる(プレイヤーは不可)
- execute store <success|result> score:スコアボードに値を入れる
- execute store <success|result> storage:ストレージに値を入れる
使うときは使うレベル
positioned : どこで実行する
まずは、どういうふうに使うか。
# 10 60 10の場所に石を置く execute positioned 10 60 10 run setblock ~ ~ ~ stone # 「ランダムなプレイヤーの場所に」クリーパーを召喚する execute positioned as @r run summon creeper ~ ~ ~
positionedは、エンティティだろうが座標だろうが、どこでコマンドを実行するか決められるオプションです。見て分かる通り、positioned asはまさかのatとほとんど同じ意味です。つまり使いません。
座標指定で、好きな場所で実行できるのは嬉しいですね。特にcloneする時とかは。
facing : どこを向いて実行する
まずは、どういうふうに使うか。
# とあるモブが徐々にプレイヤーに近寄ってくる execute as @e[tag=point] at @s facing entity @p feet run tp @s ^ ^ ^0.2 # 常に10 60 10の方角にパーティクルが出続ける(向こうにラピュタが…) execute as @a at @s facing 10 60 10 run particle effect ^ ^1 ^2
facingは向いていたとして、その方向に対してコマンドを実行します。
だから、基本的には~ ~ ~
ではなく^ ^ ^
の向いている方向に対しての座標を指定します。
種類としては、以下があります。
- execute facing entity <エンティティ> <eyes|feet>:エンティティの足元か頭を見る
- execute facing <座標>:座標の方を見る
~ ~ ~ の座標と ^ ^ ^ の座標
~ ~ ~
は言うまでもなく、それぞれx y z
を表しています。
F3キーを押した時に中心に出てくる赤(x)と緑(y)と青(z)の線がこれですね。
# x方向に+1 ~1 ~ ~ # y方向に+1 ~ ~1 ~ # z方向に+1 ~ ~ ~1
それに対して^ ^ ^
は頭が向いている方向になります。
# 頭の左に+1 ^1 ^ ^ # 頭の上に+1 ^ ^1 ^ # 頭の正面に+1 ^ ^ ^1
頭なので、視線です。視線なので、動きます。
なれるまでは時間がかかりますが、向いている方向に対してなにかする場合は、避けては通れない道です。
executeコマンドでfunctionコマンドを呼び出す
executeコマンドはあらゆるコマンドのオプションを付けられます。その中でも最も特殊なのが、functionコマンドを呼び出したときの挙動です。例えばこういうふうに呼び出したとしましょう。
execute as @a[team=red] at @s run function x:test
そしてfunctionの中でこういうふうに書くと。
tellraw @s {"text":"こんにちは!"} tellraw @s {"text":"きょうもいい天気ですね!"} summon ~ ~10 ~ creeper
なんと、executeのasやatが、functionの中の全ての@sや座標に反映されるんです!
同じようなコマンドをいっぱい並べてた人は、executeでfunctionの時代ですよ!!