※ 引述《Xuelingyu (雪靈羽)》之銘言:
: 影片連結:https://www.youtube.com/watch?v=5Icj5TNmBUI
來簡單轉述補充一下影片中的解釋, 以及加一點我認為 1.17 會造成的影響
====
基本原理是這樣的:
Java 內建的亂數產生器 java.util.Random
它的實作是有一定規定的 (專業術語叫做線性同餘產生器, LCG)
其特性是: 當你餵入的種子碼很接近時
所產生的開頭數個亂數的數值也會很接近
特別的, 如果已知種子碼差多少的話, 所產生的這些亂數也能夠在某種程度上互相推算
反應在所產生的世界就是:
種子碼 s+60011 產生的黏土團的特性
和種子碼 s+60009 產生的鑽石團特性會有很強的關聯
強到足以利用其中一個推算另一個, 而其中位置相關的數值正好有個普遍適用的偏移量在
影片中有詳細地把程式內部的計算演示一遍給你看
告訴你那些偏移量是如何算出來的
====
要問 1.17 會產生的影響嘛
首先, 還是回到官方給的分布圖 https://reurl.cc/Dvq6KQ
注意到右邊列在 1.16 舊版的圖示中, 鑽石的分布是均勻分布的
實際你去找有人統計的鑽石礦分布統計圖看會看到
y=5 ~ y=12 這一塊的分布其實是幾乎均勻的
(y < 5 會受基岩生成影響成線性減少, y >= 13 我就不太確定是什麼原因就是了...)
但是 1.17 改變生成方式變成越深機率越大
這代表說上面這些亂數產生器的輸出不會直接變成礦團性質的數值
而是會進行一些簡單的數學運算之後才會變成礦團性質
這些運算有可能會因為多使用了幾個亂數而造成參照的亂數不再對應
(我指的是那些三角形分布, 因為三角分布可以藉由產生兩個均勻亂數相加而得
這甚至是個已經使用在遊戲其他地方的方法了;
如果它是使用新的高斯分布的亂數產生器的話
最常見的高斯分布產生演算法也是需要由兩個均勻亂數轉換成兩個高斯分布亂數
(關鍵字: Box-Muller)
總之這樣一來, 一邊使用一個亂數, 另一邊使用兩個亂數, 對應就會被打亂)
再加上 8a 減少了鑽石礦團露出空氣的比例
以及 10a 對鑽石礦團的生成演算法有較大的改變
就算實際產生的座標還是能夠推算, 也很有可能因為這樣的改變造成撲空
所以我會認為在 1.17 就算是有可能推算出新版的對應是如何
但實際成功機率應該是會大幅下降的