Minecraft BE(統合版)のscoreboardコマンドを使用して、あるスコアの値を比較して順位付けを行う方法です。
前提となるscoreboard及びexecuteコマンドの使い方はこちらから確認してください。
▶/scoreboardコマンドの使い方
▶/executeコマンドの使い方
/scoreboardと/executeコマンドで値を参照して順位を付ける
まずは前提となる状況やスコアを仮に定義します。
実際には環境に合わせてカスタムして下さい。
ここでは対象となるエンティティとして『armor_stand』を3体用意し、それぞれに『point』スコアをランダム(1~10)で付与、このpointの値が大きい順に『rank』スコアを1→2→3と付けるコマンドとします。
※pointスコアの作成、値の付与に関する構文は割愛します。
順位の判断基準となるスコア名 | point |
順位スコア名 | rank |
順位付けのルール | pointが大きい順 |
順位を付けるための/scoreboardと/executeコマンド
1,/scoreboardコマンドの準備
①:/scoreboard objectives add rank dummy
スコアボード「rank」を作成する。
②:/scoreboard players set @e[type=armor_stand] rank 0
全てのアーマースタンドのrankの値を0にする
※アーマースタンド3体にはそれぞれ、すでにpointの値が付与されているものとする。
2,/scoreboardと/executeコマンドで順位を付ける
③:/scoreboard players operation system point > @e[type=armor_stand,scores={rank=0}] point
systemのpointスコアをrankの値が0のアーマースタンドのpointスコアのうち最も大きい値に書き換える
④:/execute as @e[type=armor_stand] if score @s point = system point run scoreboard players set @s rank 1
実行者をアーマースタンドとして実行者のpointの値がsystemのpointの値と等しいときに実行者のrankを1にする
⑤:/scoreboard players set system point 0
systemのpointの値を0にする
※以下、④の『set @s rank』の値を1→2→3と置き換えて繰り返す
systemとは…
scoreboardコマンドの付与や参照の対象として、エンティティとしては存在しない空ネームを指定することが出来ます。
ここではsystemという空ネームを用いてスコアの値を保存や比較することに用いています。

実行結果ログのキャプチャーです。
pointは事前にランダムで付与し、3体のアーマースタンドにそれぞれ『5』『8』『4』が付与されていました。
ログでは
・8がsystemにコピーされ、systemと同じ8の値を持つアーマースタンドがrank:1に。
・5がsystemにコピーされ、systemと同じ5の値を持つアーマースタンドがrank:2に。
・4がsystemにコピーされ、systemと同じ4の値を持つアーマースタンドがrank:3に。
と処理された様子が確認できます。
値を参照して順位を付けるコマンドの解説
②では全てのアーマースタンドのrankの値をあらかじめ0にセットします。
これは、その後のrank付けの際に
・『rank=0』は未だ順位が決まっていないアーマースタンド
・『rank=1or2or3』は既に順位が確定したアーマースタンド
として指定するための準備です。
③では『rank=0のアーマースタンド』をまとめて指定してオペレーションの比較対象としています。
こうすることで system point > @e の比較対象は自動的に『rank=0のアーマースタンド』のうち最も値が大きいものが参照されsystemの値を書き換えることが出来ます。
④ではsystemのpointの値と同じ値を持つアーマースタンドにrankの値を付与しています。
③でrank=0のアーマースタンドのpoint最大値をsystemにコピーしているので、systemのpoint値と等しいアーマースタンドは必然的にrank=0のアーマースタンドのうちpointの値が最も大きいものということになります。
⑤次のpoint比較のためにsystemのpoint値を0(どのアーマースタンドよりも小さい値)としています。
今回はアーマースタンドのpointの値が1~10の間に収まるので0としていますが、値の最小値が不明の場合は
/scoreboard players reset system point
としてsystemのpoint値を消してしまってもOKです。
※上記の構成でも最初の一回目はsystemのpoint値が“無し”の状態で正常に実行されています。
▶『コマンドの使い方』カテゴリTOPへ