Minecraftのコマンドで遊んでみる

# Minecraftとは？
結構有名なので言うまでもないですが、知らない人のために。
Minecraftは小中高生や大人に人気のゲームです。
ブロックを使って建築をしたり武器を作って敵をやっつけたりするゲームです。

## リンク
[Minecraftの公式サイト](https://minecraft.net/ja-jp/)
[wiki](https://www26.atwiki.jp/minecraft/)

# コマンドとは？
「コマンド」と聞くとターミナルやコマンドプロンプトなどが思いつくかもしれません。
実際Minecraftのコマンドも似ています。
ターミナルなどのようにディレクトリやファイルを作成することは出来ないですが、Minecraft内を操作することが出来ます。
うまく使えばコマンドでMinecraft内にOSを作ることも可能です。

# レッドストーンとは？
コマンドをより高度に扱うために「レッドストーン」の知識が必要になってきます。
これがレッドストーンです。
![2017-09-29_15.09.26.png](https://qiita-image-store.s3.amazonaws.com/0/154299/7ed4fcbf-fa22-583f-6f9d-276c163e0a58.png)
レッドストーンには**ONとOFFの２つの状態**があります。
![2017-09-29_15.13.56のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/aa073bb0-9e84-7a32-1fc0-d6fc0c512005.png)
レッドストーンの状態を変更するためのアイテム3種類を紹介します。

# Minecraftの環境
バージョン:1.12.2
MOD:なし

## レッドストーントーチ
![2017-09-29_15.18.44のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/beeda918-d0aa-e099-aaec-f29b408b779d.png)

レッドストーントーチは自身の上下左右のブロックまたはレッドストーンに入力する。
また自分自身にレッドストーン信号が流れると入力が止まります。

## ボタン
![2017-09-29_15.22.07のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/8bf7e39c-196a-d07d-f8fa-facf79835e45.png)
ボタンはクリックされると0.75秒隣接しているブロックまたはレッドストーンに入力する。

他にも種類はありますがここでの紹介は控えさせてもらいます。
代わりに参考になりそうなサイトのリンクを張っておきます。

[入力装置一覧](https://www26.atwiki.jp/minecraft/pages/1037.html#id_bbc92987)

## レバー
![2017-09-29_15.43.21のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/24b95a50-e114-75b2-d5bb-4904f08df85e.png)
レバーはクリックすることでONとOFFの状態を切り替えられてONの状態だと隣接しているブロックまたはレッドストーンに入力します。

# 出力装置
出力装置もありますがここでは１つだけ紹介します。

## レッドストーンランプ
![2017-09-29_15.36.57のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/6e4727a9-4814-e628-0de4-cda14428c76b.png)

レッドストーンランプはレッドストーン信号を受けると光ります。

# 回路
レッドストーンは他のレッドストーンと隣接させることでつなげることが出来ます。
![2017-09-29_15.40.17のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/423afe4e-541e-09f8-4fe6-8dc16a8adbdb.png)
このようにレッドストーンと入力装置と出力装置で作った回路のことをレッドストーン回路と呼ぶことがあります。

# AND OR NOT
もう気づいた人もいるかもしれませんがレッドストーン回路でAND OR NOTゲートを作ることが出来ます。

## NOT
NOT回路は一番簡単に作れます。
![2017-09-29_15.48.42のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/3e75c44d-c1ad-09b9-3092-d727c9803456.png)

この画像だとレバーはOFFの状態です。
左上のランプは光っています。
これはレバーがOFFの状態ではレッドストーントーチはONの信号を発生させます。それでランプが光っています。
逆にレバーをONにすると以下のようになります。
![2017-09-29_15.48.48のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/b456fa41-c0ee-4bf6-c795-adb4464cca7f.png)
レッドストーントーチが下のブロックからレッドストーン信号を受けているのでレッドストーントーチがレッドストーン信号を発しなくなりました。

## OR

![2017-09-29_16.00.17のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/04cb20c9-fc20-b273-662b-d62ac1349d35.png)

![2017-09-29_16.00.36のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/a76186ba-d2c5-4229-78a4-8369ba385331.png)

![2017-09-29_16.00.42のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/0c2b65e5-4d3d-7d10-8ba7-46afbcfbd974.png)


## AND

![2017-09-29_15.54.28のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/a44e9e26-0a15-16bc-5c3c-3c4e39f1f88c.png)

![2017-09-29_15.57.15のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/87110212-f539-c056-9751-98060a630e18.png)

![2017-09-29_15.58.38のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/dc094583-5678-46e6-922f-1e0837f3d63a.png)

# コマンドの使い方
さて前置きが長くなりましたが本題のコマンドです。

まず**チートオン**のワールドに入ってください。

そしたら`/`キーを押してください。
そうすると以下のように画面下部にコマンドラインが表示されます。

![2017-09-29_16.06.23のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/1fe545dc-f215-e779-020b-dfa18933abeb.png)

コマンドを実行するにはここにコマンドを入力してエンターキーを押せば実行されます。
ターミナルやコマンドプロンプトのように上下キーを押せばコマンドの履歴を行き来できます。

# 初めてのコマンド
やっぱり最初は画面に`Hello world`を表示させたいですよね。
以下のコマンドを入力してください。
`say Hello world`
これはコマンドラインに`Hello world`を出力するコマンドです。
早速エンターキーで実行します。
![2017-09-29_16.13.09のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/3b44cc99-59fc-d7ee-9f26-88bd87273737.png)
ちゃんと表示されてますね。

ここで先程のコマンドを分析してみましょう。
`say Hello world`
最初の`say`はコマンドラインに文字列を表示させるための関数のようなものです。
その後の`Hello world`は引数のようなものです。
つまりC++の形にすると`say("Hello world")`という形になります。

え、味気ないだって？
`title @p title {"text":"Hello world","color","yellow"}`
このコマンドを実行すると
![2017-09-29_16.23.12.png](https://qiita-image-store.s3.amazonaws.com/0/154299/5ab6a2f2-d5b0-0e3e-4bb6-5fea8070371f.png)
画面中央に黄色で`Hello world!`の文字が表示されました！

このコマンドも解析していきます。

`title @p title {"text":"Hello world","color","yellow"}`

最初の`title`は画面中央に文字列を表示させるためのコマンドです。
次の`@p`は`titile`コマンドの対象です。
`@~`はコマンドの対象を表すときによく使われます。
`@p`以外にも以下のようなものがあります。

| @ | 対象 |
|:-:|:-:|
| @p  | コマンドが実行された最近のプレイヤー  |
| @r  | ランダムなプレイヤー  |
| @a  | 全てのプレイヤー  |
| @e  | 全てのエンティティ(モブなど)  |
| @s  | 実行されているエンティティ(モブなど)  |

次の`title`は`title`と`subtitle`と二種類あるうちの`title`です。

次の`{"text":"Hello world","color","yellow"}`は何処かで見たことがあるのではないでしょうか？
これは~~厚切り~~`json`形式です。
このようにコマンドの引数として`json`を使うものあります。

見やすいように整形しました。

```json
{
    "text":"Hello world",
    "color","yellow"
}
```

`text`は表示する文字列で`color`は表示する文字列の色を表します。

# 色々なコマンド

マインクラフトには多数のコマンドが用意されています。なので　今回は少しだけ紹介します。

## アイテムを取得
まず以下のコマンドを実行してください。
`give @p stone`

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3135343239392f32393564396364372d356636312d316530632d643537332d3031333561326336613537632e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/154299/203843d3-c7f6-9ac9-2c56-f4459d84c05c.png)


これは言うまでもなくコマンドを実行した場所から最近のプレイヤーに石ブロックを与えるコマンドです。

## 時間を設定

![2017-09-29_16.45.38のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/37e65768-0601-1c23-6442-1b171ab4d25b.png)

夜の時点で以下のコマンドを実行すると
`time set 0`
朝になります。

![2017-09-29_16.47.15のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/4f0d6f31-96c7-ee3c-d13f-3ee18f7cc7be.png)


# もう打つのは面倒だ。そうだコマンドブロックに任せよう！
と、言うことでコマンドブロックと言うものを紹介します。

コマンドブロックはレッドストーン信号を受けると予め設定されたコマンドを実行する出力装置です。

ではコマンドブロックを取得しましょう。

コマンドブロックは特殊でインベントリからは取得することが出来ません。

代わりにコマンドで取得してみます。
以下のコマンドを実行してください。

`give @p command_block`

以下のようにコマンドブロックを取得できます。

![2017-09-29_16.49.09のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/4278e966-168b-12fa-0800-ae7a4f8adfdd.png)

![2017-09-29_16.52.33のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/62146ca6-277d-5066-ce1a-478238721840.png)

右クリックすると以下のようなGUIが開きます。

![2017-09-29_16.54.06.png](https://qiita-image-store.s3.amazonaws.com/0/154299/313b383e-1d92-ea77-38b1-6b99f757b225.png)

「コンソールコマンド」と書かれている下のテキストボックスにコマンドを入力します。

ではここに以下のコマンドを入れてください。
`give @p command_block`
これで左下の「完了」ボタンを押してください。
以下のように完了されたことを表すメッセージが出たら成功です。
![2017-09-29_17.01.01のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/fb669ed3-8a40-4a3b-ba25-24ce68df5044.png)
そしたらコマンドブロックにボタンを取り付けてください。この時Shift+右クリックで設置できます。
![2017-09-29_17.04.12のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/55ed4dbe-e07a-17c7-124e-6537e353f1bb.png)
ボタンを押すと
![2017-09-29_17.04.58のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/0cdf524e-b9d3-20a8-292d-c15bc86b200c.png)
このようにコマンドブロックが与えられます。

#　夜がない世界
名の通り夜がない世界をコマンドで作っちゃいます。
新しくワールををチートオンで生成してください。

先程のようにコマンドブロックを取得して以下のコマンドを設定してください。
`/time set 6000`
そしたら「インパルス」と書いてあるボタンを2回クリックして「リピート」にしてください。
![2017-09-29_17.16.44.png](https://qiita-image-store.s3.amazonaws.com/0/154299/a1e474cd-72cc-1407-049b-44f44171b92c.png)
そして「完了」をクリックすると以下のようにコマンドブロックの色が紫色になります。
![2017-09-29_17.18.07のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/6be72484-a9d3-9dad-698d-eb90e20c9443.png)
そしたらこのコマンドブロックに**レバー**をShift+右クリックで設置します。
![2017-09-29_17.19.08のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/154299/01eadabd-d25e-073e-6c08-42ed6f491065.png)
このレバーを下げると夜なない世界ができます。

## 説明
先程の「リピート」はそのコマンドブロックにレッドストーン信号が入力されている間ずっと設定されたコマンドを実行するというものです。
レバーは下げている間ずっとレッドストーン信号を入力するので「リピート」と相性がいいわけです。

## コマンドラインがうるさい
先程の作った夜のない世界ではコマンドラインに「[@: 時刻を 6000 に設定しました]」というログがずっと残ってしまいます。
これが嫌な人は以下のコマンドを実行してください。
`gamerule commandBlockOutput false`を実行するとログが出てこなくなります。

# 最後に
今回紹介したコマンドはほんの一部です。
他にも便利で面白いコマンドがたくさんあります。

コマンドを組み合わせていくことで脱出ゲームや特殊な武器、敵などを出すことも出来ます。

以上Minecraftのコマンドで遊んでみる記事でした。