※本サイトはPRリンクを含みます

【マイクラ統合版】/scoreboardと/executeコマンドで値が大きい順に順位を付ける方法【コマンドの使い方】

Minecraft BE(統合版)のscoreboardコマンドを使用して、あるスコアの値を比較して順位付けを行う方法です。

前提となるscoreboard及びexecuteコマンドの使い方はこちらから確認してください。
/scoreboardコマンドの使い方
/executeコマンドの使い方

スポンサーリンク

/scoreboardと/executeコマンドで値を参照して順位を付ける

まずは前提となる状況やスコアを仮に定義します。
実際には環境に合わせてカスタムして下さい。

ここでは対象となるエンティティとして『armor_stand』を3体用意し、それぞれに『point』スコアをランダム(1~10)で付与、このpointの値が大きい順に『rank』スコアを1→2→3と付けるコマンドとします。

※pointスコアの作成、値の付与に関する構文は割愛します。

順位の判断基準となるスコア名point
順位スコア名rank
作業用スコアcount
順位付けのルールpointが大きい順

順位を付けるための/scoreboardと/executeコマンド

1,/scoreboardコマンドの準備

/scoreboard objectives add rank dummy

スコアボード「rank」を作成する

/scoreboard players set @e[type=armor_stand] rank 0

全てのアーマースタンドrank0設定する

③scoreboard objectives add count dummy

スコアボード「count」を作成する

④scoreboard players set system count 1

system(仮エンティティ)countスコアを1設定する

※アーマースタンド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 operation @s rank = system count

実行者をアーマースタンドとして実行者のpointの値systemのpointの値等しいときに実行者のranksystemのcount等しい値に書き換える

⑦チェーン:条件付き
/scoreboard players add system count 1

systemのcountの値1を足す

⑧チェーン:条件付き
/scoreboard players set system point 0

systemのpointの値0にする

※順位付けが終わってrank=0(順位計算前の対象)がいなくなれば自動的にそれ以降のコマンドもすべて無効となる。

systemとは…
scoreboardコマンドの付与や参照の対象として、エンティティとしては存在しない空ネームを指定することが出来ます。
ここではsystemという空ネームを用いてスコアの値を保存や比較することに用いています。

値を参照して順位を付けるコマンドの解説

②では全てのアーマースタンドのrankの値をあらかじめ0にセットします。
これは、その後のrank付けの際に
・『rank=0』は未だ順位が決まっていないアーマースタンド
・『rank=1or2or3』は既に順位が確定したアーマースタンド
として指定するための準備です。

⑤では『rank=0のアーマースタンド』をまとめて指定してオペレーションの比較対象としています。
こうすることで system point > @e の比較対象は自動的に『rank=0のアーマースタンド』のうち最も値が大きいものが参照されsystemの値を書き換えることが出来ます。

⑥ではsystemのpointの値と同じ値(rank=0のうち最大の値)を持つアーマースタンドにrankの値を付与しています。
rankの値はsystemのcountの値を参照してコピーされます。

⑦では順位付けが進むたびにsystemのcountに1足すことで、次の順位の準備となります。

⑧次のpoint比較のためにsystemのpoint値を0(どのアーマースタンドよりも小さい値)としています。
今回はアーマースタンドのpointの値が1~10の間に収まるようにしているので0としていますが、値の最小値が不明の場合は
/scoreboard players reset system point
としてsystemのpoint値を消してしまってもOKです。
※上記の構成でも最初の一回目はsystemのpoint値が“無し”の状態で正常に実行されています。