53コマンドを1つのブロックに – Cat’s Container Runner v2.2.0-β

pack_icon-a7af15e0
スポンサーリンク

コマンドブロックのタワーをワールドにいくつも建てていませんか?
無数のコマンドブロックの中からエラーを見つけるのにうんざりした経験は?あるいは、コマンドブロックを何度も並び替えたり、同じ内容を繰り返すために100個積み上げたり?

すべて Cat’s Container Runner (CCR) が解決します!


更新履歴

v1.0.0
公開

v2.0.0-β
JSON UI から Ore UI に全面移行
軽量化

v2.1.0-β
スクリプトコンテナブロックを追加
Script Card DDUI から現在座標と視線の先のブロックの詳細を取得できるように
スクリプトコンテナブロックの追加に伴いScript Card Generator DDUI のスライダーを拡張、手書きで数値を指定できるように

v2.2.0-β
条件付きスクリプトカードを追加


──── コマンドを実行するのにブロックなんていらない

コマンドはスクリプトカード(ccr:script_card)に記述します

スクリプトカードをシフト+使用すると、以下のようなDDUIが表示されます

Player Location はプレイヤーの現在座標
Look At は現在プレイヤーの視線の先にあるブロックのIDと座標を指します
Conditional については後述

ここにコマンドを打ちこみます。
書き終わったら必ず『保存』を押しましょう!
ここでは以下のようなコマンドを保存します:

/say Hi

( / はつけてもつけなくても構いません)


(Command Line の横に * が付いている場合、コマンドが未保存です)

説明文が以下のように変化します。忘れても安心!

なお、スニークせずに使用すると刻まれているコマンドをそのまま実行します

さて、下準備は終わりました。これを、入れ物に入れてみましょう。
このアドオンではスクリプトコンテナ(ccr:script_container)が追加されます。

スクリプトコンテナは1ブロックで54スロット分のアイテムを収納できるアイテムで、クリエイティブ限定ブロックです。
チェストや樽にも入れることはできますが、基本的にスクリプトコンテナに入れることを推奨します。
※注: エンダーチェスト/トラップチェストは非対応です

ここで、理由は後述しますが、一番右下には置かないようにしましょう。


今こそ実行の時

/ccr:containerrunコマンドで、スクリプトカードを入れたコンテナを指定しましょう。チャットに打ち込んでも、コマンドブロックやスクリプトカードで実行しても構いません。
私の場合:

/ccr:containerrun 2 -62 0

すると、コンテナの中に入れたスクリプトカードのコマンドが実行されます!

※特記: この際の実行者はコマンドブロックやコンテナではなく『スクリプトエンジン』となって、実行地点は固定でx0, y0, z0地点になります。ご注意を!

これは右下を除いた53スロット全てで実行可能で、実質的に53個のコマンドブロックがこの中に入っていることになります!

また、スクリプトカードは条件付きスクリプトカードに変えることができます。


条件付きスクリプトカードは、コンテナ内に配置された場合、直前のスクリプトカードの実行が成功した場合のみ実行されます

なお、実行後には右下にレポートカード(ccr:report_card)が生成され、コマンドの実行結果を知ることができます。
実行後、右下のスロットはこのレポートカードに上書きされるため、ここにスクリプトカードを置いてはいけません。

条件付きスクリプトカードが実行されなかった場合、失敗扱いではなく Cancelled に加算されます。

間違ったコマンドのスクリプトカードを入れた例:


冗長なコマンドは排除せよ

同じコマンドを何度も実行するのに、同じスクリプトカードを入れる必要はありません。
イテレータカード(ccr:iterator_card)とイテレータ終端カード(ccr:iterator_ender_card)を使用しましょう!

イテレータカードをシフト+使用すると、以下のようなDDUIが表示されます

数字部分を繰り返したい分だけ指定し、保存を押します。
次に、繰り返したいスクリプトカードの直前に置きます。
今回は

1. /say Fizz
2. /say Buzz

の1番目を3回繰り返したいので、1番目のスクリプトカードの直前にイテレータカードを置きます。

無事Fizzが3回出力されました。

他のスクリプトカードも実行したいときは、イテレータ終端カードを併用します。
今回は

1. /say Fizz
2. /say Buzz
3. /say FizzBuzz

をそれぞれ3回繰り返したいので、イテレータカードとイテレータ終端カードで1~3を囲みます。

Fizz → Buzz → FizzBuzz が3回繰り返されていることがわかります。


結局のところ、歴史は繰り返す

しかしながら、当然、旧来のコマンドタワーは54段以上のものもあり、当然53スロットでは足りないこともある。
聡明な皆さんならスクリプトカードにcontainerrunコマンドを仕込んで、複数のコンテナを横断して実行するだろう。

しかし、それは待ってほしい。

実は、containerrunは実行時に必ず1tickの遅延が発生するという弱点が存在する。
おそらくないとは思うが、100個のコンテナをcontainerrunコマンドで繋いでいくと、最後のコンテナに到達するまでには100tick、つまり5秒かかる。

相当ゆるいコマンドを書くだけならいいが、厳密な判定や処理が必要なものに対しては致命傷となることは言うまでもない。

そこで使えるのが呼出カード(ccr:goto_card)である。

例のごとく呼出カードをシフト+使用すると、以下のようなDDUIが表示される

Player Location はプレイヤーの現在座標
Look At は現在プレイヤーの視線の先にあるブロックの座標を指している

この座標系には相対座標(~ や ^)は使えない。

まず、このようにコンテナを積み上げた場合を考える。

このとき、下のコンテナに対して ccr:containerrun を実行したとき、上のコンテナも実行したい。

下のコンテナに

1. /say Fizz
[呼出カード -> 上のコンテナ]
2. /say FizzBuzz
上のコンテナに
3. /say Buzz

といった感じにカードを入れる。
呼出カードには、あらかじめ上のコンテナの座標を記録してある。

すると、このように、1 -> 3 -> 2という流れで実行される。

なお、呼出カードにもイテレータカードが使用できる。

この場合、呼出先のコンテナが指定回数分(今回は5回)実行される。

スポンサーリンク
ダウンロード
(mcpack/mcaddon) [DL:12]
※投稿記事に含まれるファイルやリンクにより発生した被害についてクラフターズコロニーは責任を取りません
投稿通報

コメント

  1. 神アドオンをありがとうございます!
    便利すぎます!
    まだ少ししか触れていませんがいくつか質問があります。
    1つ目はコンテナはどこにあるんでしょうか?軽く探したんですが見当たりませんでした。
    2つ目が現在オペレーター以外がカードの実行と書き換えが出来るようになってると思いますが、タグなどで制御出来るようには出来ませんか?出来ればでいいのですが制御したいです。
    お返事まってます!

コメント通報

通報するにはログインする必要があります