マイクラのお話

#はじめに
[Minecraft Advent Calendar 2017](https://qiita.com/advent-calendar/2017/minecraft)用に書いたお話です。
かなーり雑でゆるめに書いてるので誤字や脱字があるかもしれません。ご了承ください。

変わり種を攻めていくスタイル。

#書いてること
- 【自己流】配布ワールドを作ろう
- PHPを使ってMojangのAPIをたたこう
- マイクラのマルチサーバーを立てよう(公式&Spigot)

長いと思うので、各位読み飛ばしてください。

#【自己流】配布ワールドを作ろう
これでもクリエイターの端くれなのでこういうのを書いておこうかと思います。
スクリーンショットを交えて書く予定でしたが、撮ったスクショを間違えて消してしまったので、なしの方面で行きます。

##ワールドを生成しよう
まずはワールドを生成します。
作る内容に合わせて作り分けるといいかもしれません。
そのあたりはプリセットをいじるといいと思います。

また、私の場合「レットストーン練習場」みたいなやつの選んでます。
普通のスーパーフラットだと、地下に回路が組めなかったり、コマンドブロックがおけなかったりするので、個人的に言うとお勧めしません。

スカイブロックのような奈落を作りたければプリセットをいじればできます。

あと、このプリセットが超便利で、通常世界をネザーみたいな環境にすることが可能だった気がします。

##建築しよう
ワールドを生成したら、建築やギミックなどを組んでワールドを構築していきます。
私の場合は、大筋のストーリーを組んで建築しつつ思いついたものをストーリーに組み込んでます。
こういうのはやめた方がいいです。気づいたら大筋とは全く違うものになります。
また、何も考えずに思いつたものを組み込んでいくのもいいと思います。
そこら辺は作る人の想像力が必要になりますね。

##便利なコマンド
建築に便利なコマンドやギミックで使える(かも)なコマンドをいくつか並べておきます。
```
/fill <x1> <y1> <z1> <x2> <y2> <z2> [BlockID] [data]
/testfor <@p 他>
/testforblock <x> <y> <z> [BlockID] [data]
```
fillコマンドはx1,y1,z1からx2,y2,z2までの空間に[BlockID]を設置してくれる便利なコマンドです。
Worldeditとかを入れずとも一気に設置できます。
testforはプレイヤーを検知します。@pで近くの人@aで全プレイヤー。
また、@p[r=2]などの因数を追加していくことで、z,y,zにいる人や(コマンドブロックから)3ブロック以内にいる人みたいなことが出きます。
testforblock(s)はx,y,zにあるブロックが[BlockID]であるかを確認します。
(testforblocksの場合、x1,y1,z1からx2,y2,z2までの範囲が[BlockID]であるかを確認します)
blocksは使ったことがないですが、blockの方はワールドのフラグ管理として使おうとしたことがありました。

結構便利だと思います。

##完成したワールドを配布しよう
なんだかんだで、ワールドが完成したと思います。
完成したら、ワールドをコピーしてデバック作業をしておきましょう。
実際のプレイヤー目線に立ってみて、「ここは難しい」や「ここは簡単」、「ここでこうすると詰みが発生する」という感じのを確認しておくとよいでしょう。

終わって問題がなければ、zipファイルなりにして、アップローダーなどにあげて非公式フォーラムなどで公開すれば完了です。
また、zipファイルには「先に読んでください」みたいなテキストファイルを用意しておくといいと思います。
ワールドの簡単な概要や注意事項とかを書いておくといいと思います。

自己流というか、配布ワールド作成に関する簡単な流れの説明でした。

#PHPを使ってMojangのAPIをたたこう
PHPはWeb環境で動くhtmlとは違ったプログラミング言語だと思ってください。
ちなみに、このあたりは私より知識のあるプログラマーの人が見ると発狂しそうなぐらいのクソコードだと思います。一応これでも動くよってことで許してください。
##Web環境を用意しよう。
まずは、PHPが動かせる環境が必要になります。
apacheとPHPがよくある組み合わせだと思います。
インストール方法等については「<OS名> apache php インストール」で検索すればほぼ100%の確率で解説サイトがヒットします。
また、Windowsの場合「xampp」でPHPの環境が作れます。
これもインストールの方法等は各位yahooでggってください。

##PHPのコードを書こう
本命です。
まず今回はMinecraftIDからUUIDを引っ張ってくるようにします。

リンクはこれ「https://api.mojang.com/users/profiles/minecraft/<MinecraftID>」
jsonで帰ってくるのでこれをでコードして読み込んで、echoすれば完成です。
返ってくるjsonの例
```
https://api.mojang.com/users/profiles/minecraft/yamagami2211 の場合
{"id":"7eb30a43b3584f36a4b2fe21c85dea48","name":"yamagami2211"}
```

ソースはこちら

```php:id.php
<?php
//id確認
    if(isset($_GET["id"])){
    $id = "https://api.mojang.com/users/profiles/minecraft/".$_GET["id"];
    $json = file_get_contents($id);
    $arr = json_decode($json,true);
    $jsonecho = $arr["id"];
    if ($arr === NULL) {
        echo "IDが見つかりませんでした";
    }else{
        echo $jsonecho;
    }
}
?>
```
http://<自分の環境(localhostとか)>/id.php?id=<MinecraftID>でうまくいけばUUIDが表示されているはずです。

デバックがちゃんとできてないせいで、エラーが出るかもです。たぶんでないと思いますけど...

#マルチサーバーを立てよう
一人さみしくぼっちマイクラもいいですけど、たまにはマルチプレイしたくないですか?
そんな方の為(?)にサーバを立てる方法を書いて終わりたいと思います。

※この方法で何らかの問題が発生しても一切責任と負いません。
※※完全に自己責任で行ってください。
※※※マルチサーバを一般に公開する場合「荒らし」や「ハック」対策は必須になりますが、完全身内用として紹介するのでそこらの対策方法は書いていません。各自で検索して対策してください。

##構築に当たり必要なものをダウンロード/インストールしよう
まず必要なもの。
JAVA (必須)
Git (Spigot編にて使用)
各自でダウンロード/インストールしてください。

##サーバを立てよう 公式サーバー編
公式サーバーとは?
簡単に言うと、Minecraft公式からダウンロードできるので公式サーバーを飛んでいます。
ModやPluginは入れれませんが、複数人で実況するんだ的なのならこれが一番手っ取り早いと思います。
[ここ](https://minecraft.net/ja-jp/download/server)からダウンロードすることができます。
ダウンロードしてきた、jarファイルをダブルクリックで起動することができると思います。
一瞬だけ出て落ちてしまう場合はbatファイルを作って実行しましょう。
```
java -Xmx1024M -Xms1024M -jar minecraft_server.1.12.2.jar nogui
```
eula.txtが生成されていると思うので、これを開いて、falseをtrueに変えて再度起動します。
そうするとワールドが生成されます。
あとはポート解放をすれば終了です。

##サーバーを立てよう spigot編
spigotとは?
公式サーバを拡張したやつです。これのおかげで、荒らしやハック対策が可能となりました。
これには「plugin」というものが導入できます。
Modのような世界観をぶち込むようなものは作れないと思いますが、人が入ってきたときのメッセージ、モンスターにやられた時のメッセージなどを変えたりすることができるものもあります。

ただし、このspigotは面倒な方法でしか取得できません。
正式に言うと、buildする必要があります。
元々は、spigotの前進であるbukkitというものがありましたが、MinecraftのEULAがどうのこうので配布を終了。この後あたりに出てきたspigotもどうするか悩んだ結果、各自のパソコンでbuildする必要ができました。
このあたりの説明について全然自信がないので、調べることを強く推奨します。
私の記憶だけで書いてるからね、仕方ないね。

さてさて、必要なものをダウンロードします。ここから[BuildTools](https://hub.spigotmc.org/jenkins/job/BuildTools/)をダウンロードしてきます。
「最新のビルド」ってのがあると思うので、それを落としてきます。

ダウンロードしたら、デスクトップなりに新しいフォルダ作ってそこにBuildTools.jarをぶち込んでください。
(ぶち込まなくてもDLしたフォルダで行ってもいいんですが、ごちゃごちゃしたりするので、ファイルを作ることをお勧めします。)

ぶち込んだら、gitでBuildTools.jarを実行します。いろいろファイルが生成されると思うので、しばらく放置してると、spigot-<当時の最新バージョン>.jarとcraftbukkit-<当時の最新バージョン>.jarが生成されていると思います。
これでSpigotのビルドは終了です。
あとは、**batファイルを作成**して、それを実行するだけです。
```
java -Xmx1024M -Xms1024M -jar spigot-<当時の最新バージョン>.jar nogui
```
<当時の最新バージョン>の部分は各自で編集してください。

これを実行することで、eula.txtが生成されます。これをfalseをtrueにして再度起動させれば終了です。お疲れ様でした。
**spigotの場合、jarファイルを直接起動させてもコンソールが出ません。
必ず、batファイルを作成してください。**

わからなければGoogleで調べましょう。
自分で調べるということは今後の知識として必要になると思います。

#最後に
超絶変化球ネタでした。
夕勤終わって家に帰ってきて、12時ぐらいまで頑張って書いても完成しなかったのを翌日に回して書いています。
おかげで学校遅刻しかけました。

最後までご観覧頂き有難う御座いました。
また機会がありましたらその時はよろしくお願いします。

#リンク
[Minecraft公式](https://minecraft.net/)
[Minecraft Japan Wiki](https://www26.atwiki.jp/minecraft/)
[buildtoolsのWiki](https://www.spigotmc.org/wiki/buildtools/)(spigotmc/英語)
[Minecraft Advent Calendar 2017](https://qiita.com/advent-calendar/2017/minecraft)

##作った人のリンク
[yama2211.biz](https://yama2211.biz/)
[qiitadon](https://qiitadon.com/@yamagami2211)
Twitter:[yamagami2211](https://twitter.com/yamagami2211)