functionが思うように動かないときの、筆者が行っている対処フロー
1.構文エラーの確認
構文エラーはチャット欄やコマンドブロックにて赤文字で表示されます。
function内に構文エラーがあると、function自体が読み込まれなくなります。
・構文エラーfunctionの特定
functionが読み込まれているかの確認方法としては、
1. /reload 後、Minecraft Launcherのlogを確認する
構文エラーfunctionは Couldn't load function at ○○ と赤文字で表示される
2. /function の候補に表示されるかどうか確認する
の二通りがあります。
読み込まれていないfunctionを特定できたら、次は構文エラーのある行の特定に移ります。
・構文エラー行の特定
1行ずつコピペでコマンドブロックに貼り付けて、赤くなればその行にエラーがあります。
貼り付けた時点でわかるので実行する必要はありません。
行数が多く1行ずつコピペが大変な場合は、行の半分ほどを削除して/reloadします。
読み込まれた場合、削除した行の中にエラーがあります。
(必ず退避させるかCtrl+zで戻せることを確認しておきましょう)
2.構文エラー以外の問題箇所の特定
構文エラー以外の問題、例えば
セレクターの指定ミス
execute ifの条件文のミス
function名やスコア名のスペルミス
は実行しても何も起きず沈黙することが多く、特定が困難になりがちです。
そのためfunctionに実行時の情報を出力する行を加筆することで、問題箇所の特定が容易になります。
・say hi
sayコマンドはfunctionが実行されたとき必ずチャット欄に文章を出力します。
functionが実行されたことと実行者の確認に使用できます。
そのコマンドの短さから非常に扱いやすいことも特徴です。
中身の文章は何でもよく、hi、func1、スコアリセットした、など自由に設定できます。
・execute if ... run say hi
条件式+sayの組み合わせです。
条件式のあるコマンドの1行上に同条件でsay文を挿入すると、
条件式の成否がチャット欄で確認できるようになります。
例えば
execute if score @s Score matches 1 run say score1
execute if score @s Score matches 1 run function ...
を実行してチャット欄にscore1が表示されれば、
@s Scoreが1であるところまでは動作している、と判断できます。
・execute as @e[tag=A] run say hi
実行者の数だけhiが帰ってきます。
実行者の有無の確認に使用できます。
・tellraw
tellraw @p {"score":{"name":"@s","objective":"Score"}}
tellraw @p {"entity":"@s","nbt":"Pos"}
tellraw @p {"block":"0 0 0","nbt":"Items"}
tellraw @p {"storage":"○○","nbt":"○○"}
tellrawコマンドはスコアやnbtをチャット欄に出力します。
function内に挿入することでその行におけるスコアやnbtの値を取得できます。
実行者がプレイヤー以外でも出力できるようにセレクターは@pにしてあります。
コマンドが長いのでベースの文を辞書登録しておくと捗ります。
・particle minecraft:flame ~ ~ ~ 0 0 0 1 0 force
実行座標を確認したいときに利用できます。
実行座標を指定していないfunctionの実行座標はワールドの初期地点であることに留意しましょう。
・functionパスのミス
function内のfunctionコマンドのパスミスは何も起こらないので発見しにくいミスです。
functionコマンドをチャット欄にコピーすることで実際に存在するfunctionかどうか確認できます。
・functionの無限ループの確認
条件式のミスなどで無限ループに陥り、1tickのコマンド数がmaxCommandChainLengthに達すると
他のコマンドは実行されなくなります。
チャット欄で該当のfunctionを実行し、Executed 65536 commands from function ○○
と表示されると無限ループに陥っています。
(この状態でmaxCommandChainLengthを1000000などに増加させると完全にフリーズするのでNGです)
コメント
最新を表示する
>> 返信元
動画と同じくやっているのに関数が見つかりません
>> 返信元
manifest.jsonのmin_engine_versionが1.19.50以降であるか確認してください。
それ未満だと旧executeのコマンドの構文として解析するため構文エラーになります。
>> 返信元
酷いことを言いますね。その言葉をネットに書き込むなら、あなたはメディアに書き込む権利がないです。
スコアボードコマンドだけがなぜか実行されません。
コマンドブロックではしっかり実行されるのですがどうすればいいですか?
(say tp tellrawなどはすべて動きます)
構文が確実にあっている部分で(具体的に言うとexecute as >>@a<<)エラーを出力しています。
チャットに打ち込んだ時は正常に実行されました。
何が原因なのでしょうか?
>> 返信元
しね
動画の通りにやってるのに関数が見つかりませんどうしたらできますか
動画の通りにやってるのに関数が見つかりませんどうしたらできますか
役立ちました
構文エラーが起きる理由がわかってよかったですう
ありがとうございます
>> 返信元
へへ
ないうs
NG表示方式
NGID一覧