本教學將會教你如何在生存模式中利用遊戲錯誤來複製點燃的TNT實體(下文簡稱為複製TNT)。
此錯誤未必對所有版本有效。該錯誤被修復後,下文所述的資訊將不再適用。
請慎重對待。
為什麼這麼做?
複製TNT看似毫無意義,但實際上相當有用。透過將複製TNT與史萊姆飛行器所結合,你可以快速的清理大片的地形來建造空置域,以提高一些機器的效率或是減少卡頓。還可以方便的去清除大片的山脈或是丘陵。
原理
TNT複製的原理與活塞機制有關。在活塞被啟動時,活塞會用深度優先搜尋的方法檢測其前方需要被推動的所有方塊,將其座標加入到一個列表中(搜尋順序靠後的先儲存在列表)。之後,活塞會觸發推動方塊,這些方塊將均變為36號方塊,並產生一個Block Event事件。此時,若你在活塞推出的2遊戲刻過程中給TNT方塊一個NeighborChanged更新(一般使用死亡的扇狀珊瑚來達成這一效果),那麼就會使TNT觸發,生成一個點燃的TNT實體。2遊戲刻後,活塞的推出方塊時間結束,活塞會檢測原來位置上的方塊,在活塞前方一格處生成新的結構,而TNT就重新作為方塊被推出,以達成複製。[1]
content= 活塞的更新規律 活塞在啟動時會進入啟動延遲,在Block Event事件(下文簡稱BE事件)啟動,此時活塞需要檢測自身的狀態,在允許推出時開始推出。活塞的推出過程實際是一個將方塊依次變為36號方塊的過程,這一過程依賴一個列表,而列表是有序的,所以我們可以對其的順序進行研究。按照順序,要被移動的方塊首先被移除,這一過程給予毗鄰方塊更新。隨後每一個36號方塊將會被放置在所有要被移動的方塊的運動趨勢位上,這一過程產生方塊變化。活塞在最後產生活塞臂。36號方塊表現為移動中的方塊,但這是遊戲繪製產生的效果,在理論分析中我們忽略這一過程。在2遊戲刻後的Tile Entity事件(下文簡稱為TE事件),36號方塊將自身變為對應的方塊,這一過程產生方塊更新和方塊變化。而活塞收回的過程和推出的過程是類似的,但活塞臂必須先收回,否則其他方塊無法在活塞臂的位置建立36號方塊。
當活塞在啟動過程中遇到訊號下降沿(例如只被啟動了1遊戲刻),此時活塞必須收回,但前方方塊全為36號方塊,活塞一個也不會將其拉回。比較特殊的是活塞面前的方塊,活塞會將它在BE事件到位,但也不會收回。
在以上運動過程中,並沒有提到活塞自檢,事實上活塞不會單獨地對自己進行檢查,自檢發生在活塞接收到方塊更新訊號時,而活塞本身的推出,周圍方塊的變化都會產生方塊更新。例如活塞伸出收回往復持續的過程,就是活塞面前的方塊從36號方塊變為普通方塊時給予方塊更新,使得活塞再次推出的。
活塞推動方塊和紅石線的更新不同,活塞推動方塊有一個客觀存在的列表,因此這一過程有著嚴格的規律性,我們因此可以得出活塞推動次序的規律,換言之:活塞推動方塊的次序不僅具有時間平移對稱性,也具有空間平移對稱性。換句話說,活塞的行為隨時間穩定,也隨空間穩定,只要活塞的裝置不被旋轉。此外,即使對於不同的活塞朝向,活塞的規律也是類似的,可以分類討論。 除了中繼器等NTE元件和活塞外,36號方塊也遵循「先被更新先啟動」的規律,在這裏是指:先被推動的36號方塊先到位。
活塞更新的次序规律
有關活塞在運動前後更新規律已經敘述詳盡了,下面針對研究活塞推動的列表進行分析,這主要包括活塞推方塊的更新規律和粘液塊粘動方塊的更新規律。關於前者,其必須遵循一條基本原則,那就是不能在已有方塊的位置建立36號方塊。因此,當活塞推動一列方塊時,總是最遠端的方塊先更新。並且,如要使一列方塊發生移動,每個方塊移動前,總是先移動其趨勢位的方塊。這一點對於粘液塊粘動後方的方塊也是一樣的,就好像方塊不是被粘液塊從後方粘動的,而是被活塞從反方向推出的。換句話說,活塞推動一列方塊和粘液塊從後方粘動一列方塊個次序規律是相同的。
將完全相同的裝置旋轉,在不同朝向下進行實驗,便可以得到在完全對等的位置下,各方向的優先級順序:
東>西>南>北>上>下
這一規律可以被歸入東南法則。方法
以下的所有建造方法理論上在Java版1.13及其後所有版本均可行。