存在は知っていたものの、よくわからなかったので今まで避けてきたコマンドブロック。マイクラ書籍執筆の関係で、少し調べることになりました。まだまだこれから理解を深めていかなければいけませんが、せっかくなので調べたのでコマンドブロックの基本的な使い方などを紹介します。




コマンドブロックとは

コマンドブロックというのは、スイッチを入れると予め入力しておいたコマンドを実行することができるブロックです。例えば、プレイヤーをテレポートさせるコマンドを入力しておき、ボタンでスイッチを入れられるようにしておけば、ボタンを押したプレイヤーを任意の位置にテレポートさせるということができるようになります。

これがコマンドブロックです。
コマンドブロック

手打ちだと入力に時間がかかってしまうコマンドも、ボタン一つで実行することができます。

コマンドブロックの入手方法

そもそもコマンドを使うことができないサバイバルモードでは、コマンドブロックを入手することももちろんできません。クリエイティブモードでも、アイテム欄には表示されておらず、コマンドを使用して入手することになります。

クリエイティブモードで
/give @p minecraft:command_block
と入力すると、プレイヤーにコマンドブロックが与えられます。

成功するとコマンドブロックを1個「プレイヤー名」に与えました、というメッセージが出てきます。
コマンド実行で表示されるメッセージ

このように隠しアイテムのような扱いになっているのは、それだけワールドに与える影響が大きいということでしょうか。

コマンドブロックの使い方

次にコマンドブロックの使い方を説明していきたいのですが、慣れていないと文章による説明を読んでもおそらくピンとこないと思います(私がそうでした)。以下を読んでよくわからなくても、実際に使ってみると理解できたりするので、クリエイティブモードの実験ワールドを作っていろいろと試してみてください。では、コマンドブロックの簡単な使い方を説明していきます。

コマンドの入力

設置したコマンドブロックを右クリックすると、コマンドを入力する画面になります。

「コンソールコマンド」という表示の下の入力欄にコマンドを入力していきます。
コマンドブロックのコマンド入力画面

例えばここで、
/give @p minecraft:diamond
と入力して、完了ボタンをクリックします。
コマンドブロックの入力例

giveコマンドは、プレイヤーにアイテムを与えるコマンドです。上記のコマンドを実行すると、プレイヤーにダイヤが与えられます。

スイッチを設置して押すと・・。
スイッチを設置したコマンドブロック

ダイヤモンドが一つ、アイテム欄(ホットバー)に与えられました。

※与えるアイテムの個数を変更するには、
/give @p minecraft:diamond 64
というように、アイテムIDの後ろに個数を記入します。

こんな感じで、コマンドブロックにコマンドを記録しておけば、ボタンやレバーなどでON信号を送ったときに、入力されたコマンドが実行させることができます。

コマンドブロックの種類

バージョン1.9からコマンドブロックに新しい機能が加わり、3種類のコマンドブロックを使い分けることができるようになりました。3種類といってもアイテムとして別々なわけではなく、コマンドブロックの設定画面内でボタンを操作することで、機能を切り替えていきます。

設置したコマンドブロックを右クリックし、「インパルス」と書かれたボタンをクリックすると種類を変更することができます。
コマンドブロックのインパルスボタン

機能が切り替えられたコマンドブロックは、見た目(色)も機能に応じたものになります。

左からインパルスモード、チェインモード、リピートモードです。
コマンドブロックの3つのモード

インパルス(オレンジ)

最初に設置した状態のコマンドブロック。レッドストーン信号が入力されたときに、コマンドを一回だけ実行することができるブロックです。先程作ったダイヤモンドを与えるコマンドブロックは、インパルスモードで作成しています。

チェーン(緑)

レッドストーン信号が入力されているとき、隣接するコマンドブロックのコマンド実行を感知して、コマンドを実行することができるブロックです。

例えば、先程置いたダイヤモンドを与えるコマンドブロックに繋がる形でチェーンモードのコマンドブロックを置き、コマンドを

/clear @p minecraft:diamond

と入力します。ボタンを押すと、先ほどと同じようにコマンドが実行されダイヤモンドがプレイヤーに与えられますが、そのコマンドの実行を検知した隣のコマンドブロック(緑)がすぐに、自身に記録されているコマンドを実行し、インベントリからダイヤモンドを消去してしまいます。

「「プレイヤー名」のインベントリから64個のアイテムを消去しました」というメッセージが表示されます。
clearコマンド入力時のメッセージ

あるコマンドを実行してから、続けて違うコマンドを実行したいときなどに使えます。チェーンのコマンドブロックを複数並べれば、並べた分だけコマンドを実行することが可能。直前のコマンドブロックのコマンドが実行されてから、次のコマンドブロックのコマンドが実行されることになるので、順序を指定してコマンドを実行することができます。

リピート(紫)

レッドストーン信号が入力されている間、1tick間隔で何度もコマンドを実行し続けるコマンドブロックです。tickとはマインクラフト内で処理が行われるサイクルのことで、1秒間が20tickとされています(1秒間に20回の処理が行われる)。1tick間隔で実行されるということは、0.05秒に1回実行されることになります。

先程のインパルスモードのコマンドブロックを、リピートモードに変更してみました。
リピートモードに変更した様子

リピートモードのコマンドブロックは、紫色になります。入力されているコマンドは、先ほどと同じダイヤモンドをプレイヤーに与えるコマンドです。隣のチェーンコマンドブロックに記録されているコマンドも、先ほどと同じダイヤモンドを削除するコマンドです。この状態でリピートモードのコマンドブロックのボタンを押すと・・

ボタンが押されて信号が伝わっている間、ダイヤモンドが大量に与えられますが、与えられたそばからどんどん削除されていきます。
コマンドが永遠にリピートされる様子

動力が伝わっている間は常にコマンドを実行しておけますが、実行回数がかなり多くなるので、それだけ負荷も大きくなります。

条件付き

コマンドブロックの設定画面、種類を選択するボタンの隣に「無条件」と表示されているボタンがあります。このボタンを一回クリックすると「条件付き」に変更することができ、隣接するコマンドブロックのコマンドが「成功」したときだけ、レッドストーン信号を受け付けるようになります。

条件付きのボタン

チェーンの説明で使用したインパルスモードのコマンドブロックに、
/clear @p minecraft:redstone
と入力し、隣のチェーンモードのコマンドブロックを「条件付き」にしておきます(コマンドは先ほどと同じく、ダイヤモンドを削除するコマンド)。上のコマンドは、プレイヤーの持っているレッドストーンを削除するコマンドです。

条件付きの設定にしたコマンドブロックは、模様が少し変わります。
条件付きのコマンドブロックの外観

先ほどはボタンを押すとプレイヤーにダイヤが与えられ、すぐに削除されていましたが、この状態でボタンを押しても持っているダイヤモンドは削除されず、またレッドストーンも持っていないので、何も起こりません。

インパルスモードのコマンドブロックの設定画面を見てみると、前回の実行結果に「プレイヤー名のインベントリーにはアイテムがないので消去でき・・」と表示されています。
前回の実行結果の表示

レッドストーンを持っていないので、/clear @p minecraft:redstoneのコマンドが失敗に終わり、その結果、隣接しているチェーンモードのコマンドブロックも動かなかったということになります。チェーンモードのコマンドブロックが「無条件」であれば、インパルスモードのコマンドブロックのコマンドは失敗に終わっても、コマンドが実行されてプレイヤーからダイヤが削除されます。

常時実行

設定画面の「動力が必要」ボタンをクリックすると、常時実行モードに変更することができます。常時実行にするとレッドストーン信号の入力が必要なくなり、常にコマンドが実行される状態になります。

リピートの説明で使用したリピートモードとチェーンモードのコマンドブロックを、どちらも常時実行にすると、ダイヤモンドを与えて、削除する、というコマンドが永遠に繰り返されます。
常時実行モード

常に実行しておきたいコマンドに使える機能ですが、負荷も相当なものになります。ちなみにインパルスモードでは、常時実行にしても一度しかコマンドが実行されません。




感圧板を踏んだ牛が空高くテレポートする仕掛け

練習がてら、逃げようとしたウシを空高くテレポートさせるという仕掛けを作ってみました。

フェンスの端っこにコマンドブロックと感圧板を設置しています。
ウシをテレポートさせる仕掛け

コマンドブロックには高さ100の位置までテレポートするように、
/tp @e[type=Cow,r=2] 1226 100 144
と入力。

入力するコマンド

/tpは、テレポートさせるコマンドで、@eは全てのエンティティを対象にしてコマンドを実行するという意味。/tp @eとすると、プレイヤー(自分)までテレポートしてしまうので、[type=Cow,r=2]でコマンドブロックから半径2マス以内のウシを指定して、最後に1226 100 144とテレポート先の座標を指定しています(相対座標を使ったほうが簡単です→絶対座標と相対座標の違いとは?2種類の指定方法を便利に使いこなそう)。これである程度は動かすことができました。

ウシはフェンスを越えることはできませんが、高さ1のブロックであれば乗り越えることができるので、コマンドブロックの位置からフェンスの外へ逃げようとします。

逃げようとしたばっかりに・・。
地面に叩きつけられるウシ

何かの拍子にウシがずっと感圧板を踏みっぱなしになってしまい、何匹かは脱走。
脱走するウシ

ということで、コマンドブロックの基本的な使い方の紹介でした。主にマルチで使うことになるのでしょうか。調べてみてやっぱり難しかったですが、使いこなせるようになれば色々と面白いこともできそうです。