テンプレート:BlockTileEntity
“ |
|
„ | |
— Jeb announcing the command block [1] |
コマンドブロック(Command Block)とは、コマンドでプレイヤーとの相互作用を拡張させる、アドベンチャーモードやマップ製作者を支援するためのブロックである。レッドストーン信号を受けたとき、指定されたコマンドが実行される。大きな力と可能性を秘めているので、通常作ることはできない。現時点ではクリエイティブモードのインベントリーにすら存在しない。適切な権限を持ったプレイヤーが/giveコマンドを次のように用いることで得る事が出来る:/give <プレイヤー名> 137
または/give <プレイヤー名> minecraft:command_block
。さらにいえば、クリエイティブモードでかつサーバーのオペレーターであれば、コマンドブロックのコマンドの編集や保存が可能だ。マルチプレイでこのブロックを用いることができるようにするには、server.propertiesファイルのenable-command-block
の値をtrue
に設定する必要がある。この行が無ければ追加すればよい。
サバイバルモードでは、ブロックを1撃で破壊できるが何もドロップしない。コマンドブロックをツルハシで壊すことで、ドロップして得る事が出来る。このブロックはタイルエンティティであるのでピストンで押すことはできない。コマンドに指定できる文字数は254文字までに制限されている。
用途
コマンドブロックは、アイテムや経験値をプレイヤーに与えるなどのコマンドを実行する[2]。
ブロックが実行するコマンドを変更するには、右クリックするだけで設定画面が開かれる。
プレイヤー名の代わりに、様々な異なる変数が指定可能となる。
変数 | 機能 |
---|---|
@p | 最寄のプレイヤー |
@r | ランダムなプレイヤー一人 |
@a | 全てのプレイヤー |
コマンドを用いる際、コンソールに入力したように扱われる。常にターゲットを指定する必要があるので、プレイヤーを引数に指定できないコマンド (例えば/kill
) は使うことができない。例えば、最も近いプレイヤーのゲームモードを「サバイバル」に変更するには、/gamemode survival @p
とする。ブロックに紐付けられたコマンドを変更するにはクリエイティブモードでなければならないことに注意してほしい。
シングルプレイでもマルチプレイでも、コマンドブロックによるコマンドはコンソールに送出される。にも関わらず、コマンドは "/" 記号を先頭につけることが可能だ。最も近いプレイヤーに石ブロックを1つ与えるには、/give @p 1
か give @p 1
と入力すればよい。
ゲーム規則
ゲーム規則により、プレイヤーやコマンドブロックが幾つかの基礎設定を修正できる。
使用法:/gamerule <ゲーム規則> <true/false>
ゲーム規則名 | 説明 |
---|---|
commandBlockOutput | コマンドブロックのコマンドをコンソールに出力する・しない |
doFireTick | 延焼の有効・無効 |
doMobLoot | Mobのドロップの有効・無効 |
doMobSpawning | Mobの出現の有効・無効。例外として卵やスポーンエッグ、モンスタースポナーからはMobはこの設定の如何に関わらず出現する |
doTileDrops | ブロックを破壊した際にアイテムのドロップの有効・無効 (TNTのブロック破壊を含む) |
keepInventory | 死亡時の持ち物の維持の有効・無効 |
mobGriefing | クリーパー、ガスト、ウィザーがブロックのブロック破壊、エンダーマンによるブロック持ち去り、ゾンビのドアの破壊の有効・無効 |
無効化されたコマンド
以下のコマンドはコマンドブロックでの使用が無効になっている。
コマンド | 無効化の理由 |
---|---|
/kick | @aと組み合わせることで、サーバーのロックアウト (全ユーザーの締め出し) が可能になってしまう。 |
/ban | |
/op | プレイヤーにOP (オペレーター) 権限の操作を許さない。 |
/deop | |
/stop | サーバーのシャットダウンをプレイヤーにさせることは許されない。 |
/kill | 入力したプレイヤーのみが対象となる。コマンドブロックはプレイヤーではないので無効となっている。 |
- ただし
/me
コマンドはサーバー全体のメッセージの一斉送信として機能する。コマンドブロック自体は "@" 記号で表される (Snapshot 13w04a以降では、コマンドブロックの名前を用いるようになる)。加えて/me
コマンドでは通常はプレイヤーのコンテキストが動作に必要となるが、それでもコマンドブロックでは器用に動作する (サーバーコンソール自体と同様に)。
引数
ターゲット選択子 (@a
, @p
, @r
) の後に続けて、引数を用いることも可能だ。
引数を指定する場合は次のようにする。
@<選択子>[<引数>=<値>,<引数>=<値>]
引数 | 機能 |
---|---|
x | 検索する場所の中央のX座標 |
y | 検索する場所の中央のY座標 |
z | 検索する場所の中央のZ座標 |
r | 最大検索半径 |
rm | 最小検索半径 |
m | プレイヤーのゲームモード |
c | プレイヤー数。負数の場合は該当したプレイヤーを並べた最後からの人数の指定になる |
l | プレイヤーの最大経験レベル |
lm | プレイヤーの最小経験レベル |
score_name_max | (スコアボードの) オブジェクト "name" の、最大スコア |
score_name_min | (スコアボードの) オブジェクト "name" の、最小スコア |
team | プレイヤーが指定したチームに所属しているかを確認する。チーム名の先頭に "!" をつけることで、指定したチームに所属していないプレイヤーのみを確認する。チーム名を略するとチームに所属していない全プレイヤーの確認ができる。 |
name | 指定した名前を持つプレイヤーを確認する。先頭に "!" をつけることで、その名前ではないプレイヤーのみの確認となる。 |
例:
@p[x=1,y=30,z=26,r=10,rm=2,m=1,c=3,l=25,lm=3]
また、座標と最大半径 (最小ではない) は、キーなしの数字のみの引数 (最大4つ) として記述してあれば、簡潔な指定もできる。例えば次のものは上の例と同じ座標等の指定になっている。
@p[1,30,26,10,rm=2,m=1,c=3,l=25,lm=3,score_Kills_min=1,score_Deaths_max=2,team=Red]
負の値の場合、引数 'c' は該当するプレイヤーの最後からの人数を指定できるので、@p[c=-1]
とすることで最も遠いプレイヤーが選択できる (近いほうではなく)。
歴史
Java Edition | |||||
---|---|---|---|---|---|
2012-07-27 | |||||
Jebはアドベンチャーモードを拡張する新たなブロックを作ったことをツイートし始めた。画像、そしてブロックで何ができるのかのアイデアやヒントを投稿し始めた。 | |||||
2012-07-31 | |||||
NotchはRedditのAMAで、ブロックは1.4に含まれることをほのめかした。 | |||||
1.4.2 | コマンドブロックが追加された。またコマンドブロック用の新たなコマンドもいくつか追加された。 | ||||
ターゲット指定時の引数が更新され、なぜ、どこ、だれに対してコマンドが機能するかなどの詳細が指定できるようになった。詳細については https://gist.github.com/3736487 を参照。 | |||||
ターゲット引数が追加された。"l" で最大プレイヤーレベル、"lm" で最小プレイヤーレベル、"rm" で最小半径[3]。 | |||||
13w03a | コマンドブロックに/testfor コマンドが追加され、レッドストーンコンパレーターによるコマンド実行成功時の信号送出機能が実装された (/testfor で結果がtrueのときのみ出力される)。 | ||||
13w04a | 名前を変更したコマンドブロックが、"@" 記号ではなく自身の名前をチャットで使うようになった。 | ||||
「スコアボード」という新たなコマンド要素が追加された。 | |||||
13w05a | 新たなコマンド引数 "teams" が追加された。 | ||||
1.9 | リピートコマンドブロックとチェーンコマンドブロックが追加された。 |
例
- コマンドブロックによるテレポーターもできる。例:
/tp @p[r=3] x y z
- テレポートコマンドでは相対座標を、座標の数値の前に "~" をつけることで指定できる。次のようにすると、プレイヤーを8ブロック上空へテレポートさせる:
/tp @p ~0 ~8 ~0
/tp
や/spawnpoint
コマンドが用いる座標は、通常通り整数値に0.5を加えた値になる。もっというと、-33 という数値を指定すると -32.5 として扱われ、187 は 187.5 になる。- コマンドブロックでワールドガードの類も実現できる。例:
/gamemode <ゲームモード> @a[r=<半径>]
- ゲーム規則 commandBlockOutput では、
/say
、/me
、/tell
コマンドは影響を受けない。 - 次のようにすると、コマンドブロックで至近のプレイヤー名をメッセージ中に含めることができる:
/say Hello, @p
・/tell @p Hello, @p
。しかし、/me Hello, @p
としても "Hello, @p" という文字列になってしまう。
コマンドブロック使用法
革新的かつ実用的なコマンドブロックの使用法については、 チュートリアル/コマンドブロック (en:Tutorials/Command Block) にある。
ギャラリー
コマンドブロックの初出画像[4]