マイクラのコマンド作成方法
このページは、既存のコマンドを組み合わせて「自分だけのコマンド(仕組み)」を作る方法のまとめです。
コマンドブロックでの小さな装置から、データパックの function、OP権限のない参加者でも使える /trigger、
さらにプラグインでの本物の独自コマンドまで、段階的に紹介します。
個々のコマンドの意味は マイクラコマンド一覧 を参照してください。
1. 「コマンドを作る」4つの段階
| 方法 | 呼び出し方 | 向いている用途 |
|---|---|---|
| コマンドブロック | ボタン・レバー・常時実行 | その場の装置、テレポーター、ドア |
| function | /function 名前空間:名前 | 長い処理をまとめる、配布ワールドの仕組み |
/trigger | /trigger 名前 | OP権限のない参加者が使うメニュー |
| プラグイン | /好きな名前 | サーバー用の本格的な独自コマンド |
バニラ(MODなし)では、/home のような新しいコマンド名そのものは作れません。
その代わり、function と /trigger を組み合わせると、実質的に「自分のコマンド」を用意できます。
2. コマンドブロックで作る
まずは /give @s command_block でコマンドブロックを手に入れます(クリエイティブ・チート有効が必要)。
| 種類 | 動き方 | 使いどころ |
|---|---|---|
| インパルス(オレンジ) | レッドストーン信号を受けたときに1回 | ボタンで動かす装置 |
| チェーン(緑) | 後ろのブロックが動いたあとに続けて動く | 複数の処理を順番に |
| リピート(紫) | 毎tick動き続ける | エリアの監視、常時効果 |
例:ボタンを押すとスポーン地点に戻るテレポーター(インパルス)
tp @p 0 64 0
例:特定の範囲に入ったプレイヤーに暗視を付ける(リピート・「常時実行」)
effect give @a[x=100,y=60,z=100,dx=10,dy=5,dz=10] night_vision 15 0 true
server.properties の enable-command-block を true にしないとコマンドブロックは動きません。
また、リピートを置きすぎるとサーバーが重くなります。数が増えてきたら function に移すのがおすすめです。
3. データパックの function で作る
function は、コマンドを1行ずつ書いたテキストファイルです。
コマンドブロックを何十個も並べる代わりに、1つのファイルにまとめて /function で呼び出せます。
置き場所:ワールド/datapacks/my_pack/data/my_pack/function/heal.mcfunction
# 体力と満腹度を回復して、メッセージを出す
effect give @s instant_health 1 10 true
effect give @s saturation 1 10 true
playsound minecraft:entity.player.levelup master @s
tellraw @s {"text":"回復しました!","color":"green"}
/reload してから /function my_pack:heal で実行できます。
データパックの基本の構成(pack.mcmeta など)は スクリプト作成方法 にまとめています。
自動で動かす
- 読み込み時に1回 …
data/minecraft/tags/function/load.jsonに登録 - 毎tick …
data/minecraft/tags/function/tick.jsonに登録 - 少し後で1回 …
schedule function my_pack:next 5s
4. 誰でも使えるコマンドにする(/trigger)
/function はOP権限が必要なので、普通の参加者は使えません。
そこで使うのが /trigger です。権限がなくても実行できる唯一の「スコア変更」コマンドで、
これを合図に function を動かせば、参加者用のコマンドになります。
load.mcfunction(準備)
scoreboard objectives add heal trigger
tick.mcfunction(毎tick確認して実行)
# /trigger heal を使った人に回復 function を実行
execute as @a[scores={heal=1..}] at @s run function my_pack:heal
# 使った人のスコアを戻して、もう一度使えるようにする
scoreboard players reset @a[scores={heal=1..}] heal
scoreboard players enable @a heal
これで、参加者はチャットに /trigger heal と打つだけで回復できるようになります。
/trigger menu set 2 のように数字を渡して、1つの trigger でメニューを分けることもできます。
tellraw の clickEvent で /trigger を実行するボタンをチャットに出すと、
「クリックするだけのメニュー」が作れます。コマンドを覚えなくても使えるので、配布ワールドで喜ばれます。
5. 引数を渡す(マクロ)
1.20.2 以降の function では、行の先頭に $ を付けると $(名前) の部分を呼び出し時の値で置き換えられます(マクロ)。
「好きな座標にテレポート」のような、引数つきのコマンドが作れます。
data/my_pack/function/warp.mcfunction
$tp @s $(x) $(y) $(z)
$tellraw @s {"text":"$(name) にワープしました"}
呼び出し方
function my_pack:warp {x:100, y:70, z:-200, name:"拠点"}
ストレージ(data storage)に保存した値を渡すこともできるので、「登録した地点にワープ」のような仕組みも作れます。
6. プラグインで本物のコマンドを作る
/home や /shop のように新しいコマンド名そのものを作りたい場合は、
Paper などのサーバーでプラグインを使います。方法は2つあります。
- Skript … プログラミングなしで
command /home:のように書ける。手軽(スクリプト作成方法 参照) - Java でプラグインを作る … 入力補完(Tab で候補が出る)や権限の細かい設定まで自由に作れる。Paper では Brigadier という仕組みでコマンドを登録するのが今の主流です
Java での開発の流れ(JDK・IntelliJ・Gradle)は、MODとほぼ同じです。MOD作成方法 の環境準備を参考にしてください。
7. 作るときのコツ
- 名前空間を自分用にする …
minecraft:ではなくmy_pack:などにすると、ほかのデータパックとぶつかりません - スコアボードの名前に接頭辞を付ける …
mp_moneyのようにすると、ほかの仕組みと混ざりません - 毎tickの処理は最小限に … 重い処理は条件を満たしたときだけ function を呼ぶ
- テスト用のワールドで作る …
/fillや/killの範囲ミスで、本番ワールドを壊さないように - コメントを書く … function では
#で始まる行はコメント。あとで読み返すときに助かります
8. つまずきやすい点
| 症状 | よくある原因 |
|---|---|
/function で「不明な関数」と出る | フォルダ名(function)・ファイル名・名前空間の間違い、/reload 忘れ |
| function の一部だけ動かない | その行にエラーがある。ゲーム内で1行ずつ試すと原因がわかる |
/trigger が使えない | scoreboard players enable を実行していない(使うたびに再度 enable が必要) |
| コマンドブロックが動かない | サーバーの enable-command-block が false |
@s が効かない | function の実行者が違う。execute as ... run で実行者を指定する |
関連ページ
- マイクラコマンド一覧(個々のコマンドの使い方)
- スクリプト作成方法
- MOD作成方法