【丁寧に解説】Skriptをはじめよう　0：Skriptとは

:::note alert
このシリーズで解説している **Skript** は、**script の誤字ではなく 全くの別物** です。
あらかじめご理解ください。
:::
:::note alert
諸事情により、記事をこれ以降更新することができなくなってしまいました。
今まで投稿した本シリーズの記事はそのまま残しておきますが、新しく記事が追加されることはありません。
:::
:::note warn
この記事はマインクラフトのプラグインである Skript の解説記事ですが、筆者はこのプラグインを触り始めたばかりなので間違った記述がある可能性があります。また、質問に必ず回答できるとは限りません。以上を踏まえたうえでこの記事をお読みください。
:::
【次回】

https://qiita.com/Logtain/items/fa984e97c7e6cc38962c
## はじめに
皆さんこんにちは、ろぐと申します。
最近マイクラサーバー運営を始めたのですが、独自の要素をサーバーに追加するにはやっぱりプラグインの開発が必須なんですよね。
しかし、本格的にプラグインを開発するには Java や IDE の知識が必要など少々ハードルが高い...。
プログラミング初心者でも気軽にプラグインみたいなことができるものってないかなぁ...とネットの海を漂い続け、このプラグインにたどり着きました。

もう知っている方もいるかもしれませんが、Skript というプラグインは**誰でも簡単にプラグインのような機能を作成できるプラグイン**です！
本格的な開発環境を整える必要がなく、知識がない人でも簡単にプラグイン（のようなもの）を作れる...。そんな夢のような能力を持っているのがこのプラグインなのです。

しかし...

**Skript について説明している日本語の記事が少ない！！！**

結構重大な問題ですよね...。英語の記事は充実しているんですが、日本語の記事となるとそれはもう数えるほどしかなくて。
おまけに**記事の内容が古いものが多く、最新のバージョンだと動作しないことがある**のも困ったところ。
そこで「じゃあ自分で記事を書けばええやん！」となり、現在に至ります...ｗ


前置きが長くなってしまいましたが、次からいよいよ Skript について説明していきます。
なるべく分かりやすいように説明していくつもりですので（むしろそうしないと自分が分からなくなる）是非参考にしてください！

:::note warn
特に断りのない限り、これ以降の記事ではOSは Windows 11 Home、サーバーは PaperMC のバージョン 1.21、Skript はバージョン 2.9.0 を使用するものとします。（現時点での最新版）この環境以外での動作は保証できません。
また、このシリーズでは初心者の方にも分かりやすいように砕けた表現を用いたり、一部要素を本来の意味とは異なるものとして説明している箇所があります。
:::
## １．Skript ってなんぞや
「そもそも Skript って何？何ができるの？」という方もいらっしゃると思います。先ほども書きましたが、超簡単に説明すると

**本格的な開発なしでプラグイン（のようなもの）を作れる！**

というものです。本当の意味でのプラグインではないので大規模なシステム開発には不向きですが、それでも気軽にプラグインのような機能を実装できるというのは超魅力的！
さらに、**このプラグインにはアドオンというものがあり**（Skript の機能を拡張できるもの）**これを使えばできることがほぼ無限に広がっちゃうんです！**

...なんだか Skript の回し者みたいになってしまいましたが、それだけこのプラグインはできることが多いんです！さらに具体的にできることを書き出してみると

**・ログイン時やログアウト時のメッセージをカスタマイズできる！**
**・自分だけのオリジナルコマンドを作れる！**
**・Mobの挙動やブロックの設置、破壊などを細かく制御できる！**

などのことができます。特に自分だけのオリジナルコマンドを作れる、というのはかなり魅力的なのではないでしょうか？
本当は他にもたくさんのことができるのですが、あまりに膨大すぎるのでそれを紹介するのは追々...。
# ２．Skript に触れる
では、早速 Skript をダウンロードしていきましょう！まずダウンロードしないと何も始まらないですからね...。
<details><summary> SpigotMC からダウンロード（推奨）</summary>

>１．[こちら](https://www.spigotmc.org/resources/skript.114544/)にアクセスします。
>２．「Download Now」と書いてある、藍色っぽいボタンをクリックします。
>３．ダウンロードが自動で始まります。
※SpigotMC からダウンロードできるのは**最新版のみ**です。それ以外のバージョンが欲しい場合は、公式ホームページからのダウンロードを利用するとよいでしょう。
</details>
<details><summary>公式ホームページからダウンロード</summary>

>１．[こちら](https://skunity.com/downloads)にアクセスします。
>２．右側の「Skript is loaded by default...」と書いてある場所の、一番上にあるやつをクリックします。（ずらっと Skript X.X.X みたいなのが並んでいると思いますが、**一番上にあるものが最新版です**）
※名前に「beta」と書いてあるものは開発段階のものなので、避けるようにしましょう！
>３．ダウンロードが自動で始まります。
</details>
<details><summary>GitHubからダウンロード（上級者向け）</summary>

>１．[こちら](https://github.com/SkriptLang/Skript/releases)にアクセスします。
>２．一番上にある、バージョンの横に「Latest」と緑で書かれているものが最新版です。下にスクロールすればそのほかのバージョンもあります。
※「Pre-release」と黄色で書いてあるものは開発段階のものなので、避けるようにしましょう！
>３．ダウンロードしたいバージョンを選択し、「Assets」と書いてある部分の ```.jar``` という文字が最後に付いた部分をクリックします。
>４．ダウンロードが自動で始まります。
</details>

>※ ▶ が先頭にある文は、クリックすることで中身を開くことができます。

ダウンロードができたら、自分のサーバーに Skript を導入しましょう！他のプラグインと導入方法はまったく同じです。
>１．ダウンロードした ```Skript-X.X.X.jar``` ファイルを、サーバーの「plugins」フォルダに移動させます。
※ダウンロードしたバージョンが 2.8.4 以下だった場合、ファイル名は ```Skript.jar``` です。
>２．サーバーを一度起動もしくは再起動し、「plugins」フォルダの中に「Skript」フォルダが生成されたのを確認できたら導入は完了です！



:::note info
**Q：Bukkit からはダウンロードできないの？**

**A：最新版はダウンロードできません。**
Bukkit にもないことはないのですが、2014年を最後に更新が停止しています。調べてみたところ、この年を境にして Skript の開発者が変わっているようなので、その影響かもしれません。
:::
導入が完了したら、「Skript」フォルダ → 「scripts」フォルダと進んでください。
その中に「-examples」というフォルダがあると思います。中を覗いてみると...

```.sk``` **の拡張子がついているファイルがたくさん！**

実は、この ```.sk``` のついているファイルこそこのプラグインの核と言ってもいいもので、**このファイルにコーディング**（実行する内容を書くこと）**することによって、自分だけの要素を生み出せる**んです！

試しに ```events.sk``` ファイルを開いてみると（ふつうのメモ帳で大丈夫です）
```events.sk
#
# This example listens for players joining and leaving.
# Alters the default message when they do.
#

on join:
    set the join message to "Oh look, %player% joined! :)"

on quit:
    set the quit message to "Oh no, %player% left! :("

#
# This example cancels damage for players if they have a specific permission.
# If they don't, tell them how much damage they took.
#

on damage:
    victim is a player
    if the victim has permission "skript.example.damage":
        cancel the event # Stops the default behaviour - the victim taking damage.
    else:
        send "Ouch! You took %damage% damage." to the victim
        add damage to {damage::%uuid of victim%::taken}
        if the attacker is a player:
            add damage to {damage::%uuid of attacker%::dealt}

（うんたらかんたら...）
```
上記のように、コーディングしたもの（実行する内容を書いたもの）を**スクリプト**と呼びます。
**うへぇ...なんじゃこりゃ...** と思った人は自分だけではないはず...。
でも、よ～く見てください。例えば、上に書いてある
```
on join:
    set the join message to "Oh look, %player% joined! :)"
```
という部分を日本語訳してみると...
```
参加した時：
    設定する 参加メッセージを "見ろよ、%player% が参加したぞ！:)"
```
となります。
参加メッセージとは、プレイヤーがサーバーに参加した時に出るメッセージのことです。デフォルトだと

**「○○がゲームに参加しました」**

だと思いますが、上記の部分のスクリプトはこれを変更するものだったというわけです！
すると
```
on quit:
    set the quit message to "Oh no, %player% left! :("
```
も、「サーバーから退出した時のメッセージを変更するやつなんだなぁ」と分かってきます。

このように、一見 Skript のスクリプトは難しく見えますが、その本質は**誰でも読み書きできるレベルの英文**です。
どうですか？何だか作れる気がしてきませんか？

:::note warn
さっきから Skript とスクリプトが交互に出てきてややこしいですが、両者は明確に異なるものです。
**Skript はプラグインそのもののこと**を、
**スクリプトはコーディングした文章のこと**（ ```.sk``` ファイルの中身）を指します。
「Skript のスクリプトを書く」といった使い方です。
（とはいえ、記事によっては別の呼び方をしていることもあります。お手数ですがこのあたりは臨機応変にお願いします！）
:::
:::note warn
「スクリプトを書く」「コーディングする」「ソースコードを書く」「プログラムコードを書く」は、**このシリーズではすべて同じ意味**です。
:::
## ３．フォルダやファイルのハイフンについて
「なるほど！さっきのは参加メッセージを変えるやつだったのか！早速サーバーにログインしてみよう！」と、意気揚々とログインした人もいるかと思います。（自分もそうでした）
しかし、いざログインしてみると

**「あれ？メッセージ変わってない...。バグった？」**

そうなんです。スクリプトに書いてあったから変わるのかと思いきや、メッセージは変わらず元のままなんです...。
ここで、勘のいい方なら気づいたかと思いますが

**「そういえば『-examples』ってフォルダ、なんでハイフンが最初に...？」**

実は ```.sk``` ファイルは、**名前のはじめに -（ハイフン）が付けられたフォルダの中に入っていたり、そもそも**  ```.sk``` **ファイルの名前のはじめにハイフンが付いていると無効化される**という特徴があります。例えば

・「-test」フォルダの中にある ```file.sk```
・「test」フォルダの中にある ```-file.sk```
・「-test」フォルダの中にある ```-file.sk```

これらはすべて無効化されます。無効化されたスクリプトは読み込まれません。
先ほどの ```events.sk``` ファイルも「-examples」フォルダの中に入っていたので読み込まれなかった、というわけです！
```event.sk``` ファイルを「scripts」フォルダに移動させれば（つまり『-examples』フォルダと同じ階層に置けば）ちゃんとメッセージが変わると思います！

:::note
**Q：**```on join: ~``` **スクリプトの中にあった <font color="skyblue">```%player%```</font> って何？**

**A：<font color="skyblue">スクリプト実行者の名前を代入するもの</font>です。**
```%``` で挟まれている ```player``` は **エクスプレッション**（英語表記：**Expression** 、変数のようなものです）といい、ここにはスクリプト実行者の名前（ID）が入ります。```on join: ~``` はプレイヤーが参加した時に発動するスクリプトなので実行者は参加したプレイヤーとなり、結果的にここには参加したプレイヤーの名前が代入される...ということです。
先ほど参加メッセージが変わるか確認した方は、この部分が自分の名前に変わっていることに気付いたと思います。
**本来エクスプレッションはメッセージ内では使えませんが、これを ```%``` で挟むことで、メッセージ内でも使えるようになる**のです。（エクスプレッションや変数、メッセージについては後の記事で詳しく解説します）
:::
今回は以上になります。次回はスクリプト作成の前準備です！

【次回】

https://qiita.com/Logtain/items/fa984e97c7e6cc38962c