Minecraft Skript 入門編 Part.1

#はじめに
はじめまして。
Monsterと申します。

わたくしは、MinecraftJavaEditionでミニゲームサーバーを運営しているのですが、ミニゲームサーバーにはやっぱりPluginが必要なんです・・・

ですが、募集しても集まりが悪かったりする都合でPluginを勉強しようと思ってたのですが（てか、勉強した）、はっきり言います・・・

~~**無理でしたww**（まだあきらめてはいない）~~
※作れるようになりました

まあ、難しいというのが理由です。
そんな時、SkriptというPluginを見つけました。

このPluginは簡単に言えば、Minecraft内でPluginが作れるというものです。

また、このSkriptは中学生レベルの英語さえ分かっていれば簡単につくれます。

#今後の記事一覧
|記事タイトル(リンク)|概要|難易度(5段階)|
|:-------------------:|:------------------|:------------------:|
|[入門編１](https://qiita.com/meoto2408/items/a44335d24d4ea3e75b73)|環境設定と簡単なコード紹介。|★☆☆☆☆|
|[入門編２](https://qiita.com/meoto2408/items/f6d856f878f755caa25b)|実用的な簡単なコード紹介|★☆☆☆☆|
|[入門編３](https://qiita.com/meoto2408/items/dc9574d0f9653b261bf7)|ループについてとカスタムコマンドについて|★★☆☆☆|
|[入門編４](https://qiita.com/meoto2408/items/ca6cee3c48c65a1fd5ea)|Skriptを勉強するうえで役に立つサイト一覧|-|
|[入門編５](https://qiita.com/meoto2408/items/b3971c115bf91d3262e2)|空間にプレイヤーがいることを確認する|★★☆☆☆|
|[入門編６](https://qiita.com/meoto2408/items/77c9bf18eecd1544e91e)|SkriptのFAQ|-|
|[基礎編１](https://qiita.com/meoto2408/items/3d507c1d1417b73e641b)|変数について紹介|★★★☆☆|
|[基礎編２](https://qiita.com/meoto2408/items/3a822b4caaf8f87e1e2a)|実用的なカスタムコマンド紹介|★★☆☆☆|
|[基礎編３](https://qiita.com/meoto2408/items/d50f645ae0003e241b6b)|ダメージについて紹介|★★☆☆☆|
|[基礎編４](https://qiita.com/meoto2408/items/938a1035998ca80ee59e)|アスレチック鯖に便利なSkript|★★★☆☆|
|[基礎編５](https://qiita.com/meoto2408/items/b3971c115bf91d3262e2)|空間にプレイヤーがいることを確認するSkript|★☆☆☆☆|
|[応用編１](https://qiita.com/meoto2408/items/46b76446c4b1ffc8a511)|カウントダウンコマンドについて紹介|★★★☆☆|
|[応用編２](https://qiita.com/meoto2408/items/841eec0ae4ffb09899f3)|奈落落下時に自動テレポートするSkript|★★☆☆☆|
|[応用編３](https://qiita.com/meoto2408/items/09688a46aeb4cefe2985)|タイマーSkript|★★★☆☆|
|[応用編４](https://qiita.com/meoto2408/items/9feca3ab34e986da8054)|簡易ゲームモード変更コマンド|★★☆☆☆|
|[応用編５](https://qiita.com/meoto2408/items/ba5ff3aa2bdb1127f37c)|特定のブロックの数を調査するSkript|★★★☆☆|
|[応用編６](https://qiita.com/meoto2408/items/dc3b0be38acd85c9e94d)|チェストGUIを使ったメニューシステムを紹介|★★☆☆☆|
|[応用編７](https://qiita.com/meoto2408/items/5b96e179b6e6d214f08f)|コマンドに便利なシステムを紹介|★★☆☆☆|

#読む上での注意
入門編ではSkriptの常識であろう内容を書いています。
なのでほかのサイトや動画ですでに解説されている場合がございますのでご注意ください。

#導入方法
[コチラ](https://docs.skunity.com/downloads/)からお好きなバージョンをお選びください。
ですが、betaと付くバージョンは開発段階のものなので、バグが多々ありますので正式リリースのものをお勧めします。
わたくしの場合ですと、`2.3.5`を使っていますので[Skript bensku-2.3.5](https://github.com/SkriptLang/Skript/releases/download/2.3.5/Skript.jar)を使っていることになります。

ダウンロードしましたら、ほかのPluginと同じようにPluginフォルダに入れてください。

鯖を起動すればSkriptという名前のフォルダが生成されるはずです。（この時失敗した場合はバージョンがあっていなかったりという初期的なミスでしょう）

そして、Skript（フォルダ）→scripts（フォルダ）と進むとその中に`.sk`で終わるファイルがあると思います。
そのほとんどがはじめに`-`がついていると思います。
実はSKファイルは`-`を付けるとそのファイルを無効化できるのです。

まあ、そんなことは置いといてコードを書いていきましょう・・・

と言いたいのですが、あと１工程だけしましょう。
（勝手に生成されたものは初心者であれば理解できないかもなので、消すか別の場所に置いておきましょう。）

#環境を整える
ダウンロードはしたけど、これだけではコードは書けません。
コーディングするにはコーディング環境を整える必要があります。

基本的にはPCに備え付けられているテキストエディタなどでも書けるのですが不便が悪いので今回は`Notepad++`というテキストエディタを使います。

まずは、[コチラ](http://notepad-plus-plus.org/download/v6.7.5.html)からNotepad++の最新版を入手してください。

ダウンロードができましたら、Notepad++を実行し、
Settings → Preferences・・・をクリックして、Localizationから日本語を選択してください。（英語でもいけるぜ！！って方はそのままでもいいですが・・・ｗ）

Notepad++で使用されるSkript用のユーザー定義言語(UDL)を[コチラ](https://forums.skunity.com/resources/dark-vs-light-notepad-udl.156/)から入手してください。保存場所は、Notepad++.exeと同じところにあるとわかりやすいかと思われます。
※この時ファイルを解凍することを忘れないでください。

あとは、Notepad++を実行し、
言語 → 言語を定義・・・をクリックし、インポート・・・をクリックするとUDLとなるファイルを指定するウィンドウが出るので、１つ前で入手したSkript.xmlを指定してください。

~~Notepad++のバグなのかUDLのバグなのか、ブラック版に変えると表示がおかしくなる（わたくしの環境だけかも）のでホワイト版をお勧めします。~~
Notepad++の環境設定より背景色を黒に変えると問題ありません。

きっとこれでコーディングすると文字に色がつくと思います。

それではこれでやっとコーディングできます。

#簡単なコードを書いてみよう
まず先ほどの`scripts`というフォルダの中に`test`コードということで`test.sk`というものを作りましょう。

Mac版も多分同じだと思いますが（わたくしはWindows）、txtファイルを作ってその名前を変更時に`test.sk`とすれば構いません。
まあ、`test`の部分はなんでもいいんですがね・・・

```
イベント:
(tab)条件
(tab)実行すること
```
基本的な形はこれです。
ちなみに`(tab)`は、半角スペース４つか、TABキーワンクリックにしてください。

これはインデントと呼ばれるものです。`:`を書いたら次の行でインデントしないといけないと考えてください。

先ほどは`(tab)`と書きましたが、ここからは書きませんのでご注意ください。
###ブロック破壊を禁止
```:test.sk 
on break:
    player do not have permission "skript.admin"
    cancel event
```
これで１つの機能が完成しました。
解説すれば、
１行目の`on break:`はブロックが壊れたとき・・・というイベントです。
２行目の`player do not have permission "skript.admin"`は、プレイヤーが`skript.admin`というパーミッションをもっていない・・・という条件です。
３行目の`cancel event`はそのイベントをキャンセルしまっせ・・・という実行内容です。

要約するなら、
「権限を持っている人以外のブロック破壊を禁止」というものです。

どうですか？
ただの**英文**でしょう？ｗｗ

あ、ちなみに`cancel event`は通常起こるはずのイベントを中止するといったものです。

ちなみに条件を書かなければ、誰も壊せなくなります。

###ブロック設置を禁止
```:test.sk 
on place:
    player do not have permission "skript.admin"
    cancel event
```
まあ、イベントを変えただけなので、要約しか書きませんが、
「権限を持っている人以外のブロック設置を禁止」というものです。

まあ、このまま書いていってもいいのですが、はっきり言ってきりがありませんので、[コチラ](https://skriptlang.github.io/Skript/events.html)をご覧ください。

これは、Skriptのイベント・条件・実行する内容などなど・・・いろんなことを書いたページです。

実は[コチラ](https://forums.skunity.com/)のほうがいいのですが、見やすさを考えると前者のほうがいいかと・・・

#注意
コード内に日本語があるとたまに文字化けすることがあります。
その時は文字コードを`UTF-8`に変更してください。

文字コードの変更方法はエディタによって違うので各自調べてください。

# 追記
permissionについて質問があったため書いておきます。
`skript.admin`というのはPermissionというシステムです。

本日使用した`player do not have permission "skript.admin"`はプレイヤーが`skript.admin`という権限を持っているかどうかを確認しています。
permissionはLuckPermsなどの権限付与プラグインを使用して付与することをお勧めします。

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