Minecraft Skript 応用編 Part.2 VoidSpawn

#VoidSpawnとは・・・
VoidSpawnというPluginをご存知でしょうか？
単純に言えば、奈落に落ちると設定したポイントにテレポートするというものです。

それをSkriptで書いてみようと思います。

#とにかくイベントを考える・・・
まず、問題となるのはイベントです。
奈落に落ちたらというPluginは存在しません。。。

が、奈落に落ちたときのダメージを調べることは可能です。

ですが、これだと、もしDamageをキャンセルしてしまうコードを書いていたら動かない可能性が考えられます。

なので、今回は、常にプレイヤーの座標を調べてみましょう。

#じゃあ、書いてみる・・・
```ruby:voidspawn.sk
every tick:
    loop all players:
        if {%loop-player's world%.voidspawn.status} is true:
            if loop-player's y-coordinate is less than 1:
                teleport loop-player to {%loop-player's world%.voidspawn.point}

command /vssk <text>:
    trigger:
        if arg-1 is "set":
            set {%player's world%.voidspawn.status} to true
            set {%player's world%.voidspawn.point} to location of player
            send "&5VoidSpawn.sk の座標を設定しました。" to player
            stop
        if arg-1 is "remove":
            delete {%player's world%.voidspawn.status}
            delete {%player's world%.voidspawn.point}
            send "&5あなたのいる世界のVoidSpawn.sk を初期設定にしました。" to player
            stop
        if arg-1 is "tp":
            if {%player's world%.voidspawn.status} is true:
                teleport player to {%player's world%.voidspawn.point} 
                stop
        else:
            send "&cそのようなコマンドは存在しません。" to player
```
#解説
まず主となる部分を解説していこう。

```ruby:voidspawn.sk
every tick:
    loop all players:
        if {%loop-player's world%.voidspawn.status} is true:
            if loop-player's y-coordinate is less than 1:
                teleport loop-player to {%loop-player's world%.voidspawn.point}
```
`every tick`というのは１チックごとに常に起こるイベントです。
これには起こす人というのはいなく、Skript側が勝手に起こしてくれるイベントです。

`loop all players`ですべてのプレイヤーをループし、`if {%loop-player's world%.voidspawn.status} is true:`で各プレイヤーがいるワールドのVoidSpawn.skの設定（変数）がどうなっているのかを確認しています。

もし設定（変数）が`True`ならばと書いているので、その場合`if loop-player's y-coordinate is less than 1:`で各プレイヤーのY座標をチェックします。
`y-coordinate`でY座標を取得できます。（`y`を`x`や`z`に変えたら同様にX座標やZ座標も取得できます。）
そしてY座標が`less than 1`なので１よりも小さい→０以下であれば・・・というコードになります。

あとは`teleport loop-player to {%loop-player's world%.voidspawn.point}`で設定した所定の位置にテレポートする・・・といったコードになるわけです。

それではVoidSpawn.skを使用するためのコマンドを解説していこう。
#まず`/vssk set`というコマンドについて・・・

```ruby:voidspawn.sk
command /vssk <text>:
    trigger:
        if arg-1 is "set":
            set {%player's world%.voidspawn.status} to true
            set {%player's world%.voidspawn.point} to location of player
            send "&5VoidSpawn.sk の座標を設定しました。" to player
            stop
        if arg-1 is "remove":
            delete {%player's world%.voidspawn.status}
            delete {%player's world%.voidspawn.point}
            send "&5あなたのいる世界のVoidSpawn.sk を初期設定にしました。" to player
            stop
        if arg-1 is "tp":
            if {%player's world%.voidspawn.status} is true:
                teleport player to {%player's world%.voidspawn.point} 
                stop
        else:
            send "&cそのようなコマンドは存在しません。" to player
```
今回コマンドは`/vssk`というものにしました。（※意味はVoidSpawn SKript）
まず`if arg-1 is "set":`で`/vssk set`というコマンドを実行したらというコードになります。
その場合`{%player's world%.voidspawn.status}`というそのワールドのVoidSpawnを有効かどうかを確認する際に用いる変数を`set {%player's world%.voidspawn.status} to true`で有効にします。

それと同時にプレイヤーがいる座標を`set {%player's world%.voidspawn.point} to location of player`で変数に保存します。
あとはメッセージを流すといった形で`/vssk set`の解説は終了となります。

#`/vssk remove`というコマンドについて・・・
これは単純に変数である`{%player's world%.voidspawn.status}`と`{%player's world%.voidspawn.point}`を`delete`で消しただけです。
以前にも[コチラ](https://qiita.com/meoto2408/items/3d507c1d1417b73e641b)でも解説した通り`delete {A}`という形で変数を削除することができます。

#`/vssk tp`というコマンドについて・・・
`if {%player's world%.voidspawn.status} is true:`でプレイヤーがいる世界のVoidSpawn設定を確認します。
もし有効になっていたら`teleport player to {%player's world%.voidspawn.point}`でテレポートするといったコードになります。

#最後に・・・
どうでしたか？
中にはVoidSpawn（plugin）を入れたほうが速いなどと思った方もいるのでは？

まあ、それは否定しないけど、例えばクリエイティブのユーザー、OPのユーザーはVoidSpawnでTPされないようにしたいとか思ったときにSkriptができたら同じものを作れるよ・・・といったコードです。

もしかしたらもっと最善の策があったかもなんで見つけたら教えてほしいな・・・とか思ってたりしてます。

次は[コチラ](https://qiita.com/meoto2408/items/09688a46aeb4cefe2985)

前は[コチラ](https://qiita.com/meoto2408/items/46b76446c4b1ffc8a511)