Minecraft のコマンドに関する文字数制限について

Minecraft 自動化の資料を作っていく上で、ちょっと気になったことがあったので調べました。マイクラのコマンドの文字数には 256 文字までという制約があるのですが、RCON経由で送信すると、文字数制限がないみたいです。

例えば、チェスト内のアイテムを、任意のアイテムに設定するためのNBT構造はこのようになっています。

{
  Items: [{
    Slot: 0b,
    id: "minecraft:stone",
    Count: 1b
  }, {
    Slot: 1b,
    id: "minecraft:diorite",
    Count: 2b
  }, {
    Slot: 3b,
    id: "minecraft:iron_ore",
    Count: 16b
  }, {
    Slot: 11b,
    id: "minecraft:birch_log",
    Count: 32b
  }]
}

ここで、Slot はチェストアイテムのスロット番号、id はアイテム名、Count はアイテムの数量です。チェストの座標(x, y, z )と上記のNBTを用いて、

/data merge block <x> <y> <z> <NBT>

のような形で記述すると、チェストの情報(アイテム管理情報)を書き換えることができます。

しかし、NBTをもっと増やして下記のコマンドを実行しようとすると

/data merge block <x> <y> <z> {Items:[{Slot:0b,id:"minecraft:stone",Count:1b},{Slot:1b,id:"minecraft:diorite",Count:2b},{Slot:3b,id: "minecraft:iron_ore",Count:6b},{Slot:11b,id:"minecraft:birch_log",Count:32b},{Slot:12b,id:"minecraft:birch_log",Count:16b},{Slot:13b,id:"minecraft:birch_log",Count:8b}]}

f:id:takunology:20210601230749p:plain

このようなエラーが表示されます。これは「256文字目が間違っています」というもので、NBTが正しい形式でないために表示されます。256文字目の段階でNBTを閉じる括弧 } が書けていれば問題ありませんが、残念ながら文字数制限によって書ききれない場合があります。

さて、マイクラ上では文字数制限がありますが、どうやら外部からコマンドを送信すると文字数制限はないみたいです。例えば、上記の NBT をサーバコンソールから実行すると、

f:id:takunology:20210601231743p:plain

このように文字数制限なしに実行することができます。従って、チェスト内のアイテムの書き換え、及び花火アイテムを用いた実行に関しては、ゲーム内部のコマンドでは限界があるということになります。ちなみに、コマンドブロックを用いると、

f:id:takunology:20210601232204p:plain

このように文字数制限無しに実行が可能です。ただし、これは

/give <Player> command_block

を実行しないとコマンドブロックを出現させることはできません。また、サーバを起動している場合は予め server.propertiesenable-command-blocktrue にしておく必要があります。

以上をまとめると、

  • ゲーム内から実行する場合、文字数制限がある
  • ゲーム外(サーバコンソール)から実行する場合、文字数制限はない
  • コマンドブロックから実行する場合、文字数制限はない

ということになります。参考までに。