[BDSX]簡単なプラグイン作成をしてみよう


# はじめに

前回の続きみたいなもんです。bdsxは入ってる前提なので入ってない方は前回の記事どうぞ。

前回（構築編）↓↓

https://qiita.com/NikkuY3/items/3f63589ce0a3f811c7e6

初心者が書いたので正しい表現じゃないかもだけどご了承ください。

## 今回は？
はい、今回はプラグインを作ってみようという感じです。
読者「え？むずそう。ブラウザバック...」
となりそうですが、なるべくコピペで要所要所解説といった感じでできるだけ簡単にできればなと思います。
本来であれば一個ずつ解説のほうが(理解度UPするのに)いいとは思いますが、
長くなるし筆者の知識怪しいし難しいし...

はい、いきます。

# プラグインを作ろう！

## 土台

それでは、bdsxが入ってるディレクトリ（以下、bdsxdir）でコマンドプロンプトを起動しましょう。
やり方は上の方のアドレスバーにcmdと入力してEnterです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3544423/e7c0fba1-fcf6-88de-4cab-e4a9373a88c5.png)
で、開いたら以下のコードをコピーしてcmdにCtrl+Vで張り付けてEnterしましょう

```sh
npm run newplugin ./testplugin
```

testpluginのところはなんでもいいです。
で、Enterしたら一番下の行が
```
C:\Users\~~~~\bdsxdir>
```
になるまで待ちましょう

おわったらcmdを閉じて、bdsxdirを見るとtestpluginというフォルダができているかと思われます。

これで土台構築は成功です。

## コードを書こう
はい。プラグインの本命の"コード"です
ここでおすすめのテキストエディタの登場でーす。
[Visual Studio Code](https://code.visualstudio.com)さんです ｲｪｰｰｲ:clap::clap:
インストール方法は省きますので自分でggってください（）
無くてもいいですがあった方が圧倒的に見やすいです。

それではさっき土台構築した、testpluginのフォルダを開いてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3544423/729d08cc-57fc-fd74-54d0-9992020b85d1.png)
こんな感じなはずです。
index.tsをVisualStudioCode等で開いてください。
（index.<font color="red">js</font>は何も触らなくて大丈夫です。無視しましょう）
そしたら何か書かれてると思いますが**全部**消してください。
で以下のコードを全部コピーして張り付けてください
```ts
"use strict";

//説明1
import { events } from "bdsx/event";
import { CustomForm, Form, FormButton, FormLabel } from "bdsx/bds/form";
import { bedrockServer } from "bdsx/launcher";

events.playerJoin.on(async ev=>{//説明2
    ev.player.sendMessage("よーこそ");
    const testform = await Form.sendTo(ev.player.networkIdentifier, {//説明3
        type: "modal",
        title: "利用規約",
        content: "利用規約の内容",
        button1: "§l§a同意する",
        button2: "§l§c同意しない§e(退出)"
    });
    if (testform){//説明4
        ev.player.sendMessage("§e同意いただきありがとうございます！\n§aサーバー§eを楽しんで！");
        bedrockServer.executeCommand(`playsound random.orb ${ev.player.getName()}`)
    } else {//説明5
        bedrockServer.executeCommand(`kick ${ev.player.getName()} 利用規約に同意いただけませんでした`);
    }
});
```
とりあえずこれでCtrl+Sで保存してbdsx.batを起動させてみてください。

入ると↓
![DBB8F918-E945-4F03-902C-16A11B820D68.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3544423/6eb13992-fe76-e6d3-364d-928874487b3e.png)
同意すると↓
![9B21C8A6-BFF3-486B-B69C-EC0260382E87.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3544423/4278caca-0e23-558c-bf65-1db3b7b45c94.png)
同意しないと↓
![229D3C22-F17C-4414-9DA3-F9DC7A441857.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3544423/a2fbac5e-e67e-88cf-e4ea-62fb8bd6b0a0.png)

こうなったかと思います。
これで利用規約確認のプラグインを作れました！おめでとう！

## 解説

それでは、先ほどのコードの説明です。
なんとなく、へーそうなんだ程度で読んでくださいな。
ちなみに今回のメニューみたいなやつはform（フォーム）と言って、さらに今回のはmodal formという種類のものです。また今度記事にまとめます

### 説明1
```ts
import { events } from "bdsx/event";
import { CustomForm, Form, FormButton, FormLabel } from "bdsx/bds/form";
import { bedrockServer } from "bdsx/launcher";
```
ここで(importで)、コード上で使う知識みたいなものを引っ張ってきます。

### 説明2
```ts
events.playerJoin.on(async ev=>{
//処理
});
```
イベントといって、何かが発生したら実行されるやつです（発火）。
こんかいはプレイヤーが参加したら実行されます

### 説明3
```ts
const testform = await Form.sendTo(ev.player.networkIdentifier, {
//内容
});
```
Formをプレイヤーに送ります。~~取り消し線で非推奨とか出てるけど気にしない（）~~

### 説明4
```ts
if (testform){
//処理
}
```

testformがtrueなら（この場合同意するが押されたら）こっちに行きます。
たぶん上のボタンがおされたらtrueになるんだと思います

### 説明5
```ts
else {
//処理
}
```
説明4の逆

# おわりに
お疲れさまでした。
プラグインについて多少理解が深まったら幸いです
また自分も知識がついたらプラグインについて投稿します。
見づらい説明だったらすみません（）
Formについても今度記事にまとめようと思ってます（うわぁ、やることいっぱい）

また読んでね。