この記事では、Minecraft Java Edition(バージョン1.18.1)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
scoreboardの値で計算をしたいマインクラフター
「とあるスコアボードの値から、別のスコアボードの値だけ減らした値を出力するようにしたい。四則演算とかってできるのかな?」
こんな疑問を解決します!
- operationで四則演算ができる
- スコアボードの値は比較も可能
- 計算、比較以外にできること
こんにちは! マインクラフターのなつめ(@natsume_717b)です。
マイクラ歴は5年程で、最近は脱出マップを配布・制作しています!
→配布マップ・ダウンロードページ
この記事ではスコアボードの値で計算する方法を紹介します。
また、少し改変するだけで値の比較、入れ替えなども行えるので、その解説もしています。
スコアボードの値で計算ができるようになると、チーム全体の得点を導き出すなどといったことが可能になります。
初めは若干難しく感じますが、何回か練習するだけで慣れるかと思います。
その程度の難易度です。
それでは、さっそく計算するための方法を見ていきましょう!
operationで四則演算ができる
scoreboardコマンドの値を使って、四則演算することは可能です。
具体的には、足し算、引き算、掛け算、割り算、割り算のあまりの5つを出力することができます。
四則演算するためには、scoreboardコマンドのoperationという項目を使い、以下の表にある記号を指定して、どの四則演算をするのかを決定します。
記号(文字列) | 行われる計算 |
---|---|
+= | 足し算 |
-= | 引き算 |
*= | 掛け算 |
/= | 割り算(余りは無視する) |
%= | 割り算をした際の余りだけを、値として出力 |
実際のコマンドに書き起こして、どのように使うのか見ていきましょう。
今回はAというスコアボードと、Bというスコアボードで例を挙げていきます。
それぞれ72と6の値を持っているものとします。
1:+=(足し算)
/scoreboard players operation @p A += @p B
上記のコマンドを実行すると、「@p A」と「@p B」を足し算します。
要するに、コマンドの実行場所から最も近くにいるプレイヤーが持っているAとBの値を足した値を出力します。
出力される値としては、単純に72+6を行うので、78ですね。
この時出力される場所は、コマンド文の先頭に近い方にあるスコアボードですので、Aの値が変更されます。
Bの値を変更したい場合は、AとBの位置を入れ替えることでBの値を変更するようにできます。
別のターゲットセレクターにした場合
上記のコマンドではターゲットセレクターを@pにして計算しやすい例を出しましたが、@aを使うと少しだけ複雑になります。
例えば、@a Bと指定したとします。
(要するに全プレイヤーが持っているBの値を参照するようになりました)
/scoreboard players operation @p A += @a B
これを実行すると、Bというスコアボードを持っているプレイヤーが2人いた場合は、その2人のBの合計値を足すことになります。
その2人がどちらもBの値が6だとすれば、合計して12。
それを最も近くにいるプレイヤーのAの値を足しますので、84という値が出力されることになります。
もしも
/scoreboard players operation @a A += @p B
と@aと@pの位置が逆になっていると、全てのプレイヤーのAという値に最も近くにいるプレイヤーのBという値を足します。
なので、全てのプレイヤーのAという値が78になります。
どちらも@pだったときは、最も近くにいるプレイヤーのAの値だけが変更されただけでした。
なので、状況に応じて正しいターゲットセレクターを選ぶ必要があります。
2:-=(引き算)
/scoreboard players operation @p A -= @p B
基本的には足し算した時と変わりません。
先にあるスコアボードの値から、-=の場合はBの値を減らします。
なので、72-6が行われて、66という値が出力されます。
仮にAとBを入れ替えて実行すれば、6-72の計算が行われるので-66がBの値に出力されます。
マイナスの値はマイナスの値として、きちんと出力されます。
また、後ろにあるスコアボードのターゲットセレクターを@aにした場合は、Bの値を全て足して、それからA-Bの計算を行います。
なので、2人のプレイヤーが共に6という値を持っていたら、72-12が行われて60という値を出力することとなります。
3:*=(掛け算)
/scoreboard players operation @p A *= @p B
*=を使うことで、掛け算を行うことができます。
今回の場合は、72×6を行うので、432という値が出力されます。
足し算の時と同様に、計算の順序は気にしなくてよいので、出力させたいスコアボードを先に持ってきましょう。
今回はAに432という値が出力されますが、Bに出力させたい場合には先にBを持ってくればOKです。
後ろのスコアボードに@aを使った時の挙動
後ろに持ってくるスコアボードのターゲットセレクターを@aにした場合、足し算・引き算の時とは違う挙動を起こします。
/scoreboard players operation @p A *= @a B
足し算の時は6を人数分足していましたので、2人いた場合には12という値をAのスコアボードに足していました。
引き算の場合は、12という数字を出した後に引き算しましたね。
しかし、*=の場合は6×6をします。
(6×6をするのは2人いる場合なので、3人いたとしたら6×6×6を行います)
なのでプレイヤーが2人いた場合には、Aの72という値と6×6の答えである36をかけて、2592という値がAに出力されることとなります。
4:/=(割り算の答え)
/scoreboard players operation @p A /= @p B
/=を使うことで、割り算をすることができます。
ただし、出力される値はその答えだけです。あまりとして残った数字は無視されます。
なので、上記のコマンドの場合には72÷6を行うので、12という値がAに出力されます。
割り算で後ろのスコアボードのターゲットセレクターに@aを使用した場合
/=で@aを使用した場合、まず掛け算を行います。
例えば、2人のプレイヤーがいた場合に以下のコマンドを実行すると、2という値が出力されます。
/scoreboard players operation @p A /= @a B
まず、全てのプレイヤーのBを掛け算するので6×6で36という数字が出てきます。
その後にAの値を36で割るので、72÷36が計算されます。
そうして、2という値が出てきます。
引き算の時と同様に、指示している計算とは異なる方法でBの値を求めるので、気をつけましょう。
5:%=(割り算の余りを値として出力)
/scoreboard players operation @p A %= @p B
計算方法としては割り算の時と変わりませんが、値として出力されるのは、あまりとして算出された数字になります。
上記のコマンドの場合、72÷6=12なので、あまりは0です。
つまるところ、Aの値は0に変更されます。
@aを使用して、全員のBの値を参照する場合は掛け算が行われますので、2人いた場合には6×6の答えである36を使用します。
72÷36=2で、あまりは存在しないので同様に0という値をたたき出しますが、計算過程が異なるので、しっかりと使い分けましょう。
スコアボードの値は比較も可能
スコアボードの値を使って四則演算を行いましたが、実は2つの値を比較することも可能です。
記号(文字列) | 意味 |
---|---|
< | <の後ろにあるスコアボードの値が<の前にあるスコアボードの値よりも小さい場合、前にあるスコアボードの値を後ろにあるスコアボードの値と同じにする。 |
> | >の後ろにあるスコアボードの値が>の前にあるスコアボードの値よりも大きい時、>の前にあるスコアボードの値を後ろにあるスコアボードの値と同じにする。 |
実際にコマンドに書き起こしてみると、以下のようになります。
/scoreboard players operation @p A < @p B
Aが72、Bが6だとして上記のコマンドを実行した場合は、後ろにあるBの値がAよりも小さければAの値はBと同じになります。
なので、Aの値は72から6に変更されるということですね。
Aが6、Bが72と逆だった場合は、何も起きません。
Aが6のまんまで保持されます。
>の場合でも同様の使い方がされます。
2つの値を比べて、その記号として正しくなければ値が変更され、正しい場合にはそのままの値が保持され続けます。
計算、比較以外にできること
四則演算、比較以外にできることとして、値の入れ替えと前者の値を後者の値と同じにすることができます。
それぞれは以下の文字列で指示することができます。
記号(文字列) | 意味 |
---|---|
>< | 前者と後者のスコアボードの値を入れ替える |
= | 前者のスコアボードの値を後者の値と同じにする |
使い方としては以下の通りです。
/scoreboard players operation @p A >< @p B
/scoreboard players operation @p A = @p B
上記のコマンドを実行すれば、それぞれAとBのスコアボードの値を入れ替えたり、Aの値をBの値と同じにすることができます。
値の入れ替えで有能なテクニックとしては、dummyのスコアボードを用意して入れ替えることで、一時的に値を保存しておくということが可能です。
(必要になった時に再び入れ替えれば、取り出すことが可能です)
まとめ
というわけで、今回のまとめです。
- スコアボードの値で四則演算や比較、値の操作をするときは、operationを使用します。
- 基本的には前者のスコアボードの値が変更されます。
(><のみどちらのスコアボードも値が変更される) - ターゲットセレクターで複数人を指示する@aなどを使用すると、挙動が変わりますので必要に応じて活用しましょう。
この記事は以上になります。