triggerコマンドについて使い道を考える

triggerコマンドとは

スコアボードの値を「OP権限」を持たないプレイヤーが変更できるコマンドです。

tellrawなどのクリックイベントで使われることがほとんどですね。

triggerコマンドはどうやって使うの?

オブジェクトを作る

まずはオブジェクトを用意しましょう。

scoreboard objectives add SAMPLE trigger "サンプル"

実はトリガーで変更できるスコアボードはtriggerタイプのオブジェクトじゃないと使えません。

トリガー有効化

次に、トリガーを引けるようにするために有効化する必要があります。

有効化されていない場合は、トリガーコマンドは失敗します。

scoreboard players enable @p SAMPLE

@pの部分はトリガーを引かせたいプレイヤーを指定します。

トリガーを引く

# プレイヤーの値を1にする
trigger SAMPLE set 1

# プレイヤーの値を1つ足す
trigger SAMPLE add 1

上のような感じで、コマンドを実行すればプレイヤーの値を変更できます。

ただし、普通はプレイヤーがトリガーコマンドを直接実行することはないでしょう。

値を変更するのはスコアボードコマンドでもOK

スコアボードを変更したいだけなら、普通のスコアボードと同じように使えます。

scoreboard players set @p SAMPLE 10

テキストチャットから使う

さて、トリガーを引かせる主な方法はテキストチャットなどで、プレイヤーがクリックさせて実行させます。

tellraw @p {"text":"クリック","clickEvent":{"action":"run_command","value":"/trigger SAMPLE add 1"}}

ちょっと読みにくいので、整形しますね。

tellraw @p 
{
  "text": "クリック",
  "clickEvent": {
    "action": "run_command",
    "value": "/trigger SAMPLE add 1"
  }
}

clickEventでactionvalueを指定しています。

さらにactionではrun_command(コマンドを実行する)、

valueでは/trigger SAMPLE add 1(クリックした時に実行するコマンド)、

をそれぞれ指定します。

これを実行すると、「クリック」とテキストチャットに表示されるので、それをクリックすると/trigger SAMPLE add 1が実行されます。

run_commandで指定するコマンドはスラッシュが必要

functionファイルとかでは/が先頭に無しでコマンドが実行できます。ですが、run_commandのvalueでは必ず/が先頭に必要です。

よく忘れてしまうので注意しましょう。

トリガーコマンドは1回しか実行されない

ここで、トリガーコマンドの特徴です。

トリガーコマンドは有効化された後1回だけしか実行できません。

つまり、一回トリガーを引いたら戻せない。これがトリガーコマンドで最も便利な部分です。

テキストチャットなどは一度表示しちゃうと何度でも、チャットを開いてクリックできちゃいますから、それを防ぐための処理が全部なくなるわけです。

再度、トリガーを引かせる場合は、有効化をもう一度やればOKです。

1度、有効化したトリガーは戻せない?

トリガーを有効化してしまったら、無効化することはできないようです。

どうしても無効化したい場合は、以下でなかったことにしましょう。

execute as @p run trigger SAMPLE add 0

まとめ

トリガーコマンドは、

  • triggerコマンド専用のスコアボードが必要
  • 有効化しないと使えない
  • 有効化したら1度だけ実行できる

という特徴があります。

プレイヤーにテキストなどで選択させたい場合で、一度決めさせたら一定期間はロックしたいときに使うといいでしょう。