収納数を調整できる自動仕分け機draft
V字クロックで2段のを作って紹介する
アクセス可能な範囲は何段?
https://gyazo.com/49caddf7cd38d4cca69806cdf0954ed0
https://gyazo.com/61a1a375a5ff026ebf34c27ccbd77a19
https://gyazo.com/1d607e06cd963039e58d6d935b82de11
https://gyazo.com/5c3fb275dc3f8f9968f42fcf027cdd9d
https://scrapbox.io/files/61336659a08d2f001d611fa1.mp4
https://scrapbox.io/files/613368354ee7a4001d9e3fde.mp4
https://scrapbox.io/files/613367e8574b8500231b91f0.mp4
第二章後半
アイテムエレベータ
9/5
他の人の記事でもホッパーとドロッパーが絡んだ時に「計算では間に合わないがなぜか間に合う」みたいなことが書いてあるから、どうやら1ティックの中での処理の順番の関係で差が出るのだろうなぁ。
これを実験しようとしたんだけど上京によって違う値になってしまった
Q1 : 時刻T0にドロッパーにシグナルが到達した場合、アイテムが射出されるのは何ティック後か
Q2: ホッパーXの上にどこにも繋がってないホッパーYがあるとする。時刻T0にYにアイテムが到達した場合、Xに到達するのは何ティック後か。
今の予想は両方1
プログラマ的透視能力を使って観察すると、ホッパーにはインベントリとは別に新しく追加されたアイテムを入れる配列があるはずだ。なぜなら直接追加してしまうと、それを吸い取れるホッパーが「アイテムあるから吸い取ろう」と処理してしまい、結果的に1ティックでたくさん移動してしまうから。
それとは別に「アイテム追加からのティック数」を保持する変数がある。送り出しの際にはこの値が4以上であるかどうかを判定することで「ホッパーに入れたものが毎ティック送り出される」という状況を防いでるはず。
このカウンタはドロッパーでアイテムをホッパーに入れた時にはリセットされる。そして「ホッパーでアイテムを入れてカウンタをリセットする処理」が「カウンタが4以上なら送り出す」の判定よりも1ティックの中で先に行われるので4ティック以上前に入ったアイテムが送り出されない。
この解釈が正しければ4ティックより短い間隔でドロッパーからアイテムが挿入されるホッパーからはアイテムが送り出されないことになる。ドロッパーを2つ使って交互に撃てば実験できそう。
「4ティック未満」ではなく「4ティック以下」が条件だったのでドロッパー1個で再現できた
https://gyazo.com/9d1eea625387681a947104436db1f9ca
サバイバルの6段チェストをこれでやろうと思ったが
奥行き6と結構でかいので前のバージョンを置いてる場所くらいしかいい置き場所がない
クロックの根本ではなく上でズレの調整をしないといけないが高所作業だしタイトに作られてるので取り回しに余裕がない
ケースバイケースで変わるから突き詰めても意味がないと思ってたけど、エレベータで持ち上げたものをチェストに入れてそこから吸うなら形は固定できる
と思ったがアイテムエレベーターでチェストに入るタイミングが同期されてないので…
しかしこれ、同期しない方が取り回しの自由度が高まって良いのでは
チェストに入れたものをホッパーで吸ってドロッパーに入れ、改めて射出すれば位相は揃う
アイテムエレベーター、周期4でいいだろ感
下でコンパレータ使ってクロックする例が挙げられてるが、その結果ホッパーに複数入ると壊れるとか微妙
下で判断したら上にアイテム余るじゃん、上と下からパウダー引いてワイヤードORでどうか?
ホッパーの長さによって適切な調整がどう変わるか?
クリエイティブで確認する
第三章
その他
ボタンは15ティックの長さのパルスを送出する。
リピーターは横からリピーターやコンパレータでシグナルを入れると出力をロックできる
---
収納数を調整できる自動仕分け機draft
検証環境 BE1.17.11、Realm、サバイバルクリエイティブに変えた
一度見様見真似で大体動く「アイテムごとに収納数を調整できる自動仕分け機」を作ったのだが壊してしまった
もう一度記事を確認しようと思ったら見れなくなっていた
仕方がないので再発明しよう
メモ
先に単純に止める場合の説明を書いた方がいいか
27スタック、1スタック64個、1個0.8秒、1382.4秒、およそ23分、マイクラの昼2回分
さて、このシグナルを使って上下のホッパーを交互にオンオフさせる。ホッパーは見た目でオンオフがわかりにくいのでまずトーチで挙動を確認する。
https://scrapbox.io/files/6130f74cdae669001dc03c63.mp4
https://scrapbox.io/files/6131068bf7dd2500207f5f26.mp4
問: この状態で上のチェストに物を入れたらどうなるか?
答: 下のホッパーに入る
理由
T1: 上のホッパーがONになり、1つ吸い取る
T2: 下のホッパーがONになり、上のホッパーの中身を吸い取る
これでは横のチェストに物が入らない、どうすれば良いか?
こうする?
T1: ドロッパーが上のホッパーに1つ入れる
T2: 上のホッパーがONで、チェストに入れられるなら入れる
T3: 下のホッパーがONになり、上のホッパーに残っているものを吸い取る
ドロッパー、なぜ?
1つずつにする必要がある
上のホッパーはチェストから直接アイテムを吸ってはいけない
常時アイテムが吸える状況では、オンである最後のティックにも吸ってしまい、それがたとえチェストに入るものであっても下のホッパーに吸われてしまう
追加あり
単に上のホッパーをT1, T2ともオンだとどうなる?
上のホッパーが1つ吸って、次のステップで送り出すより先に下が1つ吸う
上のホッパーにものを吸わせるのではなく、別のホッパーが送り出せば良いのでは?
そのホッパーがシグナルで制御されてない場合、上のホッパーがオフの間にもものが送り込まれてしまう
などを踏まえるとドロッパーの「オンの時間が2ティックあっても、1つだけ送り出す」という挙動がちょうどいい
なお、立ち上がりのタイミングではなく2ティック目で送り出す
追記
ホッパーが8ティックごとにしか動かないことにより「最後のティックで吸ってしまう」は防げる
あっ、そもそもホッパーが8ティックごとにしか動かないぞ
速いクロック信号ではダメだ
8ティックのクロック信号を作る必要がある
コンパレータがあるなら向かい合わせのホッパーにものを1つ入れてコンパレータで存在チェックをすればいい
ない場合、リピーターの最大遅延4ティックを重ねる?
https://scrapbox.io/files/613257c5c69368001dd7a578.mp4
うーん、うまく動かないぞ、全部下に流れてる
想定している動作
4オン4オフやそれより長いシグナルがくる(動画は5)
T0でドロッパーと下のホッパーがオンになる (ホッパーのオンとは動作停止)
T2?にドロッパーから上のホッパーにアイテムが入る
下のホッパーは停止していて上のホッパーは動いているので右のチェストにものが入る(期待した挙動)
実際の挙動: 下のチェストに入ってる
つづく
ホッパーの吸い取りが8ティックに1回なら上のホッパーの吸い取りに任せても良いのでは
うーん、5オンだと半々に別れて4オンだと全部下に行くなぁ
パルスのオンの幅が4だと全部下のチェストに入って、5だと半々になり、6だと上だけに入る。
なぜそうなるのかはわからないがオン6オフ6のシグナルを流すことが大事だということがわかった。
こうなる理由は多分ホッパーがオンになった瞬間に動くのではなく、2ティック遅れて動くのかな、と。
あ、違うな、長さ6でも半々に別れる。これはホッパーの挙動を確認するのが先か…
つまり整理すると
ホッパーからの送り出しには最低5ティック必要
5ティック目で吸い取りも発生する(おそらく送り出しより先に)
→だから長さ5のパルスを入れたケースで、6ティック目で下のホッパーがONになった時に上のホッパーが直前に吸ったものが残っていて、それを吸い取ってしまい「半々に別れる」という挙動になったわけだ
ドロッパーで流量制限する必要がある
できたできた「チェストに入れられるなら入れて、入れられないなら下のホッパーに渡す」というユニットがちゃんと動いた。これで備蓄上限を制御できる自動仕分け機ができる。
https://scrapbox.io/files/61331f53461a9b00230368ec.mp4
なんかもうやり終わった気持ちになってるのだが…
「長さ5のパルスを作る」ってのをコンパレータ無しで作る方法ってあるかな?
https://scrapbox.io/files/613309c07a57ee001d58a994.mp4
全体の中でそこだけコンパレータを使ってるので使わないでできたら「コンパレータのいらない自動仕分け機です」と言えるのだが…
あ、最大遅延のV字クロックでいいのか、解決!