# 紅石筆記 Redstone Note :::danger HackMD 的預覽主題必須設置成 **自訂CSS** 才能看見紅石線路圖 ::: 因為 Youtube 的播放清單太亂總是找不到資料,所以將這些影片網址整理了一下,順便加上了一些文字說明以方便尋找。 這裡整理的紅石內容以最新 **Java 版本**(1.21)的 survival redstone 為主,較少計算機、活塞門等內容。 ## 名詞釋義 - ==**Tick**==: 1 redstone tick 相當於 2 game tick (gt)。**筆記中提到的 tick 若無指定都是 game tick**。 - ==**Solid hitbox**==: 無法被穿越的 hitbox。大多數生物雖然有碰撞判定但仍然能被穿越,因此不是 solid hitbox。 - ==**方塊**==: 能放置就是方塊,不管是否有 hitbox,例如 `torch`、`water`、`grass`。 - ==**完整方塊**==: 六面都有完整一格 hitbox 的方塊。 - ==**相鄰方塊**==: 前後上下左右的方塊,**不包含斜對角**。 - ==**Update**==: Minecraft 中存在 block update、comparator update、block state update 等各種不同的 update。**筆記中提到的 update 若無指定都是 block update**。 - ==**BUD**==: - *[名詞]* **B**lock **U**pdate **D**etector 的縮寫。 - *[動詞]* 使紅石元件處於不穩定的狀態(例如被充能卻沒有啟動),需要另外被 update 才會回復正常狀態。這個狀態也有人稱作 bud power。 # Mods / Resource Packs Minecraft 有各種對於 理解紅石 / 設機機關 / 生存 有幫助的模組。 **※ 以下的模組皆需要 fabric**。 ## 安裝方式 1. 下載 [fabric installer](https://fabricmc.net/use/) (.EXE)。 2. 執行 exe 檔,選擇 minecraft 版本並點擊安裝。 3. 下載 [Fabric API](https://modrinth.com/mod/fabric-api) (許多 mod 需要 Fabric API)。在檔案總管搜尋 `%appdata%`,找到 `.minecraft` 資料夾,將 Fabric API 放進底下的 `mods`。 4. 將要安裝的 mod 下載至 `.minecraft/mods` (與 Fabric API 同位置)。 ::: info 若模組的快捷鍵按了沒有反應,可以嘗試按「Windows鍵」修復問題。 ::: ## [Carpet](https://www.curseforge.com/minecraft/mc-mods/carpet) - 幫助 debug / 設計 紅石機關 使用方式: [Carpet Mod for Minecraft 1.14/1.15 - Complete Guide](https://www.youtube.com/watch?v=Lt-ooRGpLz4) [Carpet Mod Wiki](https://github.com/gnembon/fabric-carpet/wiki) 可以找到所有指令的說明: - [Commands](https://github.com/gnembon/fabric-carpet/wiki/Commands) - [Current Available Settings](https://github.com/gnembon/fabric-carpet/wiki/Current-Available-Settings) :::spoiler **常用指令** - `/carpet` 顯示所有可用指令。 - `/carpet hopperCounters true` 以羊毛統計漏斗中的物品。 - `/counter` 顯示漏斗的物品統計。 - `/carpet fillUpdates false` 用指令填上方塊時不會 update 任何方塊(e.g. 鐵軌不會掉落)。 - `/carpet explosionNoBlockDamage true` 關閉 TNT 破壞。 - `/log <options>` 按下 tab 顯示 mobcaps/tps 等情報。 - `/profile <options>` 追蹤遊戲效能瓶頸的來源。 ::: ## [Litematica](https://www.curseforge.com/minecraft/mc-mods/litematica) - 機關藍圖 預設 M + C 開啟 config menu。 :::warning 需要安裝 [MaLiLib](https://www.curseforge.com/minecraft/mc-mods/malilib) 以正常執行。 ::: [Tutorial: How to Use Litematica](https://www.youtube.com/watch?v=a4o0iGI-JOA) ## [Tweakeroo](https://www.curseforge.com/minecraft/mc-mods/tweakeroo) 預設 X + C 開啟 config menu。 :::warning 需要安裝 [MaLiLib](https://www.curseforge.com/minecraft/mc-mods/malilib) 以正常執行。 ::: [Tweakeroo Tutorials](https://www.youtube.com/playlist?list=PLc1JHlscjWncegLG9lnA_DJNLW36SFt4S) :::spoiler 常用功能 - tweakFastBlockPlacement - 快速 / 精準 的方塊放置輔助。 - tweakFreeCamera - tweakGammaOveride - 提高遊戲亮度。 - tweakFlexibleBlockPlacement - 旋轉方塊方向、斜對角放置方塊。 - tweakPeriodicAttack - afk 揮劍。 - disableNetherFog ::: :::danger 部分方塊如 `observer`、`piston` 無法正常使用 tweakFlexibleBlockPlacement 旋轉方向的功能,需配合 carpet mod 的指令 `/carpet placementRotationFix true` 才可正常使用。 ::: ## 改善遊戲效能 元素系列的 mods 能在不改變遊戲行為的前提下大幅改善遊戲效能。 [Lithium](https://modrinth.com/mod/lithium) / [Sodium](https://modrinth.com/mod/sodium) ## Resource Packs 介紹: [Redstone Tweaks 2.0 | Minecraft Redstone Resource Pack | 1.20.x](https://www.youtube.com/watch?v=jMhlv0AnTmg) 下載: [Redstone Tweaks](https://modrinth.com/resourcepack/redstone-tweaks) # Redstone Components [Dissecting Minecraft #1: Basic Redstone Components](https://www.youtube.com/watch?v=oHmTDLE6geE&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) [Dissecting Minecraft #2: More Basic Redstone Components](https://www.youtube.com/watch?v=RhlA_O64hSA&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) [Redstone Components (Redstone Basics sub-series) ](https://www.youtube.com/playlist?list=PLimXw7OHxXpwg7wzeNYklApn1F1FWLk80)[Practical Redstone - A Step-by-Step Redstone Tutorial Series](https://www.youtube.com/playlist?list=PLmEBf0WZp2qvXdAP3GTJAun78--f7R3tG) [Practical Redstone Reloaded](https://www.youtube.com/playlist?list=PLmEBf0WZp2qs8aoteq1SaMg2pm-IILr88) ## Redstone Dust `redstone dust` turn on 時會產生 25 個 update,turn off 時則會產生 (訊號強度 × 25) 個 update,也就是一條訊號強度 15 的 `redstone dust` 在 turn off 時會產生 375 個 update。 這部影片將 `redstone dust` turn on/turn off 的所有 update 視覺化: [Redstone Dust Update Order](https://www.youtube.com/watch?v=SUTzbi_xcUg) 因為 `redstone dust` 糟糕的效能,在設計紅石機關時會避免**大量**的 `redstone dust` 劇烈變化,改以鐵軌傳遞訊號,或是降低訊號強度。少量的 `redstone dust` 對效能幾乎沒有影響。 ## Redstone Torch `redstone torch` 只對 **超過 2 tick** 的訊號有反應。 `redstone torch` 在 60 gt 內熄滅 8 次時會燒毀 (burn out),燒毀的 60 gt 之後若有 [block update](##Block-Update) 才會再次亮起。 ## Comparator [Dissecting Minecraft #7: The Comparator](https://www.youtube.com/watch?v=Y1K6f7lSz2Y&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) `comparator` 只對 **超過 2 tick** 的訊號有反應,但是**在 comparison mode 的狀態下就算 pulse 很短也會送出 [block update](###Block-Update)**。 `comparator` 能讀取的方塊狀態及對應的訊號強度: [Measure Block State](https://minecraft.wiki/w/Redstone_Comparator#Measure_block_state)。 除非訊號強度 ≥ 15,否則 `comparator` 會優先讀取後面方塊的 block state。 <div class="schematic large-image"> <div class="sprite dr-ew"></div> <div class="sprite dr-ew"></div> <br> <div class="sprite-container"> <span class="texture AB"></span> <span class="texture rd-ew_A"></span> </div> <div class="sprite-container"> <span class="texture AB"></span> <span class="texture rd-ew_A"></span> </div> <div class="sprite le-w_A"></div> <br> <div class="sprite rc-s"></div> <div class="sprite rc-s_A"></div> </div><br><br> ## Observer [Minecraft's Observers are More Powerful Than You Think](https://www.youtube.com/watch?v=xh511sviyXc&list=PLmEBf0WZp2qs8aoteq1SaMg2pm-IILr88) [20 Unusual Redstone Components](https://www.youtube.com/watch?v=0SlBt010FL4) `observer` 可以偵測 block state 改變,能配合各種能夠改變 block state 的方塊,用法十分多樣。 :::warning `observer` **偵測的是 block state 改變,不是 block update**。偵測 block update 是使用 [BUD](##BUD-Block-Update-Detector)。 ::: ## Piston `sticky piston` 接收的 pulse 小於 3 tick 時會吐出方塊。 `piston` 可以反應的最快的 clock 是 3 tick。 `piston` 在 (de)power 後**立刻**就會開始移動方塊,把方塊移動至目的地需要 2 tick,方塊在被移動的這 2 ticks 期間將成為 [block 36](https://technical-minecraft.fandom.com/wiki/Piston_Mechanics#Block_36_.2F_Piston_Tile_Entity),是**沒辦法被其他 piston 推動**的。 下圖半透明的方塊代表該方塊的 Block 36。三個箭頭分別代表 update、block event、2 ticks after。 <div class="schematic"> &emsp;&emsp;&emsp;&emsp;&emsp;&emsp; <div class="sprite-container"> <span class="texture St"></span> <span class="texture lighter"></span> </div> <div class="sprite air"></div>&emsp; <div class="sprite St"></div> <br> <div class="sprite St"></div> <div class="sprite air"></div>&emsp; <div class="sprite St"></div> <div class="sprite air"></div>&emsp; <div class="sprite-container"> <span class="texture se-n"></span> <span class="texture glass"></span> <span class="texture lighter"></span> </div> &ensp;<div class="sprite air"></div>&ensp; <div class="sprite se-n"></div> <br> <div class="sprite sp-n"></div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite sp-n"></div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite sp-n_A"></div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite sp-n_A"></div> </div> Piston Extension <div class="schematic"> <div class="sprite St"></div> <div class="sprite air"></div>&emsp; <div class="sprite St"></div> <br> <div class="sprite se-n"></div> <div class="sprite air"></div>&emsp; <div class="sprite se-n"></div> <div class="sprite air"></div>&emsp; <div class="sprite-container"> <span class="texture St"></span> <span class="texture lighter"></span> </div> &ensp;<div class="sprite air"></div>&ensp; <div class="sprite St"></div> <br> <div class="sprite sp-n_A"></div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite sp-n"></div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite-container"> <span class="texture sp-n"></span> <span class="texture lighter"></span> </div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite sp-n"></div> </div> Piston Retraction <div class="schematic"> <div class="sprite-container"> <span class="texture St"></span> <span class="texture lighter"></span> </div> <div class="sprite air"></div>&emsp; <div class="sprite-container"> <span class="texture St"></span> <span class="texture lighter"></span> </div> <div class="sprite air"></div>&emsp; <div class="sprite St"></div> <div class="sprite air"></div>&emsp; <div class="sprite St"></div> <br> <div class="sprite se-n"></div> <div class="sprite air"></div>&emsp; <div class="sprite se-n"></div> <br> <div class="sprite sp-n_A"></div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite sp-n"></div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite-container"> <span class="texture sp-n"></span> <span class="texture lighter"></span> </div> &ensp;<div class="sprite aw-e"></div>&ensp; <div class="sprite sp-n"></div> </div> Piston Dropping a Block :::info Block 36 在遊戲中的名稱是 `moving piston`,可以透過指令 `/setblock ~ ~ ~ minecraft:moving_piston` 得到,**舊版** Minecraft 在生存模式可以透過 [特殊的方式](https://www.youtube.com/watch?v=japKmrdZEic) 取得。Block 36 可以用爆炸移除。 ::: `piston` **直接**(中間沒有其他 delay) 經由其他 `piston` 推動的方塊來 power 會延遲 1 tick。**吐出方塊的 `sticky piston` 不會使下一個 `piston` 延遲 1 tick**。 <div class="schematic"> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite rd-se"></div> <div class="sprite rd-ew"></div> <div class="sprite RL"></div> <div class="sprite sp-e"></div> <div class="sprite BR"></div> <div class="sprite air"></div> <div class="sprite rr-e1"></div> <div class="sprite rd-ew"></div> <div class="sprite rd-ew"></div> <div class="sprite sp-e"></div> <div class="sprite BR"></div> <div class="sprite air"></div> <div class="sprite rr-e1"></div> <div class="sprite rd-ew"></div> <div class="sprite rd-ew"></div> <div class="sprite RL"></div> 8 ticks <br> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite rd-ns"></div> <br> <div class="sprite le-Sn"></div> <div class="sprite rr-e1"></div> <div class="sprite rd-nse"></div> <div class="sprite rd-ew"></div> <div class="sprite RL"></div> <div class="sprite rr-e1"></div> <div class="sprite rd-ew"></div> <div class="sprite rd-ew"></div> <div class="sprite rr-e1"></div> <div class="sprite rd-ew"></div> <div class="sprite rd-ew"></div> <div class="sprite rr-e1"></div> <div class="sprite rd-ew"></div> <div class="sprite rd-ew"></div> <div class="sprite rr-e1"></div> <div class="sprite rd-ew"></div> <div class="sprite rd-ew"></div> <div class="sprite RL"></div> 8 ticks <br> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite rd-ns"></div> <br> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite rd-ne"></div> <div class="sprite rd-ew"></div> <div class="sprite RL"></div> <div class="sprite sp-e"></div> <div class="sprite BR"></div> <div class="sprite air"></div> <div class="sprite sp-e"></div> <div class="sprite BR"></div> <div class="sprite air"></div> <div class="sprite sp-e"></div> <div class="sprite BR"></div> <div class="sprite air"></div> <div class="sprite sp-e"></div> <div class="sprite BR"></div> <div class="sprite air"></div> <div class="sprite RL"></div> 11 ticks <br><br></div> 上圖右側標記的是三條線路左右兩個 `redstone lamp` 亮起的時間差,上方兩個 `redstone lamp` 會同時亮起。最上方的線路因為 `piston` 是被 `repeater` power 的,所以沒有額外 1 tick 的延遲。 `piston` 更詳細的運作原理: [Precise Timing - Piston](#Piston49) ## Hopper [Demystifying Minecraft's Most COMPLEX block](https://www.youtube.com/watch?v=yxcbqLLkBp8) `hopper` 每次吸入物品後會有 8 tick 的冷卻,但是物品主動進入(不是被吸入) **空的** `hopper` 後,接收到這一個物品後的冷卻時間為 7 tick。以下圖為例,一物品從左容器到右容器在每個 `hopper` 中分別需花費 8, 7, 7 ticks,因為第一個 `hopper` 是自己吸入物品,不是由其他 `hopper` 將物品主動送入。 <div class="schematic"> <div class="sprite chest"></div> <br> <div class="sprite ho-Se"></div> <div class="sprite ho-Se"></div> <div class="sprite ho-Se"></div> <div class="sprite chest"></div> <br><br></div> 未鎖住的 `hopper` 每個 tick 都會搜尋上方是否有物品可以被吸入,大量未鎖住的 `hopper` 會占用 cpu 資源。如果 `hopper` 只用作物品的傳遞而不會吸入物品的話,可以在上面放上: - `composter`。這會使 `hopper` 無法吸入物品,改為確定上方的 `composter` 是否有 `bonemeal`。 - 完整方塊。上頭有完整方塊的 `hopper` 無法吸入在上方的,但還是可以從上方的 entity (`hopper minecart`、`chest boat` 等) 吸入物品。 ## Rails 基礎: [How To Use Minecarts And Rails](https://www.youtube.com/watch?v=JE0C8nN-ndc) 進階: [Cartstone Guide](https://www.youtube.com/playlist?list=PLl_3YnMJiSbD4vmBghFMEFgRlWi7k-Gea) `minecart` 在直線鐵軌上最高移動速度為 8 m/s;在轉彎的鐵軌上是以對角線移動,因此最高移動速度可達 $\sqrt{8^2 + 8^2} \approx 11.314$ m/s。 &ensp; `powered rail` 和 `activator rail` 在 (de)power 時會從離 power source **最遠**的鐵軌開始 update。 ### Rail T 字的鐵路在 depower 的狀態下 `rail` 會優先和座標軸**正向** 的鐵軌連結,power 時則相反。 <div class="schematic"> &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&ensp; <font color=red>x↾</font> <br> <div class="sprite air"></div> <div class="sprite ra-ns"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite ra-ns"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite ra-ns"></div> <div class="sprite air"></div> <br> <div class="sprite ra-ew"></div> <div class="sprite ra-ne"></div> <div class="sprite ra-ew"></div> <div class="sprite air"></div> <div class="sprite ra-ne"></div> <div class="sprite ra-ew"></div> <div class="sprite air"></div> <div class="sprite ra-ew"></div> <div class="sprite ra-nw"></div> <div class="sprite air"></div> <div class="sprite ra-ew"></div> <div class="sprite ra-se"></div> <div class="sprite ra-ew"></div> <font color="blue">⇀z</font> <br> &emsp;&emsp;&emsp;&emsp; <div class="sprite ra-ns"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite ra-ns"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite ra-ns"></div> <br><br></div> `minecart` 在**非彎道的軌道交錯**上會向座標軸**正向**繼續行駛。若交錯軌道是斜坡,則會往下坡方向行駛。 <div class="schematic"> <div class="sprite air"></div> <div class="sprite aw-s"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <font color=red>x↾</font> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite aw-n"></div> <br> <div class="sprite air"></div> <div class="sprite pr-ns_A"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite pr-ns_A"></div> <br> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite aw-e"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite aw-e"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ns_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite aw-w"></div> <font color=blue>⇀z</font> <br> <div class="sprite air"></div> <div class="sprite pr-ns_A"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite pr-ns_A"></div> <br> <div class="sprite air"></div> <div class="sprite aw-n"></div> </div> ### Activator Rail 功能 (when powered): - 引爆 `TNT minecart` - 使生物離開 `minecart` - 使 `hopper minecart` 停止吸取物品。`hopper minecart` 經過 powered `activator rail` 會停止吸取物品直到經過 unpowered `activator rail`。 ## TNT [Dissecting Minecraft #14: How TNT Works](https://www.youtube.com/watch?v=GUG8F7jhbfg&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) [EXPLOSIONS 101 - Minecraft](https://www.youtube.com/watch?v=RQF26Wj-gJA) - 若 `TNT` 引爆時所在的方塊具有 [blast resistance](https://minecraft.wiki/w/Explosion#Blast_resistance) 的特性如 `water`, `anvil` 等,則不會炸掉周圍方塊,但仍會對 entity 造成傷害。 > 由於 `ender chest` 是 blast resistance 且不足一格高,落在上面的 `TNT` 會判定所在的方塊為 `ender chest`,因此落在 `ender chest` 上的 `TNT` 無法破壞周圍方塊。 ::: danger 點燃後的 TNT entity 長寬高不足一格,只有 0.98,因此沒有辦法透過**任何方塊**的碰撞箱將點燃的 TNT 對齊在方塊正中央。 ::: ## Daylight Detector `daylight detector` 每 20 gt 才會更新一次訊號強度,所有 `daylight detector` 都是同時更新的。 # Redstone Circuits [Redstone Circuits (Redstone Basics sub-series)](https://www.youtube.com/playlist?list=PLimXw7OHxXpzYDVNRd-mOMAw-XDN8-htq) 能瞬間反應的 circuit 可參照 [Instant Wire](###Other-Instant-Wires)。 ## [Pulse](https://minecraft.wiki/w/Redstone_circuits/Pulse) [Dissecting Minecraft #3: Pulse Generators](https://www.youtube.com/watch?v=jdextxdFHB8&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) #### 簡單分辨 0 tick、1 tick,和 2 tick 以上的方式 觀察將方塊用 sticky piston 推向位於方塊正中央的 entity 的結果,可以用來分別這三種 pulse。 <div class="schematic"> <div class="sprite air"></div> <div class="sprite-container"> &ensp; <span class="texture mc-Sew"></span> <span class="texture glass"></span> </div> <div class="sprite air"></div> <div class="sprite-container"> &ensp; <span class="texture sp-Sw"></span> </div> &emsp;沒有移動 ⭢ 0 tick <br><br> <div class="sprite air"></div> <div class="sprite-container"> <span class="texture mc-Sew"></span> &ensp; <span class="texture glass"></span> </div> <div class="sprite air"></div> <div class="sprite-container"> &ensp; <span class="texture sp-Sw"></span> </div> &emsp;移動半格 ⭢ 1 tick <br><br> <div class="sprite-container"> &ensp; <span class="texture mc-Sew"></span> </div> <div class="sprite-container"> &ensp; <span class="texture glass"></span> </div> <div class="sprite air"></div> <div class="sprite-container"> &ensp; <span class="texture sp-Sw"></span> </div> &emsp;移動一格 ⭢ 2 tick 以上 <br><br></div> 還有一種確認 0 tick 的方式就是用仙人掌。0 tick 以外的 `sticky piston` 的 `piston head` 會使仙人掌 pop off。 ### [Zero Tick Signal](https://minecraft.wiki/w/Tutorials/Zero-ticking) [Practical Use of 0-Ticks and Instant Repeaters](https://www.youtube.com/watch?v=kBM7I6D59gI) [Redstone Basics: Using Observers To Create 0-tick Pulses](https://www.youtube.com/watch?v=lNhCGWLYj-o) [Basics of 0 ticks | Dustless 0 ticks | Redstone Dust 0 ticks](https://www.youtube.com/watch?v=iAd5aGUKRUM) Zero tick 基本的概念就是在同個 tick 之內 power 後 depower 一個紅石元件。應用上通常是 `sticky piston`,因為 zero tick 可以使 `sticky piston` 瞬間移動一格方塊。 :::warning 只有 `sticky piston` 可以利用 zero tick 瞬間移動方塊,普通 `piston` 不行,且只有 `sticky piston` 的前方一格方塊可以被瞬間推動,其他方塊仍然會花費 2 tick 來移動。 ::: 在實作時可能會發現對於同一個 0 tick pulse,有些 `piston` 會動作,有些不會,這些 `piston` 不會動作是由於它們在 update 之前 power 就已經被移除,儘管看見 `redstone dust` 有亮起。 為了確保 power 在每個 `piston` update 後才被移除,會在移除 power 的地方加入 [block event delay](##Block-Event)。 ### Extended 2 Tick Signal [Redstone Basics: Extended 2 Game Tick Signals](https://www.youtube.com/watch?v=VjzuJqWAPFQ) >影片中的 `observer` 已過時 Extended 2 tick signal 本質上還是 2 tick signal,但特別的是 `comparator` 和 `redstone torch` 會對這種 extended 2 tick signal 做出反應。利用這個特性我們可以用 redstone torch tower 傳送 2 tick pulse,使 `sticky piston` 吐出方塊。 Extended 2 tick signal 只能透過 `comparator`、`redstone torch` 和 `redstone dust` 傳遞,`repeater` 會將這個訊號變回普通的 2 tick。 #### 原理 平時 `comparator` 不會對 2 tick signal 反應是因為當收到訊號時,`comparator` 會創造一個 2 tick 延遲的 tile tick,2 tick 過後會重新計算新的訊號強度,一般的 2 tick signal 在 2 tick 後訊號就已經斷了,因此 `comparator` 判斷訊號強度仍然是 0。 Extended 2 tick signal 就是**確保 power source 在 `comparator` 重新計算訊號強度後才被移除**。`redstone torch` 也是一樣的原理,以下的實作方式 `redstone torch` 也同樣適用。 #### 實作方式 常用的方法有兩種,一種是在 power 後 2 tick 透過 block event 移除 power source,因為 block event 必定在 tile tick 之後才被處理,詳見 [Precise Timing](##A-Tick-in-Minecraft)。 另一種方法是 [Double Powering: A Powerful Technique](https://www.youtube.com/watch?v=d6TEN0VBZuk),用兩個 2 tick signal 同時 power 一個 `comparator`。一個訊號出現後會先 update `comparator`,然後 `comparator` 會創造 tile tick,接著第二個訊號才出現。2 tick 過後,第一個訊號消失,然後 `comparator` 重新計算訊號強度,此時第二個訊號還在,因此 `comparator` 會亮起。最後,第二個訊號消失,update `comparator`,`comparator` 創造 tile tick 在 2 tick 過後關閉。 ### 3 Tick Signal 3 tick 是 `sticky piston` 不會吐出方塊的最短的 pulse,通常小於 3 tick 的訊號就稱作 short pulse。 [3 Tick Pulse Generators (5 Unique Designs)](https://www.youtube.com/watch?v=KrlJnuKCgso) --- ## [Clocks](https://minecraft.wiki/w/Redstone_circuits/Clock) [Dissecting Minecraft #4: Redstone Clocks](https://www.youtube.com/watch?v=0_LbTV7Uk4c&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) [Overview of Minecraft Clock Circuits](https://www.youtube.com/watch?v=_GOG0UWTZ7I) 時間更長的 clock: [Compact adjustable 1 HOUR Clock](https://www.youtube.com/watch?v=8uVFLxfDHxs) [Clock with superpolynomial duration scaling](https://www.youtube.com/watch?v=ILmVzDqu4TA) ### Hopper Clock 這個網站能根據所需的 timer 時長估算 hopper timer 的設計: [Hopper Timer Calculator](https://ravinmaddhatter.com/2023/08/14/hopper-clock-calculator/) ### Jukebox Clock `music disc` 的播放時長從 1 分多鐘到將近 6 分鐘不等,可利用這些差異來製作不同時長的 clock。 [Jukebox Clock Database](https://docs.google.com/spreadsheets/d/1fwkY11zWWv3Lfe5TWJtrigvReck_cALqyJiqy4uAHKI) ### Minecart Clock 利用 `minecart` 不同速度及方塊不同 hitbox,排列組合出 700 種不同週期的 clock。這些 clock 週期大多落在 1-60 秒之間,最長則來到 10183 gt (約 9 分鐘),可以在 [Cart Clock Database](https://docs.google.com/spreadsheets/d/1synznvFsAJQ9zLubeZkN3vlhsgqPNkaEIBriSva_Axs) 查找需要週期對應的 clock。 [The Cart Clock Revolution](https://www.youtube.com/watch?v=_h6YhcDutTg) --- ## [Logic](https://minecraft.wiki/w/Redstone_circuits/Logic) [Dissecting Minecraft #5: Logic Gates](https://www.youtube.com/watch?v=d5p9bTBuRYk&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) [Redstone Logics (Redstone Basics sub-series)](https://www.youtube.com/playlist?list=PLimXw7OHxXpzolMUvr64ptHBq3tS9P1Bl) [Logical Redstone Tutorial 0: The Basics](https://www.youtube.com/watch?v=9qcH9q8P5Fg&list=PLKdeRz8UZy38CFM7tREMVL_TKJAOl6T9H) ### Dustless Logic Gates [1-Wide Tileable Observer Logic Gates \|| Redstone Computing](https://www.youtube.com/watch?v=Kn7hnJnDG5Y) --- ## Piston Extenders [Dissecting Minecraft #8: Piston Extenders](https://www.youtube.com/watch?v=txV7n4Q8kvI&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) [18 Types of Triple Piston Extenders [Flush/Vertical/Horizontal]](https://www.youtube.com/watch?v=7ibFUXnVQQk) [How to Make the SMALLEST Double and Triple Piston Extenders!!! [Horizontal/Vertical/Expandable]](https://www.youtube.com/watch?v=-wBBT_Ednmg) --- ## [BUD](https://minecraft.wiki/w/Tutorials/Block_update_detector) (Block Update Detector) [A Beginner Level Introduction to Quasi Connectivity/BUD Powering](https://www.youtube.com/watch?v=eyuYNDsxIHY) ### 常見的 BUD 設計 [Minecraft - 21 Block & Comparator Update Detectors - BUD & CUD](https://www.youtube.com/watch?v=AY6cKmTWPwY) :::spoiler **[Quasi-connectivity](https://minecraft.wiki/w/Tutorials/Quasi-connectivity) (QC)** - 擁有此特性的四個方塊: `dispensers`、`droppers`、`piston`、`sticky piston`。 - 以上方塊能夠被任何可以 power 其上方一格空間的東西 power,無論那一格是什麼方塊都可以,但是需要有 block upate 才會反應。 - 簡單來說,因為門是兩格高,可以將這些方塊當作門來判斷是否有被 power。 > 據說會有這個 ~~bug~~ feature 的原因就是因為當初直接把門的 code 拿來用.. ::: :::spoiler **`redstone dust` redirection** [Minecraft: Redirect Piston BUD Tutorial](https://www.youtube.com/watch?v=kzPyrnLUHIs&list=PL7VmhWGNRxKj2MJ5IyHUSRTM7id5ONWwa) 當 `redstone dust` 指向方向改變不會造成 update,用這個方式可以 BUD 任何紅石元件。 ::: :::spoiler **`piston` 無法 extend** [Compact Block Update Detectors](https://www.youtube.com/watch?v=Qp4_oQuReuE) 當`piston` 被 power 時無法 extend (前方有無法推動的方塊或達到 push limit),則 `piston` 之後就算可以推動也需要有 block update 才會反應。 ::: :::spoiler **推入/拉出 `detector rail`** 用 `piston` 將 `detector rail` 連同 `minecart` 一起推入,或是用 `sticky piston` 將 `detector rail` 從 `minecart` 底下拉出。`detector rail` 底下的方塊可以 BUD 任何紅石元件。 <div class="schematic"> <div class="sprite pi-e_A"></div> <div class="sprite pe-e"></div> <div class="sprite-container"> <span class="texture mc-Sew"></span> <span class="texture dr-Sew"></span> </div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite mc-Sew"></div> <div class="sprite dr-Sew"></div> <div class="sprite sp-w"></div> <br> <div class="sprite air"></div> <div class="sprite AB"></div> <div class="sprite RL-_A"></div> <div class="sprite RL"></div> <div class="sprite air"></div> <div class="sprite RL-_A"></div> <div class="sprite RL"></div> <div class="sprite AB"></div> <br> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite RL"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite RL-_A"></div> </div> ::: :::spoiler **Budded rails** `powered rail` 和 `activator rail` 在 (de)power 時,如果被 (de)power 的鐵軌不會改變狀態 (還有其他 power source),就不會 update 相鄰的鐵軌。 先 power 鐵軌左邊,後 power 鐵軌右邊時,因為該鐵軌仍然被左邊的 `redstone block` power,所以不會改變狀態,也不會 update 相鄰的鐵軌。此時右邊的鐵軌若有 block update 才會被 power。 <div class="schematic"> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew_A"></div> <div class="sprite pr-ew"></div> <div class="sprite pr-ew"></div> <div class="sprite pr-ew"></div> <br> <div class="sprite BR"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite BR"></div> </div> ::: ### [Block Update](https://minecraft.wiki/w/Block_update) #### 狀態改變時會發送 block upate 的方塊: - `piston`、`note block`、`bell`、`copper bulb`、`scaffolding`、`leaves` Update 相鄰方塊 - `redstone dust`、`redstone torch` Update 相鄰方塊 和 相鄰方塊的相鄰方塊 - `rail` - 水平: Update 相鄰方塊 和 下方一格空間的相鄰方塊 - 斜坡: Update 相鄰方塊 和 **上下方**一格空間的相鄰方塊 <div class="schematic"> <div class="sprie air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite SB-u"></div> <br> <div class="sprite air"></div> <div class="sprite SB-u"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite SB-u"></div> <div class="sprite SB-u"></div> <div class="sprite SB-u"></div> <br> <div class="sprite SB-u"></div> <div class="sprite pr-Sew_A"></div> <div class="sprite SB-u"></div> <div class="sprite air"></div> <div class="sprite SB-u"></div> <div class="sprite pr-Swu_A"></div> <div class="sprite SB-u"></div> <br> <div class="sprite SB-u"></div> <div class="sprite SB-u"></div> <div class="sprite SB-u"></div> <div class="sprite air"></div> <div class="sprite SB-u"></div> <div class="sprite SB-u"></div> <div class="sprite SB-u"></div> <br> <div class="sprite air"></div> <div class="sprite SB-u"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite air"></div> <div class="sprite SB-u"></div> </div> <style> .block-updates { font-size: 32px; line-height: 0.9em; color: orange; } </style> - `repeater`、`comparator`、`observer` Update 充能位置 和 充能位置的相鄰方塊 <div class="schematic"> <div class="sprite air"></div> <div class="sprite SB-u"></div> <br> <div class="sprite SB-u"></div> <div class="sprite BR-u"></div> <div class="sprite SB-u"></div> <br> <div class="sprite air"></div> <div class="sprite rr-n1_A"></div> </div> ### [CUD](https://minecraft.wiki/w/Tutorials/Comparator_update_detector) (Comparator Update Detector) [Minecraft - Comparator Update Detector (CUD)](https://www.youtube.com/watch?v=JIR7Komip5E) [CUDS EXPLAINED! Powerful But Forgotten Minecraft Java Redstone Component/Circuit](https://www.youtube.com/watch?v=wWTZB_LlFgY) CUD 除了可以偵測 block update 外,還能偵測 comparator update,這是 BUD 所做不到的。以下是會發送 comparator update 的行為: [What CUD detects](https://minecraft.wiki/w/Tutorials/Comparator_update_detector#What_it_detects)。 就像 `comparator` 可以隔著一格方塊讀取容器,`comparator` 也可以隔著一格方塊接受 comparator update。 #### [Silent CUD](https://www.reddit.com/r/redstone/comments/1hzmz5y/silent_cud/) 原理: 放置在打開的 `trapdoor` 上的 `detector rail` 不會 update `comparator`。 設置方式: 1. 在 `trapdoor` 上放置 `detector rail` 2. 透過紅石 power `trapdoor` (**不可手動開啟**) 3. 手動關閉 `trapdoor` 4. 放置 `chest minecart` 5. 移除 power source 6. 手動打開 `trapdoor` ### Constant Block/Comparator Update 有兩種設置可以在每個 tick 持續發送 update。 1. 當任何 entity 的 hitbox 進入 `detector rail` 所在的方塊(不需要實際觸碰到),`detector rail` 就會持續在周圍發送 comparator update。 2. 當 `hopper` 上方的容器(`chest`、`barrel`、`dropper`等)滿足以下條件,會持續在容器周圍發送 comparator update。讀取容器訊號的 `comparator` 在 **comparison mode** 下會持續發送 block update。 - 容器中再少一樣物品,用 `comparator` 讀取的訊號強度就會減一。 - `hopper` 中的每一格都放了與容器中不同的物品,因此無法吸出容器中的物品。 - `hopper` 不能是鎖住的,也不能是滿的。 ### Super Speed BUD Super Speed BUD 指的是可以在 3gt 內 reset 的 BUD。 [3gt Dustupdateless Speedbud](https://www.youtube.com/watch?v=6AFK9UxF9v0) [Super Speed BUD for 1.16](https://www.youtube.com/watch?v=uqbXqSJpECA) [Super Speed BUDs](https://www.youtube.com/watch?v=MeYaVepBhUU) ### Block State Update Detector [Hidden Observers in Minecraft | All the Function Without Ever Seeing It](https://www.youtube.com/watch?v=yYVhF4Q6rCM) 利用[浮空水](#Other-Bugs)偵測 block state 的改變,與 `observer` 的功能相同,但能更好的隱藏起來。 --- ## Other Circuits - [Dissecting Minecraft #6: Common Circuits](https://www.youtube.com/watch?v=OZBTB8NIggc&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) - [25 Minecraft Redstone Circuits YOU SHOULD KNOW!](https://www.youtube.com/watch?v=yhbvmbaIvcY) - [The Ridiculous Device That Does Everything | Minecraft](https://www.youtube.com/watch?v=Cmmzh3ctX6c) > latch, selector, T flip-flop, binary counter, progress bar, shift register - [How to Make EVERY T-FLIP FLOP in Minecraft!](https://www.youtube.com/watch?v=MPFySvA_Ugs) - [ABBA cicuit](https://minecraft.wiki/w/Redstone_circuits/Miscellaneous#ABBA_circuit) - [Pulse multiplier & Applications: Signal strength input | Minecraft](https://www.youtube.com/watch?v=QdxZzBJAkzA) - [Programable Pulse Multiplier Using CUD No Cooldown](https://www.youtube.com/watch?v=dCoDA_PLg6A) - [Smallest Quick Reset Redstone Counter (Pulse Divider) for Minecraft Java](https://www.youtube.com/watch?v=xRIfRAA6qUM) - [Minecraft: CBUD for 1.16.5](https://www.youtube.com/watch?v=lmdUnrbLl2g) ### Redcoder (Signal Strength Decoder) [WORKS IN 1.16.3: REDCODER TUTORIAL](https://www.youtube.com/watch?v=YLLnruDBJD0) [Minecraft: Smallest Stateless Redcoder](https://www.youtube.com/watch?v=7lHn2q0pCmo) [1.16+ Vertical Redcoder | Signal Strength decoder](https://www.youtube.com/watch?v=baQeotVa_W8) # Precise Timings 紅石機關中最重要的就是 timing。在 Minecraft 順暢執行時一秒有 20 game tick (gt),而 Minecraft 的一天有 24000 ticks,也就是 20 分鐘。 設計更精準的機關需要掌握 1 tick 內事件發生的順序 (e.g. 同時 power 兩個面對面的 piston,哪個 piston 會被推動)。 :::info 一般會使用 MSPT (milliseconds per tick) 來衡量遊戲執行的狀況,MSPT 指的是每個 tick 要花多少毫秒執行,如果超過 50 MSPT ,遊戲就無法以 20 TPS (ticks per second) 執行,就會開始 lag。 ::: ## A Tick in Minecraft 1 tick 之間 Minecraft 發生的事件: [Tick | Technical Minecraft Wikia](https://technical-minecraft.wiki/w/Tick) 簡略過程: 1. 處理 player input 2. **遊戲的 world time 加 1** 3. 處理 tile tick 4. 處理 block event (pistons) 5. 處理 entity 6. 處理 tile entity (block 36) 關於每個階段實際上做了什麼事: [Ticks | Technical Minecraft Wiki](https://www.technicalmc.xyz/article/view/ticks#player-inputs-phase) 也有說法是 player input 是最後處理的,這取決於你如何切割 1 tick。如果將 1 tick 的開始視為「遊戲的 world time 加 1」,則 player input 就是最後處理的。 :::info 沒有延遲的元件如 `redstone dust`、`rail`、`fence gate`、`trapdoor` 等,在任何時間都會立即 update,它們不屬於任何階段。Tile tick 和 block event 的排程也是立即執行的。 ::: ## [Tile Tick](https://technical-minecraft.wiki/w/Tile_Tick_Block) [Dissecting Minecraft #15: Tile Ticks](https://www.youtube.com/watch?v=NELKoPZJl04&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) Tile tick block 指的是那些有延遲的方塊,例如 `repeater`、`observer`、`flowing water` (每 5 tick 流動一格)、`sand` (浮空 2 tick 後開始掉落) 等。當這些方塊在被 (de)power 時會創造一個 N tick delay 的 tile tick,每個 tick 都會在 *(3)處理 tile tick* 的階段將 delay 減 1,delay 歸零時就會方塊就會開始動作。 ### Update Order [Update order in Minecraft](https://www.youtube.com/watch?v=1V9M8OIjjlM) Priority 越小越先被執行。這裡有列出不同 tile tick 的 priority 及例外: [List of all tile tick blocks | Technical Minecraft Wikia](https://technical-minecraft.fandom.com/wiki/Tile_Tick_Block#List_of_all_tile_tick_blocks)。若 priority 相同,則先被排程的先執行 (FIFO)。 ::: spoiler **應用: [These Redstone Signals are Broken | Minecraft](https://www.youtube.com/watch?v=Ahagry4Yxus)** 利用 `comparator` 分辨不同 priority 的訊號。**當 `comparator` 指向 `repeater` 時 priority 是 -1**。 - 若訊號來自 `observer` (prority = 0) 1. `observer` 傳送訊號 → `comparator` 接收訊號。 2. 2 tick 後 `comparator` 判斷是否 power (是) → `observer` 中斷訊號。 - 若訊號來自 `repeater` (prority = -1) 1. `repeater` 傳送訊號 → `comparator` 接收訊號。 2. 2 tick 後 `repeater` 中斷訊號 →`comparator` 判斷是否 power (否)。 ::: ### Player Input Bug ([MC-172213](https://bugs.mojang.com/browse/MC-172213)) 說明: [Precise Redstone Timings](https://www.youtube.com/watch?v=cFoGmiySikA) > I think sometimes the Mojang developers write codes seperately and then just throw it all together. Tile tick block 在由 player (de)power 時會少 1 tick 的 delay,(e.g. `redstone torch` 直接用 `lever` 來 power 的話只會有 1 tick delay),這是因為 player input 是在 world time 加 1 前處理的。 在 *(1)處理 player input* 時,遊戲會安排一個 N tick delay 的 tile tick,然後 *(2)遊戲的 world time 加 1*,接著在 *(3)處理 tile tick* 的階段馬上就減少 1 tick 的 delay,因此相當於略過了 1 tick 的等待。 ## [Block Event](https://www.technicalmc.xyz/article/view/ticks#block-event-phase) > Piston block events can activate and schedule another block event that is added at **the end** of the LinkedHashSet. This allow chaining multiple blockevents in the same tick. `piston` 是在 block event 階段處理的,而 `piston` 本身可以 update 相鄰的 `piston`, `piston` 所造成的一連串 block event 可以用來確保 `piston` 執行的順序,稱作 block event delay。 :::info 有人把 block event delay 稱為 microtick,不過 block event delay 這個名稱比較被接受。 ::: [Block Event Delay Counter](https://www.youtube.com/watch?v=PGi-ud-_030) :::spoiler 實例說明 下圖是一個常見的 zero tick 裝置,包含了 3 個 `piston`,由左至右編號分別為`A`, `B`, `C`。`observer` 發出訊號的同時被 `A piston` 推開,藉此 0 tick `C piston`。`B piston` 的作用是為了製造足夠的 block event delay,避免 `observer` 在 power `C piston` 前就被推走,因此不能替換為 `note block`。 <div class="schematic large-image"> <div class="sprite obs-Se"></div> <div class="sprite AB"></div> <div class="sprite sp-Se"></div> <br> <div class="sprite sp-Su"></div> <div class="sprite pi-Sd"></div> </div> </div><br><br> 運作過程如下 (考慮 worst case): 1. `observer` power `B piston`,然後 power `C piston`。`A piston` 尚未被 update。 | B | C | &ensp; | &ensp; | &ensp; | | - | - | - | - | - | 2. 到了 block event 階段,`B piston` update `A piston`,接著 `C piston` 啟動。 | ~~B~~ | ~~C~~ | A | &ensp; | &ensp; | | - | - | - | - | - | 3. `A piston` 推開 `observer`,`C piston` 失去 power。 | ~~B~~ | ~~C~~ | ~~A~~ | &ensp; | &ensp; | | - | - | - | - | - | ::: [XYZ - Microtick (Block event) Technology & Infinite Bandwidth Instant-wire](https://www.youtube.com/watch?v=G2dPXVIg_us) (影片中將 block event delay 稱作 microtick) ## Piston `piston` 雖然需要 2 tick 移動方塊,但它不是 tile tick block,而是在 block event 階段創造 tile entity (也就是 block 36),再由 tile entity 等待 2 tick。 [[Explanation] Precise Piston Mechanics](https://www.youtube.com/watch?v=k5Cv_3qRLoA) >影片刊誤: [[Explanation] Piston Mechanics (Correction + Addition)](https://www.youtube.com/watch?v=XwIPYl3cu3U) [活塞原理指南](https://www.bilibili.com/video/BV17w8izXEgV/) [Minecraft Tick Phases | Explaining Minecraft #5](https://www.youtube.com/watch?v=o9BNNDqeMWE&list=PLFftmjZcJUwsXJWLzls_GMAcdYSkxKn1x) ::: spoiler **`sticky piston` 接收的訊號小於 3 tick 時會吐出方塊** [Why Sticky Pistons Spit Out Their Blocks | Explaining Minecraft #13](https://www.youtube.com/watch?v=QCL5tJjA6ic&list=PLFftmjZcJUwsXJWLzls_GMAcdYSkxKn1x) `sticky piston` depower 時若還沒完成 extension, 則會在 *(4)處理 block event* 的階段就將前方一格的 tile entity 變回原本的方塊,而不會等到 *(6)處理 tile entity* 的階段才將其還原。 這個特性使吐出方塊的 `sticky piston` 成為許多 `piston` 特性的例外。 ::: ::: spoiler **`piston` 由 tile entity power 會延遲 1 tick** 移動的 power source 從 `block 36` 變回原本的方塊是發生在 *(6)處理 tile entities* 的階段,接著要等到下一個 tick 才能在 *(4)處理 block event* 階段創造 tile entity。 若經由 tile tick 來 power,就會在 *(3)處理 tile ticks* 的階段處理好,接者就是 *(4)處理 block event*,因此不會延遲 1 tick。 若 power source 是被 `sticky piston` 吐出的,則會在 *(4)處理 block event* 的階段就將 `block 36` 還原,然後就可以在同一個階段增加新的 block event,使下一個 piston 立即開始動作。 ::: ::: spoiler **`piston` 移動的方塊需要 3 tick 後才能被再次被 `piston` 移動** `piston` 移動方塊需要 2 tick,2 tick 過後在 *(6)處理 tile entities* 的階段將 `block 36` 變回原本的方塊後下個 `piston` 才能移動它,接著要等到下個 tick 才能在 *(4)處理 block event* 的階段移動那個方塊。 吐出方塊的 `sticky piston` 因為在 N tick (N < 3) 後 *(4)處理 block event* 時就將 `block 36` 還原,因此同個階段中,下個 `piston` 就已經能移動那個方塊了。 ::: ### 方塊移動順序 `piston` 在移動方塊時,每個方塊的 update 順序是固定的。 1. 方塊會被分割成數條與 `piston` 運動方向平行的直線。 2. 以 `piston` 所在的直線為作為基準,曼哈頓距離最遠的直線會優先進行 update,並根據 +X, -X, +Z, -Z, +Y, -Y 的順序來解決距離相同的情況。 3. 在每條直線中,會從移動方向的最前端方塊開始 update,向後依序進行。 Extend 時 `piston` 本身會**最後** update,retract 時 `piston` 本身會**最先** update。 :::spoiler 實例說明 下圖 `sticky piston` 左右移動多個 `slime block`。`slime block` 可分為 A, B, C 三條平行於 `piston` 運動方向的直線。`slime block` 的編號依次為 1-6。 <div class="schematic"> <div class="sprite SL"></div> <div class="sprite SL"></div> <div class="sprite SL"></div> --- 4️⃣5️⃣6️⃣ --- A [ 距離 2 ] <br> <div class="sprite SL"></div> <div class="sprite air"></div> <div class="sprite air"></div> --- 3️⃣&ensp;&ensp;&emsp; --- B [ 距離 1 ] <br> <div class="sprite SL"></div> <div class="sprite SL"></div> <div class="sprite sp-w"></div> --- 2️⃣1️⃣&emsp; --- C [ 距離 0 ] <br><br></div> 直線更新的順序由遠至近為 A → B → C。 - Extend 時 update 順序: [4 → 5 → 6] → [3] → [2 → 1] → `piston`。 - Retract 時 update 順序: `piston` -> [6 → 5 → 4] → [3] → [1 → 2]。 ::: ## Redstone Dust `redstone dust` 的 update order 十分難以捉摸,因此機關比較少依賴 `redstone dust` 的 update order,但它還是有固定的規則。 [Redstone Dust Update Order](https://www.youtube.com/watch?v=2mjZuWJDB0k) [Redstone Update Order](https://www.youtube.com/watch?v=XVvLWlckXLs) [Why is redstone locational in Minecraft?](https://www.youtube.com/watch?v=7gF5mbjFies) ### Simple Order 當 `redstone dust` 是一直線時,update 順序是 -X, +X, -Y, +Y, -Z, +Z。 ### Full Order `redstone dust` 會產生 7 個 notifier(自己 + 相鄰方塊),每個 notifier 會 update 相鄰方塊。這 7 個 notifier 產生的順序要看 complete order,但每個 notifier update 相鄰方塊時則是依照 simple order。 ### Complete Order Notifier 有三組 update 順序: 1. 中間 2. +Y, -Z, -X 3. -Y, +Z, +X 這三組 update 的順序未知,但每組中的 update 順序是固定的。這個順序在 97% 的位置是正確的,在另外 3% 的位置上在 Z 方向走兩格必定是 97% 的位置。 ## Instant Wire [0 Tick Basics (Part 1) - Instant Repeaters, Basic 0 Tick Gens](https://www.youtube.com/watch?v=-za2nU1QbRE&list=PLpgnhv91jhlEqOBg_idyUJnNuCwQncBgk) [How to | 0 Ticks!](https://www.youtube.com/watch?v=4oX_CHaQuPM&list=PLpgnhv91jhlEqOBg_idyUJnNuCwQncBgk) ### Instant Repeater [Dissecting Minecraft #13: Instant Wire](https://www.youtube.com/watch?v=yYn3CFczLm8&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) [Lag friendly instant repeaters](https://www.youtube.com/watch?v=yfcVLNNmbNQ) [1 wide spam-proof 0-tick instant repeater](https://www.youtube.com/watch?v=VfQZ3dAIlS8) #### Vertical Instant Wire [Minecraft: Vertical Instant Wires + Item Elevators](https://www.youtube.com/watch?v=R74RO8XhEUQ) [1.5+ Dustless and 6gt reset instawire](https://www.youtube.com/watch?v=xBbqrLuYU0w) ### Instant Rail [Robust Instant Wire | Minecraft](https://www.youtube.com/watch?v=nJx-o9fDVm4) [Two Way Instant Wire & Instant Dropperline](https://www.youtube.com/watch?v=ktsJjiHVUDE) [インスタントレール詳論 | Minecraft Java 1.18.2](https://www.youtube.com/watch?v=wWEioi2gVlg) ### Instant Comparator [Instant Comparator Line](https://www.youtube.com/watch?v=Tz2MLYriznY) [Lag-Friendly Instant Comparator Line](https://www.youtube.com/watch?v=pS90tcZYng0) [Minecraft Instant Comparator](https://www.youtube.com/watch?v=1bzLUDAzGS8) ::: spoiler 原理說明 當 `comparator` 被 update 時,如果當前的訊號強度會改變,它就會安排一個 2 tick 延遲的 tile tick。2 tick 過後處理這個 tile tick 時,`comparator` 會再重新計算一次新的訊號強度。 Instant comparator 的運作方式是提前 update 所有的 `comparator`,使它們同時在 2 tick 過後重新計算 訊號強度,因此要確保前面的 `comparator` 比後面的先被 update,後面的 `comparator` 在計算新訊號強度時算出的才會是前面 `comparator` 的訊號強度。 ::: #### Falling Edge Instant Comparator 常見將 instant comparator 瞬間關閉的方法有兩種,一種是 update `comparator` 的 input 端,這種方法的好處是 rising edge 和 falling edge 用的都是相同的 update,設計上比較簡單,缺點是無法處理 [≥ 15 的訊號強度](##Overloaded-Signal-Strength),因為被 update 時訊號強度不會改變,因此就不會安排 tile tick。 另一種則是將 `comparator` 設為 **subtraction mode**,關閉時 **update `comparator` 的側端**,這樣確保就算訊號強度 ≥ 15 在 update 時也會改變大小,缺點是 rising edge 和 falling edge 的 update 是分開的。 #### Signal Strength to Pulse Length [Long Distance Signal Strength Transmission made Simple](https://www.youtube.com/watch?v=IpF3Su9twvI) 快速在長距離傳遞不同訊號強度除了使用 instant comparator 外,也可以先將 訊號強度轉換成 pulse length,用 instant repeater 傳送後再將 pulse length 轉回訊號強度。 這個方法比 instant comparator 慢,但花費時間不會隨距離增加,而且簡單很多。缺點是要傳遞越大的訊號要花費越多時間。 ### Other Instant Wires - **Instant logic gates**: [Instant Logic Gates](https://www.youtube.com/watch?v=hqbqvjqkJiQ) > 影片中除了 NOT gate 以外就沒有詳細教學,要製作其他 instant logic gate 只要將原本 logic gate 中的 `redstone torch` 替換成影片中的 instant NOT gate 即可。 - **Instant dropper line**: [Easy Instant Dropper Line: Fast & Precise | Minecraft 1.16+](https://www.youtube.com/watch?v=MAnZM269I-o) - **Instant redcoder**: [Instant Expandable Redcoder](https://www.youtube.com/watch?v=WDYU5HKJzb4) (利用 [instant comparator](###Instant-Comparator) 達成) - **Instant ABBA**: [How to | 0 tick ABBAs](https://www.youtube.com/watch?v=YyZ9xCMA15Y) # ~~Bugs~~ Features > Minecraft 沒有 bug,只有 feature。 ## TNT Duping TNT duping 複製的是**點燃的 TNT 實體**,不是複製 TNT 這個物品。 ### 原理 [TNT Duping Explained | Explaining Minecraft #10](https://www.youtube.com/watch?v=8eFSfDWTZx4&list=PLFftmjZcJUwsXJWLzls_GMAcdYSkxKn1x) Coral based TNT duping update order: `coral` → `TNT` → power source (`detector rail` 底下的方塊) ### Coral Based TNT Duper [Minecraft highly configurable tnt duper](https://www.youtube.com/watch?v=Dg-uSzuyRX8) 如何組裝 TNT duper: [How to build SIMPLE TNT Dupers for minecraft 1.17.1](https://www.youtube.com/watch?v=JRp_miTC65Y) ### TNT Duper Variations [Mini TNT Duper V2 With NO SLIME OR CORAL](https://www.youtube.com/watch?v=Y7r89E91QrI) [Cartless TNT Dupers](https://www.youtube.com/watch?v=cLMhPTUKI38) [Simple TNT Dupers with NO CORAL | TNT Duping Explanation](https://www.youtube.com/watch?v=KPH1UCvyrkE) ### One Wide Tilable [Compact observer-based TNT duper](https://www.youtube.com/watch?v=jrAZX4r__gY) --- ## Silly String [这玩意儿啾竟怎么刷的?刷线机原理探讨 - 含手动刷线机和【百万】无人刷线机](https://www.bilibili.com/read/cv18551694/) 應用: [minecraft auto string duper / tripwire duper - 1728kph](https://www.youtube.com/watch?v=4Ur2OHiUsHc) [weird 30gt clock](https://www.youtube.com/watch?v=bPE9Qmf9tKA) [Unlimited Obsidian Platform Deletion (1.13-1.20.2+)[with Silly String]](https://www.youtube.com/watch?v=UK0ITdepa24) [Update-supression-less sliced portal (works from 1.13-1.20.2+)](https://www.youtube.com/watch?v=iBbXuK79syA) --- ## Item Duping (Rail, Carpet, Gravity Blocks) ### Rail Duping - 需要 `coral` 和 `slime`: [FAST Rail Duper Tutorial](https://www.youtube.com/watch?v=cRUjN1XPR-o) - 需要 `slime` 或 `honey`: [NEW 1.16 Minecraft EASY INFINITE RAIL DUPLICATION GLITCH](https://www.youtube.com/watch?v=9u4hTWyF3Ks) 應用: [Super Charged Railway Builder](https://www.youtube.com/watch?v=_IAIyNNMTs4) ### Carpet Duping 可以用作簡易的燃料。 - 需要 `slime`: [Carpet Duper (10k+ Per Hour)](https://www.youtube.com/watch?v=k2P5dN4Tmc0) - 不需要任何 `slime` 或 `sticky piston`: [Super Carpet Duper Tutorial - Minecraft 1.16 - Slimeless, Simple, Fast](https://www.youtube.com/watch?v=c-ocnvN9q8Y) ### Sand / Gravel / Concrete Powder Duping [Simple Sand and Concrete Generator](https://www.youtube.com/watch?v=wfeGyXJOCBw) ### Dragon Egg / Anvil Duping [Simple Dragon Egg Generator](https://www.youtube.com/watch?v=6pjILKM92gQ) :::info 如何移除 `end portal frame`: [New Impossible Block Breaking for Survival](https://www.youtube.com/watch?v=EgvsoLxC3iI&t=156s) ::: --- ## [Bedrock Breaking](https://minecraft.wiki/w/Tutorials/Breaking_bedrock) [Dissecting Minecraft #16: How to Break Bedrock](https://www.youtube.com/watch?v=c3uuLUSccQI&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) 各種破壞 `bedrock` 的設置: [[1.10~1.16+] More 100% Success Bedrock Breaking Methods](https://www.youtube.com/watch?v=UcxmUl65nYM) [Automatic Breaking Bedrock Flying Machine](https://www.youtube.com/watch?v=SP_M-8QA5f0) 解釋: [Piston-based bedrock breaking setup explained](https://www.youtube.com/watch?v=ziu9_4PuYw4) 全自動的裝置: [1 overhead 3 way bedrock breaker](https://www.youtube.com/watch?v=nFqvlNi-hZo) ### Remove Bedrock by Hand 透過製造巨大的 lag spike,玩家也可以手動在 1 tick 內完成移除 `bedrock` 所需的所有步驟。這部影片利用 [`redstone dust` 糟糕透頂的優化](##Redstone-Dust)製造 lag spike: [Cheap, Fast, Reliable Bedrock Breaker Using Redstone Lag (Improved Video)](https://www.youtube.com/watch?v=JUfFWr9WCAs) 另一個方法是利用特殊的 pulse,在特定 [tick phase](##A-Tick-in-Minecraft) 中 depower 再 power `piston`,使遊戲生成 `headless piston`。這部影片中使用了 20Hz 的 clock 在每一個 tick 都產生這種特殊的 pulse: [Bedrock breaking alternative.(No explosive, no server freezing, no hacked client)(1.16~1.20)](https://www.youtube.com/watch?v=vPZ9ADAT2WU) :::warning 上述兩種人工的方法前提是玩家能夠 instant mine `piston`,因此需要 *efficiency 5* 的 `diamond pickaxe` 搭配 *Haste 2* `beacon`。 ::: ### Remove Bedrock with Mods 有些客戶端模組可以用來輔助移除 `bedrock`,不需要在 server 安裝任何模組。 [**Fabric Bedrock Miner**](https://www.curseforge.com/minecraft/mc-mods/fabric-bedrock-miner) 透過模組自動在 1 tick 內完成移除 `bedrock` 所需的所有步驟。 [【MC】Easily break 5 bedrocks in 1 second ! Client fabric mod: Bedrock Miner released (1.16+)(GPLv3)](https://www.youtube.com/watch?v=b8Y86yxjr_Y) - 優點: 簡單快速。 - 缺點: 只能向下移除,且需要 *efficiency 5* 的 `diamond pickaxe` 搭配 *Haste 2* `beacon`。 [**Easy Bedrock Breaker**](https://modrinth.com/mod/easy-bedrock-breaker) 透過模組延遲客戶端封包,等 player 完成移除 `bedrock` 所需的所有步驟後再一次將封包全部送出。 [easy bedrock breaker mod](https://www.youtube.com/watch?v=SLL8uwEe5fc) - 優點: 自由度較高,只需要 *efficiency 5* 的 `diamond pickaxe`,不用 *Haste 2* `beacon`。 - 缺點: 較慢,需要手動執行移除 `bedrock` 所需的所有步驟。 --- ## Other Bugs - Redstone components lose 1 tick of delay when (de-)activated by a player input ([MC-172213](https://bugs.mojang.com/browse/MC-172213)) - End of `repeater` / `comparator` chain not updating ([MC-54711](https://bugs.mojang.com/browse/MC-54711?fbclid=IwAR0rweg4JuEZW7occj718-IeY0k7sk3FhPujs8VR00sOucH2Eyk_6KNKGnI)) ![](https://i.imgur.com/B494E5N.gif =300x) - [How To Make Floating Water & Sand with Explanation | Minecraft | Java Edition](https://www.youtube.com/watch?v=98CgpUMi1tY) - [Minecraft 1.16+: Water without source and sponge without block updates](https://www.youtube.com/watch?v=QVOONJ1OY44) - [Instant Liquid Flow - Minecraft 1.17+](https://www.youtube.com/watch?v=9QpinJYueWA) ### Overloaded Signal Strength :::danger 最新版本已無法在生存模式中取得 stacked unstackable items,只能用指令: `/summon minecraft:item ~ ~ ~ {Item:{id:"minecraft:diamond_pickaxe",Count:64b}}` ::: 利用 stacked unstackable items 放在箱子中,使 comparator 讀出大於 15 的訊號強度。 通常運用在傳遞資訊。e.g. 將訊息 enocde 成 256 bits,用 [instant comparator line](#Instant-Comparator) 將最高強度 256 的訊號傳出,再 decode 訊號強度。 [Overloaded Signal Strength to Decimal | Minecraft](https://www.youtube.com/watch?v=R5VuagERLWA) # Redstone Contraptions [Redstone Builds Everyone Should Know](https://www.youtube.com/watch?v=B2esricKcE8) ## Chunk Loading [Chunk Loading And Active Chunks](https://www.youtube.com/watch?v=dx5Wd28AKxQ) [Chunkloading in Vanilla Minecraft](https://www.youtube.com/watch?v=KnZ5nlQbFvo) 當 entity 穿過任何 portal 或 end gateway,會加載對面 15 秒。範圍是 3×3 的 entity processing chunk,和外圍 5×5 的 lazy processing chunk,以傳送過去 entity 所在的區塊為中心。 - Entity Processing Chunk: 遊戲正常執行。 - Lazy Processing Chunk: 紅石正常運行,但不會處理 entity。這個範圍的 mob 不會 despawn 但會算進 mob cap。 ### Spawn Chunk 尋找 spawn chunk 範圍可以使用 [SPAWN CHUNKS READER](https://www.chunkbase.com/apps/spawn-chunks-reader),這個工具需要用到世界的 level.dat 檔案,如果沒辦法獲得這個檔案,可以使用這個方法: [How To Find Your Spawn Chunks - Step By Step Tutorial](https://www.youtube.com/watch?v=_D4iTSMUX1o) ### Nether Portal Chunkloader [24/7 Honey Farm And New Perma Loader](https://www.youtube.com/watch?v=aKSFk4_Q2IA) standard design、lag friendly [Simple Portal Chunk Loader](https://www.youtube.com/watch?v=B8z7q_pwjL4) simple、pigman-proof、user-friendly [Minecraft Chunk Loader - Simple And Reliable - Doesn't Break on Server Crash](https://www.youtube.com/watch?v=BUDEwjGUimo) **reliable**、pigman-proof、lag friendly [Easy Pigman-Proof Minecart Chunkloader](https://www.youtube.com/watch?v=zEMuvzcApac) pigman-proof、lag friendly、user-friendly [The Simplest Portal Chunkloader](https://www.youtube.com/watch?v=jY9L4Xrohm4) **simple**、pigman-proof、user-friendly ### End Gateway Chunkloader ::: warning 穿越 end gateway 的 entity 會出現在 gateway 11×11 格內距離最遠且擁有完整 hitbox 的方塊上,所以**和傳送門不一定會在同一個區塊**。 ::: [1.21's New Ultimate End Chunkloader](https://www.youtube.com/watch?v=ITTC2Gx9N1E) ### Chunk Reload Detector 偵測裝置所在的 chunk 是否被 unload 過。 [Automatic Chunk Reloader](https://www.youtube.com/watch?v=s4rFRZ0rDoc) ### Lazy Chunk Detector 偵測裝置所在的 chunk 是否為 lazy chunk。 [[Movable] Lazy Processing Chunk detector (with auto-reset)](https://www.youtube.com/watch?v=eES2OMEk8tE) --- ## Flying Machine (Slimestone) [Basics of Slimeblock Flying Machines Tutorial](https://www.youtube.com/watch?v=UoqGvhLiG9A) [Dissecting Minecraft #9: Flying Machines](https://www.youtube.com/watch?v=4Pym6T7drrk&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) [Self Returning Flying Machines](https://www.youtube.com/watch?v=OnCXg5YkNCA) [Flying Machine Basics ( Part I ) - Minecraft](https://www.youtube.com/watch?v=P8jlieUuR2s) [FLYING MACHINE Basics Part II - Extensions - Minecraft](https://www.youtube.com/watch?v=U-J69bq_hmU) [Minecraft Flying Machine Basics #1: Engines & Extensions](https://www.youtube.com/watch?v=BTZ0UsNihN4) [Minecraft Flying Machine Basics #2: BUD wires, movable water, and other useful circuits](https://www.youtube.com/watch?v=4mmJGFKTYc0) [Minecraft Flying Machine Basics #3: Useful logic circuits](https://www.youtube.com/watch?v=dh3tThLnKWE) ### Movable Return Stations [Basic 3 Directional Block Pushing/Pulling Machine](https://www.youtube.com/watch?v=80sPr95_Kho) [Flying Machine Returning Systems](https://www.youtube.com/watch?v=RBHtgIcnIT8) ### 各種速度的 Flying Machines 最常見的 observer based flying machine 速度是 2 m/s (10 tick engine) ,但除此之外還有很多不同速度的設計。 #### Slower Engines [Slow Flying Machine Engine (one direction)](https://www.youtube.com/watch?v=C1ISMqmKb98) #### Faster Engines 9 tick engine: [Flying machines with only two pistons](https://www.youtube.com/watch?v=zGwt1X2EvBA) 8 tick engine: [8 Tick Engine For Flying Machines](https://www.youtube.com/watch?v=KujvHdHhygI) 7 tick engine: [7 Tick Engine For Flying Machines](https://www.youtube.com/watch?v=ZAl4M9uWWTg) 6 tick engine: [Compact Fast Flying Machine 3.3 m/s](https://www.youtube.com/watch?v=vYAFN1Z9mIs) 4.4 m/s engine: [Compact 4.4 m/s engine with extensions](https://www.youtube.com/watch?v=H1L9AndqnIg) :::info [理論上速度最快的 flying machine](https://www.youtube.com/watch?v=FkitvfBbBxw) 可達 6.6 m/s,因為 `piston` 需要 3 gt 的反應時間。目前最快的 flying machine 為 [FASTEST Flying Machine in Minecraft! (5 blocks/second)](https://www.youtube.com/watch?v=oJ3ITyhOVRw)。 ::: ### 4 Way Flying Machines [Minecraft: MORE Efficient 4 Directional Flying Machine | One Take | 1.15.2+ Java Edition](https://www.youtube.com/watch?v=RaD97AWBXas) [Compact 4 Way Flying Machine](https://www.youtube.com/watch?v=OFDG7pjoXTc) [Vertical 4 Way Flying Machine](https://www.youtube.com/watch?v=j7dE3iUG9F0) ### 斜向前進的 Flying Machines [Extensions For Diagonal Flying Machines](https://www.youtube.com/watch?v=CktaZ9UUIa0) [26.5° And 18.4° Flying Machines](https://www.youtube.com/watch?v=aXAuvi8WujI) ### 實用的 Flying Machine 設計 [Player Controlled Direction Changing 2 Way Flying Machine](https://www.youtube.com/watch?v=hVOZb0XV1QY) [Self Returning 2-Way Flying Piston Wall](https://www.youtube.com/watch?v=7wawuf4VXcw) --- ## Wireless Redstone ### Player Detector 利用 `pufferfish` 偵測範圍 5×5 格內的玩家: [Reliable Pufferfish detector Minecraft](https://www.youtube.com/watch?v=6tE5yvSUauI) 利用生物遊走偵測附近的玩家(偵測範圍較大): [Player detector [all java versions]](https://www.youtube.com/watch?v=zFICPpBpvRE) 利用 `allay` 偵測特定玩家在附近: [Smart Player Detectors in Minecraft - Different Outputs for Different Players](https://www.youtube.com/watch?v=VaEXpG0wI9g) 利用 `cat` 偵測特定玩家是否上線: [Simple Player Online Detector Minecraft 1.16](https://www.youtube.com/watch?v=BudRgJyLPlA) - 應用: [Improved Wireless Teleportation Using CATS!( ( 1.19, 1.20+)](https://www.youtube.com/watch?v=iapoJXnnoQU) ### 傳遞紅石訊號 垂直向下: [Wireless Redstone [vertical]](https://www.youtube.com/watch?v=ae-yHkx0w8Y) **限制**: `daylight detector` 必須能 access 天空 水平直線: [Wireless Redstone With Tripwire Hook](https://www.youtube.com/watch?v=t1Onu6tWzs4) **限制**: 範圍只有直線 40 格 ### 真·無線紅石 [Wireless Redstone in Minecraft 1.16+ Survival (Reliable + Unlimited Range)](https://www.youtube.com/watch?v=hr-twzxs6FM) [The Wonderful World of Wireless Redstone](https://www.youtube.com/watch?v=sBNuqZKa_Lw) **限制**: - 在 multi player 上才能可靠運作 (single player 可能會接收到錯誤的訊號) - 無法跨 dimension 原理: [Wireless Redstone 2: The Game Mechanics](https://www.youtube.com/watch?v=FLynwXDnETI) 增加頻寬的改良: [New High Speed '5G' Wireless Redstone in Minecraft + Explanation](https://www.youtube.com/watch?v=U2HT3L6nkJA) 1-Wide Tileable: [1-Wide Tileable Wireless Redstone Transmitter and Receiver](https://www.youtube.com/watch?v=XER9rVQA4OU) 在 single player 也能運作的改良: [Wireless Redstone | Better Error Correction and Bug Fixes](https://www.youtube.com/watch?v=PjheW_68Adk) --- ## Item Sorting (Storage Tech) 基本的 item sorter 設計: [5 Useful Item Sorters For Minecraft Java & Bedrock!](https://www.youtube.com/watch?v=IDmxkObgA2s) 如何設計大型的 storage system: [Storage Tech](https://www.youtube.com/playlist?list=PLckoLTi5UhFNR_1Snhquo0fRRTziAdUVq) ### Double Speed Item Sorter [Very Compact Double Speed Item Sorter](https://www.youtube.com/watch?v=rWbzfWFXHXw) 在這個設置中,上方的 `hopper` 會將物品送入下方的 `hopper`,同時下方的 `hopper` 會將上方 `hopper` 的物品吸入,因此可以達到兩倍速。由於上方 `hopper` 在傳遞物品時會進入冷卻時間,導致物品沒辦法被可靠的吸入,因此需要嚴格控制物品經過`hopper` 的時間,等到上一批物品分類完後,再讓下一批物品進入。 [Reliable True Double-Speed Item Batching](https://www.youtube.com/watch?v=cuSusZn3H4c) 也可以放慢物品速度,使物品停留在 `hopper` 上足夠的時間,使 `hopper` 能可靠的將物品吸入。 [Simple Playerless & Self Loading Bartering Farm](https://youtu.be/To7NID54vMs?t=181) ### Unstackable Item Sorting 利用 `dropper` 和 `dispenser` 的特性分類特定 unstackable。 [Simple Unstackable Item Sorters & Applications](https://www.youtube.com/watch?v=LHt38pgEHlo)\ [Minecraft Unstackable Sorting Explained in 100 Seconds](https://www.youtube.com/watch?v=6M4N8xBt_tE) 利用 `crafter` 分類特定物品。 [A New Method of Item Sorting Using Crafters in Minecraft 1.21](https://www.youtube.com/watch?v=fPJBEnZfr3w) 利用 `brewing stand` 分類 `potion`。 [Minecraft: CUD Based Potion Sorting](https://www.youtube.com/watch?v=0b2GOj19gPY) 利用 `allay`,可分類任何物品。 [Instant Activation Allay Item Sorter](https://www.youtube.com/watch?v=1FmfKEw7VbQ) ### Multi-Item Sorter 普通的 sorter 是一個容器裝一種物品,而 multi-item sorter 則是可以將數種不同的物品裝進同一個容器。適合用在物品種類多但每種物品數量少的情況,可以大量降低容器的使用。 [Minecraft Ultra-fast Multi-Item Sorter V2.0 Showcase (1.19, Java edition)](https://www.youtube.com/watch?v=tRj52w8dptc) [16x Faster Cart-Based Multi-Item Sorter: CartMIS™](https://www.youtube.com/watch?v=1SYSN0jT0Ac) ### Stack Separation Sorting 以 stack 為單位分類物品,將相同的物品分離出來後再一次對整疊物品分類: [Stack Separation Sorting](https://www.youtube.com/watch?v=twPZY484Iy4) 速度更快的設置 (1,152,000 items per hour): [I Built the FASTEST Item Sorter in Minecraft!](https://www.youtube.com/watch?v=4MoLePpXenc) ### Hopper Minecart Sorter [Why You Need A Chest To Make A Proper Hopper Minecart Item Filter](https://www.youtube.com/watch?v=hiR5bu1aWrU) [2.8M Items/h Filtercart Sorter](https://www.youtube.com/watch?v=wkfUhNmprA0) ### Water Stream 水是用於移動物品常見的方法。水流有許多奇怪的特性: [You don't know water streams](https://www.youtube.com/watch?v=YzmtijZjzaA) --- ## Other Contraptions [New Block Swapper Design (Compact, Tileable, Multi-Directional)](https://www.youtube.com/watch?v=ZxDpje2op84) [Dissecting Minecraft #12: 7 Segment Display & Shulker Box Loader/Unloader](https://www.youtube.com/watch?v=o9QHgpcv2-0&list=PLcSOIxw2nIE2OpQxG1ckMLsQ22Mu4Aiuc) ### Block Conveyor [Block & Entity Conveyor: Fast, Versatile, Easy to build! | No Mods/Commands](https://www.youtube.com/watch?v=uIowfY-p-qg) [6.6 Blocks Per Second Block Conveyor 1.15+](https://www.youtube.com/watch?v=6ZbHuz4nalU) [Sharing is Caring 015: Block Chain Extender - Conveyor Extender](https://www.youtube.com/watch?v=4hDHe5jZ4rU&list=PL48AC5D02C0E775BE) # Entities and Blocks [Compact Redstone: 2-10 Entity usage and basic entity circuits](https://www.youtube.com/watch?v=ZC4SiB4Y8CQ&list=PLDxFLIDNIzqsC4rh1aqko97Qqd7sM_Bj6) 紅石機關可能會配合各種不同的 entity,例如對齊 `hopper minecart`、分類生物、對齊箭矢等,很多應用會需要用到特定大小的方塊。這張表格有各種 entity 及方塊的 hitbox 大小,在用來對齊 entity 時很有幫助: [EntitySizes and BlockSizes 1.21 by RaysWorks]( https://docs.google.com/spreadsheets/d/18_m_ylcYiE_gmxKCBgpu-qkj767kfn_T88hS4GdTqh0/edit#gid=2060389701)。 生物乘船時的高度: [Entity Ride Heights.xlsx](https://github.com/acaciachan/tree-hole/blob/main/%E5%AE%9E%E4%BD%93%20entity/Entity%20Ride%20Heights.xlsx) 設計紅石機關時經常需要擁有特定屬性的方塊,例如:「不會被 `slime block` 黏住」、「上方可以放置 `redstone dust`」、「無法被 power」,`hopper` 就符合這三項條件。利用這個網站可以篩選符合特定條件的方塊: [Minecraft Block Property Encyclopedia](https://joakimthorsen.github.io/MCPropertyEncyclopedia/index.html)。 ## [Minecart](https://minecraft.wiki/w/Minecart) 根據 `minecart` 種類和內容物的不同,在鐵軌上的加速減速也不同,詳細的行為可以看 [Tutorials/Minecarts – Official Minecraft Wiki](https://minecraft.wiki/w/Tutorials/Minecarts)。 當生物因為 `minecart` 被破壞或被 `activator rail` 觸發,使生物離開,生物的落下位置的可以用以下規則來判斷: - 生物離開會在以 `activator rail` 位置為中心 3 × 3 × 3 範圍內被放下。例如 `activator rail` 的位置在 Y = 60,則方塊的**最高高度**必須在 [59, 61),生物才能落在上面。 - 生物離開時會被放置在方塊正中間,高度在方塊的最高高度。放下後生物的 hitbox 不能與其他方塊 collide。 - 遊戲會按照 中 → 上 → 下 的順序在九宮格平面中搜尋合適的方塊放置生物。同一平面中,則會用以下順序搜尋合適的方塊 (假設 `minecart` 前進方向是↑): | **6** | **8** | **5** | | ----- | ----- | ----- | | **2** | **↑** | **1** | | **4** | **7** | **3** | - 若以上範圍都無法放置生物,則生物會在 `activator rail` 的正中央稍微偏前的位置被放下,不管生物是否能站在上面。`activator rail` 的正上方與正下方無法放置生物。 ### Minecart Yeeting (Instant Minecart Unloader) 透過破壞 `minecart` 瞬間取出裡面所有的物品,而不用透過 `dropper` 一個一個將物品丟出。 [The New 1.19 Cart Tech: Cart Yeeting](https://www.youtube.com/watch?v=8SVN5AumEYk) 原理: [How to separate minecarts from their contents - Minecraft 1.19](https://www.youtube.com/watch?v=MhY2mIdV7NM) 各種 unloader 設計: (主世界) [New Instant Unloader and Debugging](https://www.youtube.com/watch?v=Kjez0JUoEQ0) (地獄) [Updating a Nether based Hopper minecart unloader](https://www.youtube.com/watch?v=Kjez0JUoEQ0) ### 將 minecart 放在各種方塊內 [An Introduction to Placing Minecarts in Hoppers and Other Immovable Blocks](https://www.youtube.com/watch?v=5zIyVhVwtBQ) ### 精準微調 minecart 位置 [High Precision Entity Alignment](https://www.youtube.com/watch?v=sHXrqptOU2s) [Pushing Minecrafts Precision to its Limits](https://www.youtube.com/watch?v=AdHGmFpaoCE) ## [Boat](https://minecraft.wiki/w/Boat) - 船擁有 solid hitbox:船的 hitbox 如同實體方塊一樣無法被穿越,因此可以拿來對齊 entities。 - 當生物的 hitbox 靠近船的**側邊** 0.2 格內會被吸到船上。 - Drowning boat: 船的中央在水下時生物不會被吸到船上;船的 hitbox 有部分在水下時則能將生物吸到船上,但船上的生物會瞬間被趕出。 - 有生物乘載的船無法被生物推動,但可被方塊推動。 - 若 `dispenser` 在前方或下方有水源或水流時被 power 則可以在水上方一格放船。每次 power 放下船的位置與與方向都相同,用此方法可以讓多艘船的 hitbox 重疊。 - 船若落下至 level < 5 的水流上會穿透下方一格方塊。 ### Boat in 0 Tick [How to | B O A T](https://www.youtube.com/watch?v=tOj8zh56Nq8) [S P E E D S M O L B O A T](https://www.youtube.com/watch?v=bUMPpCY6bss) 有些 0 tick 設置利用 `sand` 會自動下落的特性來重設裝置,受限於 `sand` 下落的速度,此類裝置最短的重設時間是 9 tick。透過在 `sand` 下方放置 `boat` 可以加速 `sand` 下落的速度,將重設時間縮短至 3 tick。 ## Special Blocks - `soul sand`、`mud` 高度不足一格的 [conductive blocks](https://minecraft.wiki/w/Conductivity) (能生怪、能被 power)。 - `fence`、`fence gate`、`wall` 1.5 格高的方塊。 - `scaffolding` 單向 hitbox,只有由上往下無法穿透。 <!-- https://mcasset.cloud/1.20.2/assets/minecraft/textures/block --> <style> .schematic { line-height: 1em; padding: 0px 0px 3px 10px; transform-origin: top left; max-width: 100%; } .sprite-container, .sprite { display: inline-block; margin-left: -0.21em; width: 16px; height: 16px; } .sprite, .texture { background-image: url('https://minecraft.wiki/images/SchematicSprite.png'); } .texture { position: absolute; width: 16px; height: 16px; } .large-image { transform: scale(2); width: 50%; } a:has(span) { color: #1155cc !important; } </style> <!-- List of Sprites--> <style> /* https://minecraft.wiki/w/Template:Schematic/doc */ /* Masks */ .darker {background-position: 480px 0px;} .lighter {background-position: 464px 0px;} .SB-u {background-position: 432px -16px;} /* Gold */ .MB-u {background-position: 416px -16px;} /* Diamond */ .BR-u {background-position: 448px -16px;} /* Redstone */ .SL-u {background-position: 464px -112px;} /* SLime */ /* Blocks */ .air {background-position: 512px 512px;} .AB {background-position: 512px -96px;} /* Any block */ .BR {background-position: 448px 0px;} /* Block of Redstone */ .St {background-position: 512px -80px;} /* Stone */ .Co {background-position: 512px -64px;} /* Cobblestone */ .SL {background-position: 480px -112px;} /* Slime Block */ .NB {background-position: 384px -288px;} /* Note Block */ .RL {background-position: 304px -144px;} /* Redstone Lamp */ .RL-_A {background-position: 304px -160px;} /* Redstone Lamp (Lit) */ .tg {background-position: 368px -272px;} /* Target Block */ .honey {background-position: 496px -288px;} .slab {background-position: 496px -112px;} .glass {background-position: 432px -64px;} .sand {background-position: 448px -96px;} .chest {background-position: 512px -144px;} .SB {background-position: 432px 0px;} /* Gold Block */ .MB {background-position: 416px 0px;} /* DIamond Block */ /* Wool */ .WW {background-position: 512px -32px;} .OW {background-position: 496px -32px;} .MW {background-position: 480px -32px;} .bW {background-position: 464px -32px;} .YW {background-position: 448px -32px;} .LW {background-position: 432px -32px;} .rW {background-position: 416px -32px;} .kW {background-position: 400px -32px;} .wW {background-position: 512px -48px;} .CW {background-position: 496px -48px;} .PW {background-position: 480px -48px;} .BW {background-position: 464px -48px;} .NW {background-position: 448px -48px;} .GW {background-position: 432px -48px;} .RW {background-position: 416px -48px;} .KW {background-position: 400px -48px;} /* Lever */ .le-n, .le-Su {background-position: 352px -16px;} .le-s, .le-Sd {background-position: 320px -16px;} .le-e {background-position: 368px -16px;} .le-w {background-position: 336px -16px;} .le-Sn, .le-d {background-position: 288px -16px;} .le-Se {background-position: 304px -16px;} .le-Sw {background-position: 272px -16px;} .le-n_A, .le-Su_A {background-position: 160px -16px;} .le-s_A, .le-Sd_A {background-position: 128px -16px;} .le-e_A {background-position: 176px -16px;} .le-w_A {background-position: 144px -16px;} .le-Sn_A, .le-d_A {background-position: 96px -16px;} .le-Se_A {background-position: 112px -16px;} .le-Sw_A {background-position: 80px -16px;} /* Redstone Torch */ .rt {background-position: 384px 0px;} .rt-n {background-position: 352px 0px;} .rt-s {background-position: 320px 0px;} .rt-e {background-position: 368px 0px;} .rt-w {background-position: 336px 0px;} .rt-_A {background-position: 192px 0px;} .rt-n_A {background-position: 160px 0px;} .rt-s_A {background-position: 128px 0px;} .rt-e_A {background-position: 176px 0px;} .rt-w_A {background-position: 144px 0px;} .rt-S {background-position: 256px 0px;} .rt-Sn {background-position: 288px 0px;} .rt-Se {background-position: 304px 0px;} .rt-Sw {background-position: 272px 0px;} .rt-S_A {background-position: 64px 0px;} .rt-Sn_A {background-position: 96px 0px;} .rt-Se_A {background-position: 112px 0px;} .rt-Sw_A {background-position: 80px 0px;} /* Observer */ .obs-n {background-position: 496px -272px;} .obs-s {background-position: 464px -272px;} .obs-e {background-position: 512px -272px;} .obs-w {background-position: 480px -272px;} .obs-u {background-position: 448px -272px;} .obs-d {background-position: 432px -272px;} .obs-Sn {background-position: 432px -272px;} .obs-Ss {background-position: 448px -272px;} .obs-Se {background-position: 416px -272px;} .obs-Sw {background-position: 400px -272px;} .obs-Su {background-position: 496px -272px;} .obs-Sd {background-position: 464px -272px;} /* Redstone Comparator (rc for comparison mode, rs for subtraction mode.) */ .rc-n {background-position: 352px -112px;} .rc-s {background-position: 288px -112px;} .rc-e {background-position: 384px -112px;} .rc-w {background-position: 320px -112px;} .rc-n_A {background-position: 160px -112px;} .rc-s_A {background-position: 96px -112px;} .rc-e_A {background-position: 192px -112px;} .rc-w_A {background-position: 128px -112px;} .rs-n {background-position: 336px -112px;} .rs-s {background-position: 272px -112px;} .rs-e {background-position: 368px -112px;} .rs-w {background-position: 304px -112px;} .rs-n_A {background-position: 144px -112px;} .rs-s_A {background-position: 80px -112px;} .rs-e_A {background-position: 176px -112px;} .rs-w_A {background-position: 112px -112px;} .rc-Se {background-position: 256px -112px;} .rc-Sw {background-position: 224px -112px;} .rs-Se {background-position: 240px -112px;} .rs-Sw {background-position: 208px -112px;} .rc-Se_A {background-position: 64px -112px;} .rc-Sw_A {background-position: 32px -112px;} .rs-Se_A {background-position: 48px -112px;} .rs-Sw_A {background-position: 16px -112px;} /* Redstone Dust */ .rd {background-position: 384px -32px;} .rd-nse {background-position: 240px -32px;} .rd-new {background-position: 272px -32px;} .rd-nsw {background-position: 224px -32px;} .rd-sew {background-position: 256px -32px;} .rd-nsew {background-position: 208px -32px;} .rd-S {background-position: 336px -368px;} .rd-Sew {background-position: 384px -16px;} .rd-ns {background-position: 368px -32px;} .rd-ne {background-position: 336px -32px;} .rd-nw {background-position: 288px -32px;} .rd-se {background-position: 320px -32px;} .rd-sw {background-position: 304px -32px;} .rd-ew {background-position: 352px -32px;} .rd-_A {background-position: 192px -32px;} .rd-nse_A {background-position: 48px -32px;} .rd-new_A {background-position: 80px -32px;} .rd-nsw_A {background-position: 32px -32px;} .rd-sew_A {background-position: 64px -32px;} .rd-nsew_A {background-position: 16px -32px;} .rd-S_A {background-position: 288px -368px;} .rd-Sew_A {background-position: 192px -16px;} .rd-ns_A {background-position: 176px -32px;} .rd-ne_A {background-position: 144px -32px;} .rd-nw_A {background-position: 96px -32px;} .rd-se_A {background-position: 128px -32px;} .rd-sw_A {background-position: 112px -32px;} .rd-ew_A {background-position: 160px -32px;} /* Redstone Repeater (rr for unlocked repeaters, lr for locked repeaters.) */ .rr-e1 {background-position: 384px -48px;} .rr-e2 {background-position: 368px -48px;} .rr-e3 {background-position: 352px -48px;} .rr-e4 {background-position: 336px -48px;} .rr-e1_A {background-position: 192px -48px;} .rr-e2_A {background-position: 176px -48px;} .rr-e3_A {background-position: 160px -48px;} .rr-e4_A {background-position: 144px -48px;} .rr-n1 {background-position: 384px -64px;} .rr-n2 {background-position: 368px -64px;} .rr-n3 {background-position: 352px -64px;} .rr-n4 {background-position: 336px -64px;} .rr-n1_A {background-position: 192px -64px;} .rr-n2_A {background-position: 176px -64px;} .rr-n3_A {background-position: 160px -64px;} .rr-n4_A {background-position: 144px -64px;} .rr-w1 {background-position: 384px -80px;} .rr-w2 {background-position: 368px -80px;} .rr-w3 {background-position: 352px -80px;} .rr-w4 {background-position: 336px -80px;} .rr-w1_A {background-position: 192px -80px;} .rr-w2_A {background-position: 176px -80px;} .rr-w3_A {background-position: 160px -80px;} .rr-w4_A {background-position: 144px -80px;} .rr-s1 {background-position: 384px -96px;} .rr-s2 {background-position: 368px -96px;} .rr-s3 {background-position: 352px -96px;} .rr-s4 {background-position: 336px -96px;} .rr-s1_A {background-position: 192px -96px;} .rr-s2_A {background-position: 176px -96px;} .rr-s3_A {background-position: 160px -96px;} .rr-s4_A {background-position: 144px -96px;} .lr-e1 {background-position: 320px -48px;} .lr-e2 {background-position: 304px -48px;} .lr-e3 {background-position: 288px -48px;} .lr-e4 {background-position: 272px -48px;} .lr-e1_A {background-position: 128px -48px;} .lr-e2_A {background-position: 112px -48px;} .lr-e3_A {background-position: 96px -48px;} .lr-e4_A {background-position: 80px -48px;} .lr-n1 {background-position: 320px -64px;} .lr-n2 {background-position: 304px -64px;} .lr-n3 {background-position: 288px -64px;} .lr-n4 {background-position: 272px -64px;} .lr-n1_A {background-position: 128px -64px;} .lr-n2_A {background-position: 112px -64px;} .lr-n3_A {background-position: 96px -64px;} .lr-n4_A {background-position: 80px -64px;} .lr-w1 {background-position: 320px -80px;} .lr-w2 {background-position: 304px -80px;} .lr-w3 {background-position: 288px -80px;} .lr-w4 {background-position: 272px -80px;} .lr-w1_A {background-position: 128px -80px;} .lr-w2_A {background-position: 112px -80px;} .lr-w3_A {background-position: 96px -80px;} .lr-w4_A {background-position: 80px -80px;} .lr-s1 {background-position: 320px -96px;} .lr-s2 {background-position: 304px -96px;} .lr-s3 {background-position: 288px -96px;} .lr-s4 {background-position: 272px -96px;} .lr-s1_A {background-position: 128px -96px;} .lr-s2_A {background-position: 112px -96px;} .lr-s3_A {background-position: 96px -96px;} .lr-s4_A {background-position: 80px -96px;} .rr-Se1 {background-position: 256px -48px;} .rr-Se2 {background-position: 240px -48px;} .rr-Se3 {background-position: 224px -48px;} .rr-Se4 {background-position: 208px -48px;} .rr-Se1_A {background-position: 64px -48px;} .rr-Se2_A {background-position: 48px -48px;} .rr-Se3_A {background-position: 32px -48px;} .rr-Se4_A {background-position: 16px -48px;} .rr-Sw1 {background-position: 256px -80px;} .rr-Sw2 {background-position: 240px -80px;} .rr-Sw3 {background-position: 224px -80px;} .rr-Sw4 {background-position: 208px -80px;} .rr-Sw1_A {background-position: 64px -80px;} .rr-Sw2_A {background-position: 48px -80px;} .rr-Sw3_A {background-position: 32px -80px;} .rr-Sw4_A {background-position: 16px -80px;} .lr-Se1 {background-position: 256px -64px;} .lr-Se2 {background-position: 240px -64px;} .lr-Se3 {background-position: 224px -64px;} .lr-Se4 {background-position: 208px -64px;} .lr-Se1_A {background-position: 64px -64px;} .lr-Se2_A {background-position: 48px -64px;} .lr-Se3_A {background-position: 32px -64px;} .lr-Se4_A {background-position: 16px -64px;} .lr-Sw1 {background-position: 256px -96px;} .lr-Sw2 {background-position: 240px -96px;} .lr-Sw3 {background-position: 224px -96px;} .lr-Sw4 {background-position: 208px -96px;} .lr-Sw1_A {background-position: 64px -96px;} .lr-Sw2_A {background-position: 48px -96px;} .lr-Sw3_A {background-position: 32px -96px;} .lr-Sw4_A {background-position: 16px -96px;} /* Hopper */ .ho-n {background-position: 368px -144px;} .ho-s {background-position: 336px -144px;} .ho-e {background-position: 384px -144px;} .ho-w {background-position: 352px -144px;} .ho-d {background-position: 320px -144px;} .ho-Sn {background-position: 368px -160px;} .ho-Ss {background-position: 336px -160px;} .ho-Se {background-position: 384px -160px;} .ho-Sw {background-position: 352px -160px;} .ho-Sd {background-position: 320px -160px;} /* Piston */ .pi-n, .pi-Su {background-position: 368px -176px;} .pi-s, .pi-Sd {background-position: 336px -176px;} .pi-e, .pi-Se {background-position: 384px -176px;} .pi-w, .pi-Sw {background-position: 352px -176px;} .pi-u, .pi-Ss {background-position: 320px -176px;} .pi-d, .pi-Sn {background-position: 304px -176px;} .pi-n_A, .pi-Su_A {background-position: 352px -208px;} .pi-s_A, .pi-Sd_A {background-position: 336px -192px;} .pi-e_A, .pi-Se_A {background-position: 384px -192px;} .pi-w_A, .pi-Sw_A {background-position: 368px -208px;} .pi-u_A, .pi-Ss_A {background-position: 320px -208px;} .pi-d_A, .pi-Sn_A {background-position: 304px -192px;} .pe-n, .pe-Su {background-position: 352px -192px;} .pe-s, .pe-Sd {background-position: 336px -208px;} .pe-e, .pe-Se {background-position: 368px -192px;} .pe-w, .pe-Sw {background-position: 384px -208px;} .pe-u, .pe-Ss {background-position: 320px -192px;} .pe-d, .pe-Sn {background-position: 304px -208px;} /* Sticky Piston */ .sp-n, .sp-Su {background-position: 368px -224px;} .sp-s, .sp-Sd {background-position: 336px -224px;} .sp-e, .sp-Se {background-position: 384px -224px;} .sp-w, .sp-Sw {background-position: 352px -224px;} .sp-u, .sp-Ss {background-position: 320px -224px;} .sp-d, .sp-Sn {background-position: 304px -224px;} .sp-n_A, .sp-Su_A {background-position: 352px -256px;} .sp-s_A, .sp-Sd_A {background-position: 336px -240px;} .sp-e_A, .sp-Se_A {background-position: 384px -240px;} .sp-w_A, .sp-Sw_A {background-position: 368px -256px;} .sp-u_A, .sp-Ss_A {background-position: 320px -256px;} .sp-d_A, .sp-Sn_A {background-position: 304px -240px;} .se-n, .se-Su {background-position: 352px -240px;} .se-s, .se-Sd {background-position: 336px -256px;} .se-e, .se-Se {background-position: 368px -240px;} .se-w, .se-Sw {background-position: 384px -256px;} .se-u, .se-Ss {background-position: 320px -240px;} .se-d, .se-Sn {background-position: 304px -256px;} /* Rail */ .ra-ns {background-position: 176px -176px;} .ra-ew {background-position: 192px -176px;} .ra-nu {background-position: 144px -176px;} .ra-su {background-position: 112px -176px;} .ra-eu {background-position: 160px -176px;} .ra-wu {background-position: 128px -176px;} .ra-Sns {background-position: 96px -288px;} .ra-Sew {background-position: 80px -176px;} .ra-Seu {background-position: 64px -176px;} .ra-Swu {background-position: 96px -176px;} .ra-se {background-position: 224px -176px;} .ra-sw {background-position: 208px -176px;} .ra-ne {background-position: 224px -192px;} .ra-nw {background-position: 208px -192px;} .ra-Sse {background-position: 128px -288px;} .ra-Ssw {background-position: 112px -288px;} .ra-Sne {background-position: 128px -304px;} .ra-Snw {background-position: 112px -304px;} /* Activator Rail */ .ar-ns {background-position: 176px -240px;} .ar-ew {background-position: 192px -240px;} .ar-nu {background-position: 144px -240px;} .ar-su {background-position: 112px -240px;} .ar-eu {background-position: 160px -240px;} .ar-wu {background-position: 128px -240px;} .ar-Sns {background-position: 96px -352px;} .ar-Sew {background-position: 80px -240px;} .ar-Seu {background-position: 64px -240px;} .ar-Swu {background-position: 96px -240px;} .ar-ns_A {background-position: 176px -256px;} .ar-ew_A {background-position: 192px -256px;} .ar-nu_A {background-position: 144px -256px;} .ar-su_A {background-position: 112px -256px;} .ar-eu_A {background-position: 160px -256px;} .ar-wu_A {background-position: 128px -256px;} .ar-Sns_A {background-position: 96px -368px;} .ar-Sew_A {background-position: 80px -256px;} .ar-Seu_A {background-position: 64px -256px;} .ar-Swu_A {background-position: 96px -256px;} /* Detector Rail */ .dr-ns {background-position: 176px -192px;} .dr-ew {background-position: 192px -192px;} .dr-nu {background-position: 144px -192px;} .dr-su {background-position: 112px -192px;} .dr-eu {background-position: 160px -192px;} .dr-wu {background-position: 128px -192px;} .dr-Sns {background-position: 96px -304px;} .dr-Sew {background-position: 80px -192px;} .dr-Seu {background-position: 64px -192px;} .dr-Swu {background-position: 96px -192px;} /* Powered Rail */ .pr-ns {background-position: 176px -208px;} .pr-ew {background-position: 192px -208px;} .pr-nu {background-position: 144px -208px;} .pr-su {background-position: 112px -208px;} .pr-eu {background-position: 160px -208px;} .pr-wu {background-position: 128px -208px;} .pr-Sns {background-position: 96px -320px;} .pr-Sew {background-position: 80px -208px;} .pr-Seu {background-position: 64px -208px;} .pr-Swu {background-position: 96px -208px;} .pr-ns_A {background-position: 176px -224px;} .pr-ew_A {background-position: 192px -224px;} .pr-nu_A {background-position: 144px -224px;} .pr-su_A {background-position: 112px -224px;} .pr-eu_A {background-position: 160px -224px;} .pr-wu_A {background-position: 128px -224px;} .pr-Sns_A {background-position: 96px -336px;} .pr-Sew_A {background-position: 80px -224px;} .pr-Seu_A {background-position: 64px -224px;} .pr-Swu_A {background-position: 96px -224px;} /* Minecart */ .mc-ew {background-position: 48px -192px;} .mc-ns {background-position: 32px -192px;} .mc-Sew {background-position: 16px -192px;} /* Boat */ .boat-ew {background-position: 48px -176px;} .boat-ns {background-position: 32px -176px;} .boat-Sew {background-position: 16px -176px;} /* Arrows */ .aw-n {background-position: 224px -432px;} .aw-nne {background-position: 208px -416px;} .aw-ne {background-position: 192px -416px;} .aw-ene {background-position: 192px -432px;} .aw-e {background-position: 208px -432px;} .aw-ese {background-position: 192px -448px;} .aw-se {background-position: 192px -464px;} .aw-sse {background-position: 208px -464px;} .aw-s {background-position: 208px -448px;} .aw-ssw {background-position: 224px -464px;} .aw-sw {background-position: 240px -464px;} .aw-wsw {background-position: 240px -448px;} .aw-w {background-position: 224px -448px;} .aw-wnw {background-position: 240px -432px;} .aw-nw {background-position: 240px -416px;} .aw-nnw {background-position: 224px -416px;} </style>