【初心者向け】いろいろなコマンドを使ってみよう

この記事は、[Minecraft Command Advent Calendar 2024](https://qiita.com/advent-calendar/2024/mccmd)１２日目の記事です。


# 0.ご挨拶
はじめまして．しりゅうといいます。コマンドをほんのちょっとだけ触っているひとです。
こういうものを書くのは初めてですのでよろしくお願いします！！！

ここでは、初心者向けとして、いろいろなコマンドを紹介していこうと思います。
他の人のマイクラカレンダー記事の理解の助けに慣れれば幸いです。

# 1.説明はどんな人向け？
・初めてコマンドを見る方
・さらーーーーっと大体のコマンドを理解したい方
・コマンドで何ができるの？って思ってる方
・scoreboardやexecuteコマンドがよくわからんって方

:::note warn

※書いている人はmcfunctionのことくらいしかわからないです。カスタム進捗、storage、predicateとかは勉強中なので、わかる人達には周りくどい方法がいくつかあるかもしれません。温かく見守ってください。
※**JAVA版**の**ver1.21.3**を前提に説明します。ただ私自身1.19,1.20くらいに一番コマンドに触れていたので**古い情報の可能性があります**。私がコンポーネントに対応できてないんだ・・・orz  一応実証しながらやるけどね。
→この辺がわからない場合、「パソコン」の「JAVA　EDITIONって書いてるやつ」の「当時一番新しいやつ」と思ってもらえればいいです。
:::
# 2.コマンドってなんやねん
**例：ゾンビが邪魔だからゾンビ全員倒したいな～～～手作業じゃきついな～。** ってとき。
コマンドを使って楽しよう。
**チートの許可：オン**のワールドで
マイクラのチャットを開いて「T」か「/」を押してチャットを開こう。

![2024-11-28_05.41.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924873/84bd96a0-24a2-fa2d-8eda-7499ac556bb6.png)
そこで試しに"/kill"となるよう文字を入力して、Enterを押しましょう。
![2024-11-28_05.49.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924873/e50d0548-87e0-d2da-5a93-e40f05bb52fc.png)

自分が倒されると思います。これがコマンドです。おわり。
# 3.ゾンビを指定する方法は？

・・・じゃなくて、killだけだと自分が倒されました。ただ、誰をキルするか？という指定をすることができます。
例えば、"steve"という名前のプレイヤーがいる場合は「/kill steve」でsteveをキルすることができます。
ただ、これで例えば敵モブのゾンビ(Zombie)をキルしたい場合、/kill Zombieと打っても「Zombie」という名前のプレイヤーさんが死ぬだけで、ゾンビは生きています。
じゃあどうすればいいのか。ここで出てくるのが「セレクター」というものです。

# 4.セレクターについて
プレイヤーの名前の代わりに書くことができます。
ゾンビを指定するコマンドの例から説明します。
ゾンビやスケルトンなどのMob、プレイヤー、アイテムなど「ブロック以外のだいたいのマイクラ世界にあるもの」を**エンティティ**といいます。


| コマンド | 説明 |
|:-:|:-:|
|@p|実行位置から最寄のプレイヤー|
|@r|ランダムなプレイヤー|
|@a |プレイヤー全員|
|@e|エンティティ全部|
|@s	 |コマンドを実行したエンティティ|
	
さらに、そこからさらに細かい指定もできます。@〇のあとに[ ]で囲んで指定します。今回の場合みたいなゾンビを指定したい場合は「type」というのを使います。これでこのワールドのゾンビ全員を指定できます。
```
kill @e[type=minecraft:zombie]
```
落ちているアイテムを全部消したい場合も、同様に
```
kill @e[type=minecraft:item]
```
とできます。

:::note
typeの「minecraft:」は省略可能です。
:::



以下は指定の一例（自分がよく使うものです。）
| コマンド | 説明 | 例のコマンド | 例の説明|
|:-:|:-:|:-:|:-:|
|distance| コマンド実行からの距離の半径 |@a[distance=..5]   |  実行位置から半径5m以内の位置にいるプレイヤー全員※１ |
|team|チームに所属しているもの|@a[team=blue]|「blue」というチームにいるプレイヤー全員  |
|type|エンティティの種類|@e[type=minecraft:item]   | （地面に落ちている）アイテム全部  |
|tag|タグ（tagコマンドでつけるもの）をもっているもの|@e[tag=test]|「test」というタグをもっているもの   |
|scores|指定したスコアがある値のもの※１|@a[scores={a=1}]   | 「a」というスコアが1のプレイヤー全員|
|limit|コマンドで指定できる最大人数。下のsortと組み合わせるとよし※２|@a[limit=3]|最大３人のプレイヤー   |
|sort|コマンド実行位置からを探す順番。nearestで近い順,futherstで遠い順。|@a[limit=2,sort=nearest]|実行位置から２番目までに近いプレイヤー|
|nbt|指定したnbt（状態を表してるもの）をもっているもの。今はコンポーネントとも言うらしい？？|@a[nbt={OnGround:true}]|地面に足をつけているプレイヤー全員|


:::note 
※１
数字について、「..」で以上、以下を指定できます。
「１」だと1ちょうど、「..1」で１以下、「1..」で１以上を指定します。
※２
セレクター指定の組み合わせ方
「limit=3」と「sort=nearest」を組み合わせる場合は「limit=3,sort=nearest」とする。この組み合わせの場合は「かつ」になり**どちらも同時に満たしているもの**を対象にします。
:::
基本的なのはこれくらい。

んで、minecraftの世界にはいろいろなコマンドがあります。次はコマンドの一例をちょこちょこ紹介していこうと思います。

# 5.コマンドの一例
**詳しく構文を知りたかったり、他のやつも知りたかったら[wikiとか](#9参考になるwikiや動画など)で調べてね。**　マジでほんの一部しか紹介しないので。

### ・tp　/ teleport
テレポートさせる。実は向きも指定できる。tpとteleportで意味は全く一緒。
```
/tp steve 0 10 0　
steveさんを座標0,10,0（厳密には0.5,10,0.5）にテレポート

/tp steve 0 10 0 90 0
steveさんを座標0,10,0に向きが90,0にしてテレポート。向きに関してはF3押したときの画像参照。
```

![スクリーンショット 2024-12-05 200719.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924873/2484f839-14bf-8b31-10f8-e1f1107bcdb2.png)

### ・time
マイクラ内の時間を設定する
```
/time set day
昼(ゲーム内時間1000)にする

/time set midnight
真夜中(ゲーム内時間18000)にする。

/time set 18000
時間18000（真夜中）にする。一上と全く同じ効果。
```
### ・fill
ブロックで埋めたり直方体を作る
色々オプションがあるよ
**巻き戻すことができないので注意！**（もし使えるならWorldEditとかのほうが便利かも）
```
/fill 0 0 0 10 10 10 minecraft:dirt
座標(0,0,0)から(10,10,10)まで全部土で埋める

/fill 0 0 0 10 10 10 minecraft:dirt replace minecraft:oak_planks
座標(0,0,0)から(10,10,10)までのオークの板材を土に変える

/fill 0 0 0 10 10 10 minecraft:stone outline
座標(0,0,0)から(10,10,10)の外側だけを全部土で埋める。内側はそのまま
```

### ・tag
タグ（コマンド上での名前みたいなもの）をつける。後で指定したタグを持っているものに対してコマンドを実行したりする。
```
/tag @e[type=minecraft:skeleton,distance=..3] add sukesan
自分から半径3m以内のスケルトンにsukesanというタグをつける

/kill @e[tag=sukesan]
上のコマンドでsukesanのタグをつけられたエンティティをキルする
```

### ・particle
パーティクル（花火の光、爆発の煙などの装飾）を表示する。構文がややこしい。使いこなすと楽しい。dustだと構文が変わる
```
/particle minecraft:flame 0 0 0 1 1 1 0 100 force @a
炎のパーティクルを座標(0,0,0)からxyzそれぞれ±1マスの範囲でランダムに、スピード0(移動しない)で100個、遠くから見えるように(force)全員に表示する
```

その他、いろいろなコマンドがありますが、調べてみてください。

# 6.座標指定「~」「^」を使ってみよう！
tpやparticleなどのコマンドを使う場合に「自分の5マス上にTPしたい」「自分の向いている方向にテレポートしたい」と思う場合に便利なものを紹介します。

座標の代わりに「~」「^」で指定ができます。
「~」は自分のいる位置からx,y,z数字だけ移動するイメージ
「^」は自分のいる位置から目線の方向を基準に移動するイメージ。どんな方向を向いていても３つ目の数字が前に移動すると思っとけばいいかも。
```
/tp  ~ ~5 ~
自分を今いるマスからy座標+5mの位置にテレポートする
/tp ^ ^ ^5
自分を今向いている方向の前に5mの位置にテレポートする

/particle minecraft:end_rod ^ ^1.5 ^3 0.2 0.2 0.2 0 500 force
エンドロッドのパーティクルを自分が見ている方向に３m＋見ている方向に対して上方向に1.5m上がったところから±0.2の範囲に500個表示する
```
![スティーブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924873/c579950a-9e27-26c6-01e0-3ae36cd9ba59.png)

![スティーブ相対.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924873/d20067cc-3d62-31cb-90e4-1342a09ee53c.png)

https://x.com/shiryu248/status/1864619602917118403

これを使うことでより自由な座標指定ができるようになります。これすごく楽しいよ。

# 7.登竜門scoreboard

さて、次に紹介するのは「scoreboard」。マイクラの動画とか見ていて、画面上に制限時間だったり、画面右になんかいろいろ出てるのをみたことあるかもしれないですね。あれに関係するやつです。
ジャンプ回数、ダメージ、スニーク時間、アイテムを投げた回数などを計測することができます！！！！
```
/scoreboard objectives add dame-zi minecraft.custom:minecraft.damage_dealt
「dame-zi」という自分が与えたダメージを計測するスコアボードを作成

/scoreboard objectives setdisplay sidebar dame-zi
「dame-zi」をサイドバー（画面右に表示）
```
この二つを実行したうえでMobを攻撃すると・・・
![2024-12-06_09.56.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924873/c8540444-9e3e-dd21-4cc5-4ca74e4f491f.png)


もう一例。
```
/scoreboard objectives add kills minecraft.custom:minecraft.mob_kills
「kills」というMobを倒した回数を計測するスコアボードを作成。
/tp @a[scores={kills=1..}] 0 100 0
「kills」が1以上のプレイヤーを座標(0,100,0)に飛ばす

```
他に何ができるのかというと、コマンドでいろいろあると思うのですけど、**主に統計に書いてあること**がscoreboardの条件で使えます。
[統計の一覧はここをクリックで見れます（Minecraft wiki）](https://minecraft.fandom.com/ja/wiki/%E7%B5%B1%E8%A8%88 "統計-Minecraft Wiki")

それと、コマンドでしか操作できないものも用意できます。「dummy」ってやつです。

```
/scoreboard objectives add tesuto dummy
「tesuto」というdummy（コマンドでしか操作できないもの）スコアボードを作成

/scoreboard players add steve tesuto 1
steveさんのtesutoスコアを1増やす

/scoreboard players remove steve tesuto 1
steveさんのtesutoスコアを1減らす
```
何に使うんだ？？？って思うかもしれないけどめっっっちゃくちゃ使います。他の人の記事を見に行くといろんなところで出てくるかも。
プログラミングでいうと変数みたいな感じで使えます。（？）


# 8.対初心者ラスボス、executeを使いこなす
相対座標もスコアもわかったし、試しに村人でも浮かせよう！！ってコマンドを打ってみる

```
/execute as @e[type=minecraft:villager] at @s run tp ~ ~3 ~
村人を自分の位置から3マス浮かす・・・？
```
やってみると、なんか違うくね？ってなると思う。


![2024-12-05_19.41.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924873/5821d33c-b5c5-6e21-2681-af47bf670655.png)
ん？なんか自分の頭上に集まってきたぞ？
その理由としては、**コマンドを打っているのが自分自身**なので**自分の位置が基準になっている**から。
そこででてくるのがexecuteコマンド。これをつかうとなんと実行者を変えることができます。つまり、**村人がコマンドを実行したという扱いにできる**のです。すごい！
```
/execute as @e[type=minecraft:villager] at @s run tp ~ ~3 ~
村人として実行→実行者（村人）の場所で実行→実行者（村人）を現在地点（それぞれの村人の位置）からy座標+3マスにテレポート
（村人をそれぞれの現在位置から＋３マス上にテレポート）
```


もっとわかりやすく説明しよう。
```
/say 私がプリンを盗みました
チャット上に発言者の名前と「私がプリンを盗みました」と表示する。
```
これを打つと、単に私がプリンを盗みましたと自白しているだけですね。ところが・・・
```
/execute as @e[type=minecraft:villager] run say 私がプリンを盗みました
村人として実行するよ→「私がプリンを盗みました」と発言する
```
すると・・・・
![2024-12-05_19.52.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924873/35f21f91-9b40-87b1-cc91-b67a7fd3806d.png)
なんと村人に自白させることができます。ひどいね。
要するに、**コマンドの実行者とかを変えることができる。** これがexecuteのほんの一例。
まあほんとはやれることがめちゃくちゃ多いんだけどね・・・

## executeのだいたいの構文

**/execute 〇〇　run 実行したいコマンド**
要するに**executeの終わりの印がrun**って思ってもらえればいいです。
さあそんなexecute、ほんの一部だけ紹介しましょう。

### ・at
実行場所を指定する。
```
/execute at @e[type=minecraft:villager] run summon minecraft:zombie ~ ~ ~
村人の位置で実行→ゾンビを実行位置で召喚
（村人の位置にゾンビを召喚する）

/execute at @e[type=minecraft:villager] run particle minecraft:firework ~ ~3 ~ 0.1 0.1 0.1 0 10 force
村人の位置で実行→３マス上に0.1mずつの範囲でスピード0で10個花火のパーティクルを表示
```


### ・as
コマンドを実行する人を指定する。**セレクターで@s（コマンド実行者）を使うとき**に超便利。
**実行場所は変わらないので注意！**
```
/execute as @a[gamemode=creative] run say 私は無敵だ！！
クリエイティブモードのプレイヤーで実行→「私は無敵だ！！」と言う
```

### ・if / unless
プログラミング御用達のやつ。ifは条件を満たす場合,unlessは条件を満たさない場合にrun以降のコマンドを実行する。blockとか、entityとかで追加で条件を指定してあげる必要がある。

```
/execute if entity @e[type=minecraft:villager] run tellraw @a "村人がいるぞ！"
村人がワールドに存在している場合、チャット欄に「村人がいるぞ！」と出す。
※tellrawはチャット欄に文章をそのまま表示する。と一旦は思っといてください

/execute unless entity @e[type=minecraft:villager] run tellraw @a "村人はいない・・・"
村人がワールドにいない場合、チャット欄に「村人はいない・・・」と出す

/execute at @a unless block ~ ~-1 ~ air run setblock ~ ~-1 ~ minecraft:tnt
プレイヤー全員の位置で実行→１マス下のブロックが空気（何もブロックがない状態）でない場合、１マス下をTNTに変える
（実況者の企画で足元が変わるやつはこれをリピートのコマンドブロックに入れることである程度は再現できるよ）
```

https://x.com/shiryu248/status/1864823701323288773

ざっとコマンドの紹介はおわりです！！！まだまだあるけどね、書ききれない！！！！



# 9.参考になるwikiや動画など

最後に、いろいろな勉強資料だったり動画、ウェブサイトなどいろいろ貼っておきます。どれもこれもめちゃくちゃ有益です。

## 参考資料
勉強の助けになるURLや動画などを載せておきます。


・[Minecraft Japan Wiki のコマンドページ](https://minecraftjapan.miraheze.org/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89)
**コマンド一覧をみることができる。見やすいけど情報が古い。** 私は一番よく使う。

・[Minecraft wikiのコマンドページ](https://minecraft.fandom.com/ja/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89)
**コマンド一覧をみることができる。情報は新しいけど詳しすぎて見にくいかも。** 私は２番目によく使う。


・しにがみさんの解説？動画
軽いコマンド紹介をしています。動画の半分くらいまではかなーり内容被っているし、これをイメージしながらこの記事作ってます。~~推してるので見てね。あとこの記事いらなくね？~~
<iframe width="560" height="315" src="https://www.youtube.com/embed/3gao3JQdGxU?si=8qJjCQmt-gv--fKt" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

・**Advent Calenderの他の方の記事**
同じマイクラカレンダー企画の初心者向けだと思うものを一部勝手ながら紹介させていただきます。

・2023年@Rusk_Eocssar様の記事
[コマンドで遊ぼう](https://qiita.com/Rusk_Eocssar/items/899064b3a30a3a877875)
ここで解説しきれなかったnbtやattributeなどを使っていろいろ遊んでいる記事です。
ここの記事で紹介していることと私の記事の内容を両方理解出来たら、もう初心者は卒業だ。
~~某鯖の足早棒もattributeだと思う~~

・2023年@ella24coat様の記事
[Minecraft Command ひっかけクイズ](https://qiita.com/ella24coat/items/22a6212e692a29677511)
初心者向けって書いている奴がちょうどいいかも。相対座標とexecuteの復習にどうぞ。中級者向けは現時点ではむずい。

・2024年@firgde様の記事
[マイクラのコマンドで作る「最強」について考える【前編】](https://qiita.com/firgde/items/dcb7d2fd75b5ec61ba46#0-%E5%89%8D%E6%8F%90)
attributeコマンドについてめっちゃくちゃ詳しく説明してます。これもわかると〇

## 便利なショートカットキー
本文に乗せるタイミングを見失った簡単なショートカットキーを紹介しときます。

・チャットを開いている時に「↑」を押すことで前入力したチャット内容が出てくる。
・コマンド入力中に予測がなにか出ている時、TABキーでその予測を入力できる。TAB連打で次の候補に移れる。
・マイクラに限らないけど「Ctrl + C」でコピー、「Ctrl + X」で切り取り、「Ctrl + V」で貼り付けの３銃士、「Ctrl + A」で全選択は使いこなせると爆速になるぞ。


# 10.おわりに
すんごく駆け足に、大雑把にコマンドの紹介をしてきました。詳しくは調べてねスタイルになっちゃうのですがいかんせん量が多いのと説明が複雑になりそうで・・・
終わりの言葉として、ちょっと偉そうにしゃべります。

コマンドいろいろ見ていて、なんなんだろうな～って眺めるのもいいのですが、個人的に一番身につくのは「**とにかく作ってみようとすること！**」
なんか整地するの楽にしたいな～～～とか、マイクラで友達の誕生日祝ってみたいな～～とか、配布マップ作ってみたいな～～とか、コマンド使った企画に応募してみたいな～～～とか、などなど・・・だいたい私がやったことではあるんですが・・・

**なにかやりたい目的があって、それを実現するためにいろいろ調べてみる！** ってのが一番いい気がします。一度何かを作ることができると、それの応用で他にもいろいろできるようになります。
あくまで私の記事はほんの一例の紹介。そこから自分がやってみたいものを考えてみて、それを調べながら作ってみよう！！！がんばれ！！！

-----------------

記事書くの楽しくなったのと、友人から要望を受けたので、すこしレベルをあげた個人的好きな配布マップなどで使えるコマンドと、魔法を作るコマンドを別の記事にて書こうと思います。そっちもよろしくお願いします。