マルチプレイなら『シン・VPS』がおすすめ!

【スコアボードコマンド】operationで四則演算【マイクラ】

【スコアボードコマンド】operationで四則演算【マイクラ】

この記事では、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などを使用すると、挙動が変わりますので必要に応じて活用しましょう。

この記事は以上になります。

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】