コマンドで遊ぶ Minecraft JE 1.13

明治大学アドベントカレンダー20日目、2回目の@jabelic です。バイトでゼロから学んだマイクラのコマンドについて書きます。込み入った内容は書いてませんので、気軽に読んでいただきたいです。よろしくお願いします。

#準備
##マイクラとは
マイクラは正式名称「Minecraft」で、Mojangという会社が開発したサンドボックスゲームです。マイクラにはsurvivalモード、creativeモード、adventureモード、spectatorモードの4種類のゲームモードが存在します。

|ゲームモード|特徴|
|:----:|:----:|
|creative　|アイテムが枯渇しない。ライフがないので攻撃されても死なない。|
|survival　|殺されちゃう。一番ロールプレイングゲームに近い|
|adventure　|見学コース|
|spectator　|ワールド観察モード|



また、マイクラでは自ら動くものをエンティティと呼び、自ら動かないものはブロックと呼びます。
エンティティの中で、自分で勝手に行動するエンティティを<font color="red">Mob</font>といい、そのMobには<font color="red">友好的Mob、中立的Mob、敵対的Mob</font>が存在します。

##コマンドとは
コマンドとは
>コマンドとは、チートモード・マルチプレイ時にチャットウィンドウに入力し実行することによって、 
ゲームモードを変更したり、アイテムを取り出したりすることができるものです。

だそうです。<font color="red">設定でチートをON</font>にしておくと使えます。

###コマンド入力の仕方
コマンドはチャット欄に記述したりコマンドブロックに記述して遊びます。
チャット欄は`T`を押すか`/`を押すと画面の下に現れます。
チャット欄を使う際は必ずコマンドの頭に`/`を記述しなければなりませんので大抵の場合は`/`を押してチャット欄を開きます。
つまり `T`+`/`と打つ場合は`/`だけで良いということです。

コマンドブロックに入力する際は、コマンドブロックを手に入れて右クリックで開いてその中に記述します。
見た方が早い
[![Screenshot from Gyazo](https://gyazo.com/e9f3dcf5da43ebb658274a55aa7db67b/raw)](https://gyazo.com/e9f3dcf5da43ebb658274a55aa7db67b)

###座標
マイクラにはもう一つ遊ぶ上で重要な要素があります。コマンドを入力する上でも必要になってくる、<font color="red">座標</font>というものです。マイクラでは相対座標と絶対座標の２つを使い分けます。それぞれ記法が違うので記しておきます。(本当は向き相対というものもありますが、挙動がよくわからないのでここでは割愛)

　相対座標は座標の前にチルダをつけて`~x ~y ~z`
　絶対座標はそのまま`x y z`

###セレクター
コマンドを入力する際、エンティティを指定する際に用いる記法です。

|セレクター|指定先|
|:------:|:------:|
|@e|全てのエンティティ|
|@p|最も近いプレイヤー|
|@s|executeで指定したプレイヤー、指定していない場合は自分|
|@a|全てのプレイヤー|
|@r|ランダムなプレイヤー|

このセレクターの後にスペースを空けずに引数を追加すると詳細な指定ができます。
`@e[type=zombie]` ゾンビのみ
`@p[distance=..3]` 半径3ブロック以内の最寄りのプレイヤー

他にもたくさんありますが、ここではこのくらいの留めておきます。


#本編


###giveコマンド
アイテムを手に入れるコマンドです。アイテムのIDはminecraft wikiに載っています。
記法は
`/summon <エンティティ> x y z`で

例えばコマンドブロックを手に入れる時は
`/give @p command_block`
と記述します。
これでアイテムスロットかインベントリに入ってるはずです。（満タンだと取得できません。）


コマンドブロックとは→[CommandBlock-wiki](https://minecraft-ja.gamepedia.com/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)


###summonコマンド
mobを召喚するコマンドです。mobのIDはMinecraft wikiに載っています。
記法は
`/summon <mobID> <召喚場所>` で

代表的な敵対mobのゾンビを召喚するときは
`/summon zombie ~4 ~1 ~4`（具体例）
のように記述します。

###killコマンド
死亡、消滅させるコマンドです。プレイヤー、エンティティ、ブロックを引数で指定します。
記法は
`/kill <引数>`
例えばゾンビのみ消滅させたいときは
`/kill @e[type=zombie]`
と書きます。

###titleコマンド
画面中央にタイトルを表示するコマンドです。
記法は
`/title <セレクター>[引数] {title|subtitle|actionbar|etc...} {“text”:”hogehoge"}`で

具体的には
`title @p title {"text":"clear!"}`　と書くとclear!と表示されます。


###executeコマンド
検出コマンドです。アイテムを検知したり、mobを検知したりします。アイデアとしては

* ゾンビを検知して自分の家に入ってくると自動的にkillする
* 迷路のゴールにコマンドブロックを仕込んでおいて、プレイヤーが近づいたらclear!!とタイトルを表示する

など、結構手の込んだものも可能です。

記法は
`/execute < サブコマンド> [サブコマンド] run <コマンド>`で

`<サブコマンド> [サブコマンド]`の部分は

`at @p`で<font color="red">コマンドの実行座標、向き、ディメンションが＠pに移る</font>
`if entity @p`で<font color="red">@pを検出</font>
`as @p`で<font color="red">コマンドの実行者が@pに移る</font>

などと書きます。

具体例としては

`/execute if entity @e[type=zombie,distance=..5] run kill @e[type=zombie,distance=..5]` <font color="red">半径5ブロック以内のゾンビがkillされます。</font>
`/execute if entity @p[distance=..2] run title @p title {“text”:”clear!!”}` <font color="red">clear!!と表示されます。</font>


###scoreboardコマンド
変数のコマンドです。マイクラの変数は基本的にはその変数自体に機能が付きます。
記法は
`/scoreboard objectives {add|remove|setdisplay|etc...} <スコア名> スコア機能`

例えば、プレイヤーやエンティティを倒した数を記録したいときはスコア機能に`totalKillCount`(大文字に注意)と指定します。その他にもプログラミング言語のようにただの変数を用意したいときは`dummy`、他のプレイヤーを殺した回数を指定したいときは`playerKillCount`と指定します。
このコマンドは機能がたくさんあるので全ては解説できませんが、よく使うものだけここに記しておきます。

`/scoreboard objectives add totalkill totalKillCount`
`/scoreboard players set @p totalkill 0`
`/scoreboard objectives setdisplay sidebar totalkill`
これでモンスターを倒すとカウントされ、画面の右側にスコアが表示されるようになりました。

#終わりに
今回書いた内容はほんの一部の機能です。nbtタグを指定したり、スコアを指定したり、タイマー機能を作ったりと、いろいろなことができます。コマンドの他にも回路を組み立てて、NOT回路などを再現することもできるので、ゲームの中ではかなり自由度が高く、プログラムに近い面を持ち合わせていると思います。興味を持たれた方はぜひプレイしてみてください。JavaEditionは3000円です。