こんにちは。先日Twitterにてあるツイートをしたところ、わりと反響があったので紹介します。
そのツイートがこちら。
僕はこれで「バズった」と表現するのですが、このバズった動画の
仕組みを本日は解説したいと思います。
準備
まずこちらでスコアを準備します。
一つ目は人参棒の右クリックを検知するスコア
二つ目はダミースコアです。
ここから実際にファンクション(またはコマブロ)でコマンドを打っていきます。
コマンド
じゃーーーーーん!
え?これだけかって?
はい、これだけです。
では解説していきましょう。
解説
まず一つ目
scoreboard players add @a[scores={nagaoshi=1..}] nagaoshi_2 1
これは
「nagaoshiスコアが1以上のプレイヤーのnagaoshi_2スコアを1追加する」
という意味です。
言い換えると
「人参棒を右クリックしたらnagaoshiが1以上になるので、nagaoshi_2のダミースコアの値を1追加する」
ということです。
ということは、このコマンドが実行された瞬間のスコアはこうなります。
nagaoshi=1
nagaoshi_2=1
次!
execute as @a[scores={nagaoshi=2..}] run say 長押し中...
これは
「nagaoshiスコアが2以上のプレイヤーに『長押し中…』と発言させる」
という意味です。
nagaoshiスコアが2以上というのはあとの説明でわかります。
この時点のスコア構成
nagaoshi=1
nagaoshi_2=1
scoreboard players set @a[scores={nagaoshi=2..}] nagaoshi_2 0
これは
「nagaoshiが2以上なら、nagaoshi_2の値を0にセットする」
という意味です。
この時点のスコア構成
nagaoshi=1
nagaoshi_2=1
scoreboard players set @a[scores={nagasohi=2..}] naoashi 1
これは
「nagaoshiスコアが2以上ならnagaoshiスコアを1にセットする」
これが結構肝心で、現時点でのスコア構成は
nagaoshi=1
nagaoshi_2=1
なので、このコマンドは反応しませんが、人参棒を長押ししていると
nagaoshiスコアは2になります。
nagaoshiスコアが2になるまで何度もコマンドがループしていることになるので
一番初めのコマンド
scoreboard players add @a[scores={nagaoshi=1..}] nagaoshi_2 1
で、nagaoshi_2スコアが1ずつ増えていっていることになります。
そして、nagaoshiが2になった瞬間、最初のコマンド以外も反応してきます。
execute as @a[scores={nagaoshi=2..}] run say 長押し中...
scoreboard players set @a[scores={nagaoshi=2..}] nagaoshi_2 0
scoreboard players set @a[scores={nagasohi=2..}] nagaoshi 1
上の二つ目のコマンドが発動する時点では、nagasohi_2のスコアが4にまで増えています。
そして、nagaoshiが2になるときにnagaoshi_2が0になります。
つまり、人参棒を右クリックしている間は「nagaoshi_2が5以上増えない」というわけです。
これでなんとなくわかったと思いますが、この右クリック長押し検知は
「nagaoshi_2が5以上になる瞬間を検知している」わけです。
では、右クリックをやめた瞬間どうなるか
nagaoshiは2にならず1のまま
↓
nagaoshiが1以上で、nagaoshi_2がずっと増えていく。
↓
やがて、nagaoshi_2が5に達する。
↓
最後のコマンド
execute as @a[scores={nagaoshi=5}] run say 長押しキャンセル
が実行される。
以上がこの機構の仕組みになります。
この機構実は欠点があります。
それは、長押しじゃなくて連打でも検知されちゃうことです。
まあこれはどうにもなりません。この仕様のせいで若干使い勝手が悪くなりますが
何かに使えるかもしれないと思った方は絶対このブログとTwitterをフォローしてください!
コマンドコピペ用
scoreboard players add @a[scores={nagaoshi=1..}] nagaoshi_2 1
execute as @a[scores={nagaoshi=2..}] run say 長押し中...
scoreboard players set @a[scores={nagaoshi=2..}] nagaoshi_2 0
scoreboard players set @a[scores={nagasohi=2..}] nagaoshi 1
execute as @a[scores={nagaoshi=5}] run say 長押しキャンセル
Follow me