ユキミ大福のマイクラBE生活

Minecraft統合版で遊んだりゲーム作ったりするブログ

コマンド構文解説-建築物をコピー!/clone, /structure-

  投稿日:2021/02/20

最終更新日:2021/09/26

 

どうも、ユキミ大福です。

今回はMinecraft統合版のコマンドの内の1つである『 /clone 』及び『 /structure 』について解説をしていきます。

ここで解説するコマンド等は、解説する注意事項等をよく読み、個人でより詳しく調べた上で、個人の責任において使用して下さい。コマンド等の使用によって如何なる損害が発生しても、筆者であり当ブログの管理者でもあるわたくしユキミ大福は一切の責任を負いかねますので、ご了承下さい。

  

今回のコマンドは?

今回ご紹介するコマンドは『 /clone (クローン)』『 /structure (ストラクチャー)』です。このコマンドはどちらも、指定した座標に構造物をコピペするというコマンドです。

f:id:YukimiD1999:20210219205020p:plain

これらのコマンドをマスターできれば建築物をいっぱいコピーできるぞ!

この2つのコマンドの違いについては、それぞれのコマンドを解説しながら学んでいきましょう。まずは /clone から解説していきます。

 

/clone のコマンド構文

 

/clone <コピー元座標1(int)> <コピー元座標2(int)> <ペースト先座標(int)> <マスクモード(masked or normal)> <クローンモード>

 

/clone <コピー元座標1(int)> <コピー元座標2(int)> <ペースト先座標(int)> filtered <クローンモード> <ブロックID> <データ値(int)>

 

/clone <コピー元座標1(int)> <コピー元座標2(int)> <ペースト先座標(int)> filtered <クローンモード> <ブロックID> <ブロックステート>

 

  • <コピー元座標1(int)><コピー元座標2(int)>:必須
    コピーする構造物の対角となるXYZ座標をint型で指定するか相対座標を入力する。相対座標を入力する場合、基準座標からの距離を指定する。X,Zは-30,000,000~30,000,000以内Yは0~255以内コピー元領域の体積は524288ブロック以下でなければならない。

  • <ペースト先座標(int)>:必須
    構造物をペーストする北西の角(各座標の値が一番小さくなる場所)のXYZ座標をint型で指定するか相対座標を入力する。相対座標を入力する場合、基準座標からの距離を指定する。

  • <マスクモード>:省略可。<クローンモード>を指定する場合は必須
    構造物をペーストする際のブロックの扱いを設定する。モードは以下の3種類で、指定しなかった場合はreplaceとして扱われる。

    filtered:コピーした構造物に含まれるブロックの内、<ブロックID>と<データ値(int)>で指定したブロックのみをペーストする。コピー元で指定されなかったブロックの場所にあたるペースト先ブロックは置き換えられずそのまま残る。

    masked:コピーした構造物に含まれるブロックの内、空気ブロック(air 0)以外をペーストする。コピー元で指定されなかったブロックの場所にあたるペースト先ブロックは置き換えられずそのまま残る。

    replace:コピーした構造物に含まれるブロックを全てペーストする(ペースト先のブロックは全てコピー元のブロックで置き換えられる)

  • <クローンモード>:省略可。<マスクモード>をfilteredに設定した場合は必須
    コピー元の領域のブロックの扱いを設定する。モードは以下の3種類で、指定しなかった場合はnormalとして扱われる。

    force:コピー元とペースト先の領域が重なっていても強制的にコピペする。

    move:コピー元をペースト先にコピペした上で、コピー元があった領域を空気ブロック(air 0)で置き換える。<マスクモード>をfilteredにした場合、<ブロックID>と<データ値(int)>で指定され、コピペされたブロックのみを空気ブロック(air 0)に置き換える

    normalコピー元とペースト先の領域が重なっている場合、コピペしない(エラーになる)。

  • <ブロックID>:必須
    ブロックID。<マスクモード>をfilteredに設定した時のみ設定する。

  • <データ値(int)>:<ブロックステート>を設定しない場合は必須
    ブロックのデータ値をint型の数値で指定する。<マスクモード>をfilteredに設定した時のみ設定する。

  • <ブロックステート>:<データ値(int)を設定しない場合は必須
    ブロックの状態を(恐らく)json記述で指定する。<マスクモード>をfilteredに設定した時のみ設定する。詳細は不明なので情報求む!

 

/clone の失敗条件

  • 構文が適切でない(スペルミス等)。
  • コピー元範囲のブロック数が524288ブロック以下でない
  • コピー元の領域とペースト先の領域が重なっている場合(<クローンモード>がforceの場合以外)。
  • 指定したコピー元領域・ペースト先領域が読み込まれているチャンク内に存在していない。

 

/clone の成功条件

  • 上記の失敗条件を満たしていない場合。
  • forceの場合、コピー元の領域とペースト先の領域が重なっていても成功する。
  • 内部インベントリを持つブロックの中身はそのままにコピペされる。
  • 領域内のエンティティはコピペされない(特に絵画には注意)。

 

/clone の実行例

例1)

コマンド:/clone 100 70 120 110 75 130 100 76 120

実行結果:座標( 100, 70, 120 )~( 110, 75, 130 )を対角とする範囲にあるブロックを、座標( 100, 76, 120 )を北西の角とする範囲にコピペする。

 

例2)

コマンド:/clone 50 10 50 50 10 50 ~ ~2 ~ replace move

実行結果:座標( 50, 10, 50 )にあるブロックを「基準座標からY方向へ2ブロックの位置」にコピペし、コピー元の範囲は空気ブロック(air 0)に置換する。

 

例3)

コマンド:/clone -20 70 -20 20 75 20 -10 70 -15 replace force

実行結果:座標( -20, 70, -20 )~( 20, 75, 20 )を対角とする範囲にあるブロックを、座標( -10, 70, -15 )を北西の角とする範囲にコピペする(コピー元とペースト先の範囲が被っているが強制的にコピペする)。

 

例4)

コマンド:/clone 100 70 120 110 75 130 100 76 120 filtered normal stone 0

実行結果:座標( 100, 70, 120 )~( 110, 75, 130 )を対角とする範囲にある焼き石(stone 0)のみを、座標( 100, 76, 120 )を北西の角とする範囲にコピペする。

 

例5)

コマンド:/clone -20 70 -20 20 75 20 -10 70 -15 masked force

実行結果:座標( -20, 70, -20 )~( 20, 75, 20 )を対角とする範囲にある空気ブロック(air 0)以外のブロックを、座標( -10, 70, -15 )を北西の角とする範囲にコピペする(コピー元とペースト先の範囲が被っているが強制的にコピペする)。

 

/clone の詳細解説

/clone の概要

/clone は指定した範囲内のブロックを指定した場所へコピー&ペーストするコマンドです。コピー元の座標2点に同じ座標を入力すれば、ブロックを1つだけコピペすることもできます。

このコマンドは約50万ブロックのブロックに影響を及ぼすことができてしまう非常に影響力の強いコマンドのため、取り扱いには細心の注意が必要です。かなり気を付けなればならないとはいえ、結構便利なコマンドでもあります。

特に気を付けなければならないのはエラーになりにくいクローンモードのforceで、強制的にコピペする性質上エラーになりにくいため、取り扱いを間違えるとあなたが作り上げた大切な建造物が大きく損なわれる危険性もあります。そのため、巨大な範囲の /clone を実行する際にはバックアップをしっかりとり、範囲が間違っていないかよく確認しましょう。

 

/clone の実行結果等々

コマンドがエラーとなった場合には以下のように返ってきます。

  • 「指定した領域にあるブロックが多すぎます ((指定領域の体積) > 524288)」
    <コピー元座標1(int)><コピー元座標2(int)>で指定した領域の体積が524288ブロック以下でない場合のエラー。

  • 「世界の外にあるブロックにはアクセスできません」
    <コピー元座標1(int)><コピー元座標2(int)>で指定した領域及びペースト先の領域の全てがロードされているチャンク内またはブロックの設置限界に収まっていない場合のエラー。

  • 「複製したブロックはありません」
    <マスクモード>がreplace以外の時にコピペしたブロックが一切ない場合のエラー。

  • 「コピー元とコピー先を重ねることはできません」
    <クローンモード>がforce以外の時に<コピー元座標1(int)><コピー元座標2(int)>で指定した領域とペースト先の領域が重なっている場合のエラー。ただし、XYZ方向にそれぞれ1ブロックだけは重なっても良い模様。

 

コマンドブロックが保持・出力する結果は「コマンドの実行に成功したか(True or False)」のみです。成功した場合、RSコンパレーターを用いてRS動力を取り出すと必ず1になります。

 

/clone の強み・使い道

ゲーム制作においては、ステージの作成やリセット、アイテム入りチェストの配置など様々な用途で用いられます。

また、/give, /replaceitem の回や /setblock, /fill の回でチラッと触れた、金床でエンチャントや名前を付与したアイテムを配布する方法の一部としても使うことができます。

 

エンチャント済み・リネーム済みアイテムをプレイヤーに付与する方法

使用するのは今回解説した /clone と /setblock、そして後々解説する /execute の3つです。

まず事前準備として、エンチャントや名前を金床で変更・付与したアイテムをチェスト等の内部インベントリを持つブロックに入れておいて下さい。

そして以下のコマンドが具体的な方法となります。コマンドブロックに入れておくと色々と便利だと思います。

 

SNR/execute @p ~ ~ ~ detect ~ ~2 ~ air 0 clone <チェストの座標> <チェストの座標> ~ ~2 ~

=>chain1

CCA/execute @p ~ ~ ~ setblock ~ ~2 ~ air 0 destroy

=>chain2

 

<チェストの座標>には事前準備で用意した内部インベントリを持つブロックがある座標を入力して下さい。

このコマンド群の解説を少ししますと、チェーン1と2のどちらのコマンドも、このコマンドブロックに一番近い人にそれぞれ /clone と /setblock を実行させています。

チェーン1の /execute は detectモードで実行しており、/clone で複製するブロックの座標が空気ブロック(air 0)かどうかを検知し、空気ブロックならそのあとに記述された /clone を実行するというコマンドになっています。/clone のペースト先は実行者の高さ2ブロック上となっています。

チェーン2のコマンドは、コマンドブロックがCCAになっているので、チェーン1のコマンドが成功した場合のみ実行されるようになっています。この /setblock も実行者の高さ2ブロック上のブロックを空気ブロック(air 0)に破壊置換するものになっています。

 

これらを簡単にまとめますと、以下の様になります。

  • チェーン1:
    SNR/execute @p ~ ~ ~ detect ~ ~2 ~ air 0 clone <チェストの座標> <チェストの座標> ~ ~2 ~

    ・実行条件:以下の条件が全て満たされた場合のみ
     1:レッドストーンが入力された場合
     2:/execute の対象が存在する場合
     3:/execute の対象プレイヤーから高さ2ブロックの位置のブロックが空気ブロック(air 0)の場合

    ・コマンドの実行結果:
     アイテム入りチェストを、対象プレイヤーから高さ2ブロックの位置にコピペする

  • チェーン2:
    CCA/execute @p ~ ~ ~ setblock ~ ~2 ~ air 0 destroy

    ・実行条件:以下の条件が全て満たされた場合のみ
     1:チェーン1のコマンドが成功した場合
     2:/execute の対象が存在する場合

    ・コマンドの実行結果:
     対象プレイヤーから高さ2ブロックの位置にあるブロック(アイテム入りチェスト)を破壊し、空気ブロック(air 0)に置換する。

 

要するに、/clone で配布したいアイテムが入ったチェストをプレイヤーの頭上にコピペし、それを即座に /setblock で破壊してアイテムを取り出しているというわけです。複数のコマンドを組み合わせれば、こんなことも可能なのです。

 

なお、SNRやCCA等の意味がわからない方は ↓ の記事をご確認下さい。

 

また、/execute については ↓ の記事で解説します。

 

/clone の弱み・弱点

このコマンドの弱点はやはりその影響力の大きさです。コピペするブロックが多ければ多い程、処理が重くなります。そのため、この /clone を使う場合には、バックアップをしっかりと取った上で、コピペしたい範囲を30000ブロック毎ぐらいに分割して実行すると良いでしょう。

また、後述する /structure と異なり、ペーストする際に構造物を回転させることはできません。そのため、この /clone は向きが関係ない構造物や、/structure で対応できないサイズの構造物のコピペに適しています。

 

続いては、ストラクチャーブロックとほぼ同じ動作をコマンド上で実現する /structure の解説です。なお先に申し上げますと、/structure はストラクチャーブロックの機能とほぼ同じことができるコマンドです。

 

/structure のコマンド構文

/structure save <構造体名> <保存元座標1(int)> <保存元座標2(int)> <エンティティの扱い> <セーブモード> <ブロックの扱い>

/structure save <構造体名> <保存座標1(int)> <保存座標2(int)> <セーブモード>

 

/structure load <構造体名> <ロード座標(int)> <Y軸回転角> <XZ軸反転> <エンティティの扱い> <ブロックの扱い> <完全性(float)> <完全性シード値>

/structure load <構造体名> <ロード座標(int)> <Y軸回転角> <XZ軸反転> <アニメーションモード> <アニメーション時間(float)> <エンティティの扱い> <ブロックの扱い> <完全性(float)> <完全性シード値>

 

/structure delete <構造体名>

 

  • <構造体名>:必須
    保存・ロード・削除する構造体の名前。ストラクチャーブロックの「構造体の名前」項目にあたる部分。日本語で入力した場合は構造体名を「" (ダブルクォーテーション)」で囲む。

  • <保存元座標1(int)><保存元座標2(int)>:必須
    保存する構造物の対角となるXYZ座標をint型で指定するか相対座標を入力する。相対座標を入力する場合、基準座標からの距離を指定する。

  • <ロード座標(int)>:必須
    保存する構造物の北西の角(各座標の値が一番小さくなる場所)となるXYZ座標をint型で指定するか相対座標を入力する。相対座標を入力する場合、基準座標からの距離を指定する。
  • <セーブモード>:省略可
    以下の2種類のどちらかを指定する。省略できるが、省略した場合にどちらになるかは不明。また、そもそもこの2種の違いも不明。ストラクチャーブロックの「レッドストーン セーブ モード」項目にあたる部分。情報求む!

    memory:ストラクチャーブロックの「レッドストーン セーブ モード」項目の「メモリに保存」と同じ。

    disk:ストラクチャーブロックの「レッドストーン セーブ モード」項目の「HDDへ保存」と同じ。

  • <エンティティの扱い>:省略可
    以下の2種類のどちらかを指定する。省略した場合はtrue扱いになる。ストラクチャーブロックの「エンティティを含める」項目にあたる部分。

    true:エンティティを含めて保存する。

    falseエンティティを含めずに保存する。

  • <ブロックの扱い>:省略可
    以下の2種類のどちらかを指定する。省略した場合はtrue扱いになる。ストラクチャーブロックの「ブロックを削除する」項目にあたる部分だが、ストラクチャーブロックでのオンオフと逆になっているので注意。

    true:ブロックを含めて保存する。

    falseブロックを含めずに保存する。

  • <Y軸回転角>:省略可
    Y軸を軸として、0度(回転無し)、90度、180度、270度時計回りに回転した状態で構造体をロードする。省略した場合は0_degrees(0度)の扱いになる。ストラクチャーブロックの「回転」項目にあたる部分。

    0_degrees:0度

    90_degrees:90度

    180_degrees:180度

    270_degrees:270度

  • <XZ軸反転>:省略可
    X軸、Z軸、またはその両方を軸として反転させた状態で構造体をロードする。省略した場合はnone(反転無し)の扱いになる。ストラクチャーブロックの「反転」項目にあたる部分。

    none:反転無し(「x」と「z」のどちらにもチェックを入れない状態)

    x:X軸を軸として反転(「x」だけにチェックを入れた状態)

    z:Z軸を軸として反転(「z」だけにチェックを入れた状態)

    xz:X軸とZ軸の両方を軸として反転(「x」と「z」の両方にチェックを入れた状態)

  • <アニメーションモード>:省略可
    構造体をロードする際に、アニメーションを付けられる。以下の2種から設定し、これを省略した場合及び<アニメーション時間>が「0」の場合はアニメーションを行わない。

    block_by_block:1ブロックずつ設置するようにロードする。

    layer_by_layer:1ブロック分の高さを1レイヤーとして、1レイヤーずつ設置するようにロードする。

  • <アニメーション時間(float)>:省略可
    アニメーションする時間(アニメーションが完了するまでの時間)をfloat型の数値で設定する。省略した場合は「0」扱いとなる(アニメーションしない)。

  • <完全性(float)>:省略可
    構造体をどこまで完全にロードするかをfloat型の数値で設定する。100で完全にロード、0で何もロードしない。省略した場合は100扱いになる。ストラクチャーブロックの「完全性」項目にあたる部分。

  • <完全性シード値>:省略可
    構造体をどこまで完全にロードするかの完全性のランダム性を設定する。入力する文字数字は基本的に何でも構わない(一部エラーになる文字もあるので注意)。ここを設定することで同じ完全性でも異なるロードのされ方をする。省略した場合は何も入力されていない扱いになる。ストラクチャーブロックの「シード値」項目にあたる部分。
     

/structure の失敗条件

  • 構文が適切でない(スペルミス等)。
  • 保存範囲がX, Z軸がそれぞれ64以下、Y軸が256以下でない
  • 構造体名が間違っている、あるいは使用できない文字が含まれている。
  • 指定した保存領域が読み込まれているチャンク内に存在していない。

 

/structure の成功条件

  • 上記の失敗条件を満たしていない場合。
  • ロードする際にアニメーションを付けた場合、構造体の形状やアニメーションの種類によっては、松明やランタンなどの空中には存在できないブロックが壊れることがある(アニメーションを付けなければ問題無し)。
  • ロード領域が読み込まれているチャンク内に存在しなくとも、その領域全てを含むチャンクが読み込まれた瞬間にロード処理が行われる。
  • 内部インベントリを持つブロックの中身はそのままに保存・ロードされる。
  • エンティティの情報もそのままに保存・ロードされるが、プレイヤーだけは保存・ロードできない。

 

/structure の実行例

例1)

コマンド:/structure save Test1 100 70 120 110 75 130

実行結果:座標( 100, 70, 120 )~( 110, 75, 130 )を対角とする範囲にあるブロックとエンティティを、構造体名「Test1」として保存する。

 

例2)

コマンド:/structure save Test1 100 70 120 110 75 130 false disk true

実行結果:座標( 100, 70, 120 )~( 110, 75, 130 )を対角とする範囲にあるブロックを、構造体名「Test1」としてHDDに保存する。

 

例3)

コマンド:/structure load "テスト1" -30, 65, -120 

実行結果:座標( -30, 65, -120 )を北西の角とする位置へ、構造体名「テスト1」のブロックとエンティティをロードする(アニメーションはしない)。

 

例4)

コマンド:/structure load "テスト1" -30, 65, -120 180_degrees z layer_by_layer 12.5 false true 80 randomSeed

実行結果:座標( -30, 65, -120 )を北西の角とする位置へ、構造体名「テスト1」のブロックを、以下の設定でロードする。

  • Y軸回転角:180度
  • XZ軸反転:Z軸で反転
  • アニメーション設定:layer_by_layer
  • アニメーション時間:12.5秒
  • 完全性:80
  • 完全性シード値:「randomSeed」

 

例5)

コマンド:/structure delete "テスト1"

実行結果:「テスト1」という名の構造体のデータを削除する。

 

/structure の詳細解説

/structure の概要

/structure はストラクチャーブロック(structure_block 0)の機能をコマンド上で実現するコマンドで、以下の3種類のモードがあります。

  • /structure save:構造体の保存
  • /structure load:構造体のロード
  • /structure delete:保存された構造体データの削除

コマンドで保存した構造体をストラクチャーブロックでロードしたり、その逆も行えます。

/clone と同じくブロックをコピペできるコマンドですが、違いを比較すると以下の様になります。

  • コピー元の必要性
    ・/clone:必須
    ・/structure:一度保存した後は不要

  • コピペするブロックのフィルタリング
    ・/clone:<マスクモード>で設定可能
    ・/structure:/structure コマンドだけでは不可能
      ※ストラクチャーヴォイド(structure_void 0)を用いれば、空気ブロック(air 0)だけは除外可能

  • コピー元の加工
    ・/clone:<クローンモード>をmoveにすればコピペ後にコピー元のブロックを空気ブロック(air 0)に置換可能
    ・/structure:不可能(そもそもコピー元の概念が無い)

  • コピー元とペースト先が重複可能かどうか
    ・/clone:<クローンモード>をforceにすれば可能(それ以外はエラー)
    ・/structure:可能(そもそもコピー元の概念が無い)

  • コピー元のブロック体積制限
    ・/clone:32768ブロック以下
    ・/structure:計算上は64×64×256=1,048,576ブロック以下?(あまり大きすぎると重くなりすぎる可能性あり / 未検証)

  • コピー元のサイズ制限
    ・/clone:ブロック体積が32768ブロック以下であれば無制限
    ・/structure:X, Zがそれぞれ64以下、Yが256以下

  • ペースト時のY軸回転及びX, Z軸反転
    ・/clone:不可能
    ・/structure:可能(Y軸回転は90度刻み)

  • エンティティを含めたペースト
    ・/clone:不可能
    ・/structure:可能

  • ペースト時のアニメーション
    ・/clone:不可能
    ・/structure:可能(1ブロック毎または1レイヤー毎)

  • 不完全ペースト
    ・/clone:不可能
    ・/structure:可能(完全性と完全性シード値で制御)

 

/structure の実行結果等々

コマンドがエラーとなった場合には以下のように返ってきます。

  • 「構造体のサイズは、(64、256、64) より大きくすることはできません、サイズは (保存領域のXYZそれぞれのサイズ) でした」
    <保存元座標1(int)><保存元座標2(int)>で指定した領域のサイズが、X>65・Y>257・Z>65のいずれかに引っかかった場合のエラー。

  • 「世界の外にあるブロックにはアクセスできません」
    <保存元座標1(int)><保存元座標2(int)>で指定した領域の全てがロードされているチャンク内またはブロックの設置限界に収まっていない場合のエラー。

 

コマンドブロックが保持・出力する結果は「コマンドの実行に成功したか(True or False)」のみです。成功した場合、RSコンパレーターを用いてRS動力を取り出すと必ず1になります。

 

/structure の強み・使い道

ゲーム制作においては、ステージの作成やリセットなど様々な用途で用いられます。

/clone と違ってエンティティも保存できるため、絵画や防具立てを含んだ建築物のコピペは /structure を用いると良いでしょう。特定の性能を持った馬等の量産も、この /structure にしかできない芸当です。

また、/structure ではY軸回転とX, Z軸の反転もできますので、これも応用性が高いでしょう。ただし、この機能でトラップドア等を回転・反転すると、望み通り処理されない場合があります。

上2つはストラクチャーブロックでも実現できる機能ですが、/structure 独自の機能として構造体ロード時のアニメーションがあります。これも演出面でかなり面白いことができそうですね。

 

/structure の弱み・弱点

このコマンドの弱点は /clone 程ではありませんが、やはりその影響力の大きさです。コピペするブロックが多ければ多い程、処理が重くなります(ただし、体感的には /clone より軽い)。

そのため、この /structure を使う場合には、バックアップをしっかりと取った上で、コピペしたい範囲を30000ブロック毎ぐらいに制限して実行すると良いでしょう。

また /clone と異なり、特定のブロックだけをコピペするということはできません

 

 

/structure の解説で比較しましたが、/clone と /structure はそれぞれ得意分野が異なるコマンドです。同じくブロックをコピペできるコマンドではありますが、その違いをしっかりと理解して使い分けたいですね。

なお、どちらも影響力の大きいコマンドなので、使用する際にはバックアップを取ることを強く推奨します。

 

今回のまとめ

  • 『 /clone 』は存在する構造物をコピペするコマンド!
  • 『 /structure 』は構造物を保存し、任意の場所にロードするコマンド!

 

関連記事

  • コマンド構文解説-霧を操る…?/fog-
  • コマンド構文解説-エンティティにライド・オン!/ride-

  • コマンド構文解説-モブがアクションを起こす!?/event, /mobevent-
  • コマンド構文解説-あのモブのあのモーションを!?/playanimation-
  • コマンド構文解説-何が起こるんだ!?PART1!/connect ( /wsserver ), /help ( /? ), /kick
  • コマンド構文解説-何が起こるんだ!?PART2!/list, /locate, /schedule-
  • コマンド構文解説-コマンドに革命を起こす…!?/function, /reload-

 

当記事及び当ブログへのご意見・ご質問はいつでも受け付けております。

お気軽にコメント欄までどうぞ!

↓良ければポチッとお願いします。