上次玩Minecraft應該是1.8版的時候了
最近2b2t的影片在Youtube上大量出現
還有PewDiePie開始玩Minecraft生存
這讓很久沒玩Minecraft的我重新回來
在2b2t的影片裡
我發現有些實況主常常在尋找其他實況主伺服器裡的據點
即便他們都是很厲害的科學家
且有著一個小團隊分頭尋找
但還是要花不少時間
加上現在更新後不能使用加速
尋找的工作將越來越麻煩
這讓我想到是否能從實況主上傳影片的蛛絲馬跡中找出座標
當然實況主們都有很小心的完全不露出座標
只透過"觀看"方塊找出座標
在1.8版更新後
草地、泥土、沙、紅沙、石頭、地獄石的材質會隨機旋轉
使遊戲看起來更加自然
而這些旋轉方向如荷葉一樣是由所在座標判定
如地獄石的六面在遊戲裡共有16種組合
而草地只有頂部材質會旋轉共有4種組合
為了簡單一點我使用草地作為示範
以下是取得材質選轉方向的公式(1.12版):
int getTextureType(int x, int y, int z)
{
long i=(long)(x*3129871)^(long)z*(long)116129781^(long)y;
i=i*i*(long)42317861+i*11;
int temp=(((int)i)>>16);
if(temp < 0) temp*=-1;
return (temp%4);
}
把最後Mod 4改成16也可以用來求有16種變化的其他方塊
分別定義一下草地的每一種回傳值所代表的方向
首先我們以距離角落一個像素的亮點為基準(如圖左上角標記處)
在玩家面向北時 亮點分別在
0左上
1右上
2右下
3左下
這個結果不管在不同種子碼、超平坦或巨大化世界下都適用
不同版本才會發生變化
有了這個公式
接下來我們只要有足夠的數據
理論上就可以反向推出座標
我以一塊5x5的草地作為示範
每一塊草地有四種方向
所以在5x5中一共有4的25次方種組合
這要在6000k*6000k*256的Minecraft世界重複出現的機率其實很低
以下這就是我們5x5的草地:
把它化成數字
0,1,1,3,0,
0,0,3,3,2,
3,0,0,2,0,
1,3,0,1,1,
3,2,1,3,0
輸入到程式內
設定範圍為1000
(在x座標-1000到+1000
y座標0到256
z座標-1000到+1000
的範圍內搜索)
成功找到一組座標
也就是我們5x5草地中左上角方塊的座標
雖然搜尋成功
但是隨著搜索範圍增加
所需時間將大幅提升
畢竟我才剛開始學習寫程式
所使用的算法可能很不好
導致計算效率不佳
依照我估計
以目前狀況而言
我寫的程式落要搜尋範圍到300萬
可能要跑個一年
所以還不太可能實際應用
這邊是我參考的影片網址
作者在下方也有留下他寫的程式
不過我只是初學者所以還看不太懂
有興趣的可以自己去看看