BUDを深く知ろう!

B.U.D.(Block Update Detector)という機構についてです。これを応用したものの代表例としては『実った瞬間収穫自動農場』が挙げられます。

実ったらすぐに収穫するので日照センサーよりも収量が増えるという代物ですね。(日照センサーも回数を増やせますが) カボチャを手で収穫していたらさっき収穫していたところがもう実ってるって場面はよく見かけるのではないでしょうか。

なおオブザーバーブロックが登場しました。ブロック1つによって実現するので非常に便利ですが、旧来のBUDを知っておくと幅が広がりますし、仕様は残っていくので、利用するしないにかかわらず今回のことは知っておくといいと、思います。

ブロックの更新??

B.U.D.はBlock Update Detector、
ブロックの 更新を 検知する 装置です。

ブロックが更新されるとはどういうことかというと。

  • カボチャが実る
  • サトウキビが伸びる
  • 水が流れてくる
  • レッドストーンのつながり方が変わる
  • 火の付いてないかまどが火のついたかまどに変わる

要はブロックが「なんか変わったら」反応してくれる装置を作ろう!ってのが今回のメインテーマです。

それぞれもっと突っ込んで(ややこしく)言い換えるならば、
カボチャやさとうきび:空気ブロックがそれらのブロックに「更新」
水が流れる:空気ブロックが水流ブロックに「更新」

他に例を挙げるならば土ブロックが草ブロックになるとか氷ブロックがが溶けて水源ブロックになるとか隣のピストンが伸びるとかってのも。

ちなみにBUDはフェンスゲートを開ける、羊が草をはむ、といったことに反応しないようです。

準接続(BUDバグ)

厳密にはこのような変化を検知する装置のことをBUDと呼ぶわけですが、
俗にBUDバグと呼ばれるものもあり、単にBUD・BUD化と言ったときにこちらを指すひともいます。 これはピストンやドロッパーが本来信号を受けとらないと予想される場所から受けてしまう、というものです。公式には準接続と呼んでいるようです。

内容としてはピストンが斜め上2つ上のブロックから信号を受け取れるというものです。2016-11-12_18-12-24 (ただしピストンが動作するには後述するように周辺座標での『ブロックの更新』が必要です)

BUDの仕組み

今回はこちらのBUDを紹介しましょう。 2016-11-12_18-14-50 左のピストンが自身の周りのブロックアップデートを検知します。次の動画から抜粋。

SethBlingさんの動画

(このほかにもピストンを利用したBUDやその解説があるのでぜひご覧くださいな。今回のことはここから訳しただけ感すらあります。)

このBUDの仕組みを理解するためにはピストンが動作する条件を知る必要があります。

    ピストンが動作する条件:
  1. ピストンに信号が伝わっていること
  2. ピストンの前のブロックが押し出せる状態であること

実はこれだけでは不十分です。プラス

  • ピストンの周りでブロックの更新がなされた

が必要です。

次のケースを考えます。 2016-11-12_18-16-51 この画像の状態から岩盤ブロックを取り除きます。どうなるでしょうか

2016-11-12_18-16-56

このピストンは接している座標のブロックの状態はどこも変わっていないので3つ目の条件『ピストンの周りでブロックの更新が起きた』が満たされていません。 結果条件1条件2は満たされていますが、ピストンは伸びないのです。

「3.ブロックの更新があったときに1.2.の条件に応じてピストンがその作動状態を変化させる」が正しい言い方かもしれません。

では機構の説明に 000はじめの状態では右のピストンにまんまるパウダーから信号が入っています。ピストンの前のブロックも押し出せる状態です。つまりブロックアップデートがあれば作動する状態です。

ブロックアップデートが起こりました。待機していた右のピストンが伸びます。 0000 レッドストーンブロックが動くので下のレッドストーンパウダーはOFFになります。そこからの信号がなくなるわけなので右のブロックもOFFです。

粘着ピストンはその隣にあるわけなので、状態が更新されます。粘着ピストンのアームはこの時点でOFFの状態に戻ります。

02

すぐに左のレッドストーントーチがONになります。右の粘着ピストンが引っ込んでいる以上、左のピストンは特に障害がないので伸び、再びレッドストーンブロックが右のピストンの前に戻ります。

03

右のピストンの隣レッドストーンブロックが右の粘着ピストンの前に戻ります。ブロックアップデートが起きているわけですが、左のピストンはまだ伸びている状態なので右の粘着ピストンはアームを伸ばせません。(作動しているピストンとアームは岩盤と同じだと思ってください。)

結果無限ループにはならず、最初の状態で待機することになります。

今回紹介したBUD以外にもトグルBUDというON/OFFの切り替えをするパターン、ドロッパーを利用したパターン、大釜を利用したもの、そしてコンパレーターを利用した”CUD”など様々な亜種があります。CUDは一番異質ですね。

一番最小なものはスライムブロックを利用したタイプで4ブロックのスペースを確保するだけで済みます。(PEではオブザーバーブロックがあるので、1ブロックですね)

BUDはMinecraft開発サイドが将来的にも残すとほのめかした経緯もありますし、ピストンやドロッパーの仕様とも深くかかわっています。修正の可能性は低いのではないかと多くの人が踏んでいます。PEは違うけど・・・

裏仕様・バグ的挙動を利用しているので好みが分かれるところかもしれませんが、活用すると自由度が広がることも確かです。その是非も含め 一度検討してみてはいかがでしょうか。

(※1) 移動中に左のピストンが伸びないのは移動中のブロックもまた岩盤と同じ状態になるためです。 同様にチェストやドロッパーなど 内部にアイテムを収納するブロック、 看板やコマンドブロックなどの文字列が入っているブロックも押せません。 これらは普通のブロックが持っている情報に加え、メタ(補足情報的な?)データをもっていて タイルエンティティと呼ばれるようです。(Minecraft wikiより)