自古以來,穿越時空的能力令人嚮往,但就算你是神(創造),仍無法辦到。

地獄之旅

故事要從我們一次去地獄的冒險開始說起。隨著文明的開發,我們世界的地獄資源越來越短缺,尤其是大量的 終界箱 需求,讓烈焰桿的消耗超乎預期,用完已經是不久之後的事了。

因此我們計畫一趟地獄要塞之旅,我們在先前的日子裡已經發現了地獄要塞的存在,也去過幾趟,把一些寶箱都開箱了。但儘管去了很多趟,它仍是十分危險的地方,底下一大片岩漿海不說,整個要塞遍布著發射火球的 烈焰使者,還有很難打的 凋零骷髏

這天剛好 Andrea 有空,我們就一起來出任務。

出發

我們基於先前去得到的材料,烈焰桿與熔岩球,得以釀製抗火藥水,有了抗火藥水,就不怕烈焰使者的攻擊,基本上在要塞就安全了多。

走地下道,來到了我們的轉運站 —地獄門,出發到了地獄,尋著過去留下的痕跡,一路找尋到了地獄要塞的入口。

Andrea 說下山的路不好走,於是我們 挖了一條隧道下山,接著吞了抗火藥水,進入要塞之中。

遇害

Andrea 第一次進到這座要塞,非常的緊張,不知路怎麼走又一直遇到凋零骷髏。而我目的要刷烈焰使者,一時也不知在哪刷比較好,隨意的上了一棟高樓,就準備開刷了。

我拿我的鑽劍去敲了一下,烈焰使者受傷,飄到空中,打不到。我拿出我的神弓,拉滿弓一射,好巧不巧一隻殭屍豬人走到我面前。

頓時,四周響起了殭屍豬人憤怒的聲音,我知道我犯下大錯了,趕緊轉身就跑,Andrea 注意到了,但她不熟悉路,也幫不到我。

我從高台上往下跑,一路沒煞車,在走一條一格寬的樓梯時差點跌進岩漿海。

我跑到了要塞的走廊上,這時連凋零骷髏也來找我了。後方是幾十隻憤怒的殭屍豬人,而前面則有凋零骷髏數只,我心一橫,有我這把鋒利4鑽劍,還有什麼打不贏的敵人?

但在緊張下,我的攻擊卻屢屢放空,而後方 Andrea 的救援卻遲遲不來,舉盾擋住一邊就遭到另一邊的攻擊,凋零骷髏的凋零效果讓我看不清血量。而當我正在吃金蘋果時,眼前出現了一片紅屏。

我死了。

一場空

憤怒的殭屍豬人停止了,恢復了平常呆呆的樣子。Andrea 終於到了,但看到的已是掉了滿地的物品。她趕緊幫我撿起來,能撿多少算多少,但她的背包太滿,裝不下我的所有裝備。

我在家裡重生,望著自己空空的背包,以及歸零的經驗條。趕緊抓了些破衣服,拿了把粗製的鐵劍,帶瓶抗火藥水,準備衝回地獄。

Andrea 聽我的指示,先離開危險的要塞,回到我們地獄的基地,我和她在基地會合,先給我一些撿到的物品。

就只有這樣?

只撿回了一把鑽劍,我那吃到一半的金蘋果,以及一條褲子。

「也許還有些遺落的在那邊」,我們趕緊出發,再次進入要塞,但到了我所死亡的地點,卻不見任何東西。

不會吧…

我不敢相信,在要塞中不斷尋找,但就是找不到我遺落的物品。


回到了家中,我的裝備已不再,原本一趟掠奪之旅,竟然換來一場空。

「你想…回到過去嗎?」

回到過去

「可以嗎?」,Andrea 十分震驚,因為 就算是創造的世界,仍辦不到穿越時空這件事。

其實在八月的時候,我就開始用版本控制工具 Git 來紀錄我們的世界,每次玩完就會做一個紀錄。因此我就得以回到過去存檔的任何時間點。

我先關閉了伺服器,將這次的更動先放到一個分支,將世界 checkout 回主分支,就回到了我們出發前的世界。

$ git add .  
$ git checkout -b dead-branch
$ git commit -m "死了"
$ git checkout master
$ ./start.sh  
  
... 
   
Done  
>

我啟動了伺服器,登入。

眼前出現了我的家,而手中握著的正是我失去的裝備。
我笑了。

來自未來的地獄樓梯

在回到了過去後,我們進展非常順利,遇到一樣的怪,一樣的附魔,有種不可思議的感覺。

我們再度到了地獄,卻發現一見非常離奇的事。

「這個樓梯,不是我們剛剛挖的嗎?」

剛才挖的那條樓梯,竟然還在!但它明明已經被 format 掉的啊! 我懶的去猜測為什麼,也許我的 Git 沒有把地獄一起存進去吧?

直到發生了那件事


過了一段時間後,我們開始了新的計畫,要在沙漠蓋一座宮殿。我們已在另一個創造世界蓋好了草圖,打算用生存複製一份。

在興建的期間,我為了伺服器的安全性,將伺服器從執行在自己的使用者,改成用一個專門使用者 minecraft 來負責執行,避免有 sudo 權限的帳號被入侵造成系統危險。

於是我建立了 minecraft 使用者,將世界的檔案 clone 一份過去。我在前些時間將伺服器從官方改成用 spigot ,所以也把 spigot 一起複製過來,剩下的一些舊地圖就不管它。

由於沙漠與家裡的距離遙遠,約 5 公里,所以我們過去興建了 地獄高速公路 ,透過地獄 : 主世界移動一格的距離為 8 : 1 的性質來大幅縮減往來的距離。

這次沙漠宮殿的建案花了我們一兩個禮拜的時間,由於材料都是當地取材,所以很久沒回家去看看了。

當我們終於完工後,要來鋪地毯,羊毛和染料都放在家裡,所以我就要回家一趟。我進了地獄門

「這裡是哪裡啊!」

地獄消失了?

我的眼前是一片陌生的大地,雖然我們不常在地獄探險,但畢竟親自蓋了高速公路,對於地貌還是有些印象的。我原先以為是傳送門又跑到了奇怪的位置,過去沙漠的這個傳送門當從地獄回來時常常跑到一些荒郊野外去,很討厭,都必須將新的門破壞掉才能夠恢復原本的通路。

我原本沒多想,以為這次也是門跑掉,所以就回去拿了炸彈,準備把這個新的怪門給炸掉。所以我叫 Ken 待在主世界,我帶著炸藥過來,我把舊的門炸掉後,再叫 Ken 進到地獄,應該就可以找到原本的門了。

好巧不巧,我在炸門的時候,一隻殭屍豬人正好給我走過來,而且偏偏還沒炸死,頓時空氣瀰漫著殭屍豬人的憤怒聲,我叫 Ken 趕快過來,一邊奮力反抗。但當 Ken 進來時,新的傳送門卻離上一個沒多遠,但時間緊迫,我趕緊衝進傳送門回到主世界,一隻殭屍豬人也跟著我一起回來了。

在主世界把那隻殭屍豬人宰殺後,我們開始疑惑了,怎麼會兩次傳送門都壞掉呢?,我們決定回家一趟,剛好沙漠的馬廄還有兩匹馬,於是我們騎著馬走著很久未行的驛道回家。


自從地獄高速公路完工後,這條驛道就荒廢了,久久沒有騎著馬在大地上奔馳,突然也有點懷念。半天過後,我們到達家。

我們一下馬,馬上衝到地獄傳送門,希望可以趕快找回原本的門。站在傳送門中,看著眼前越來越模糊…

「地形建構中…」 「唰」

眼前出現的是一大片陌生的大地,原本的車站、道路、火把,全部都不見了,這時我才恍然大悟

*** 「地獄不見了!」***

原來是…

「傳送門颼颼聲…」

我愣住了,昔日的車站、高速公路、地獄古堡,地獄熟悉的一切,全部已經不在了,我不敢相信自己的眼睛,反覆的進出地獄,但仍然改變不了事實。

我突然想起,自己使用 Git 來版本備份,這麼說,檔案應該還在。我關掉伺服器,將地圖回復到教早的版本。

$ git checkout 4a55

地圖時間回到了一個禮拜前,我開啟伺服器,在進去一次,我一進去就直奔地獄。

「地形建構中…」

空氣中充滿著殭屍豬人的憤怒聲,我感到疑惑,我明明是剛剛才打了殭屍豬人,為什麼一個禮拜前的殭屍豬人會對我生氣?

我上網查 Minecraft 究竟是怎麼儲存地獄的,在 Minecraft Wiki 查到了這個

地獄的存檔方法與普通世界存檔方法相同,默認都在下列位置: … Linux: ~/.minecraft/saves/worldname/DIM-1 … 注意DIM-1不包含它自己的level.dat。level.dat在其父資料夾,此文件被所有維度使用。這意味著即使玩家改變了個別存檔/world資料夾裡面的數據,地獄傳送門仍然會把玩家傳送到原來那個存檔生成的地獄傳送門,反之亦然。 … 刪除DIM-1文件將會重置地獄,因此所有玩家在地獄作出的更改和建築都會被消除。

看了這個我才知道,地獄的檔案跟主世界是分開儲存的,我突然想起 之前回到過去,仍然存在的那座樓梯,難不成是 我根本沒有把地獄加入 Git?

我回到了過去在我自己 lancat 使用者裡面的地圖檔案,發現在我的地圖資料夾 OurLiveWorld/ 旁邊,還有著兩個不起眼的資料夾— OurLiveWorld_nether 以及 OurLiveWorld_the_end。我以前看到,都不知道那是什麼,現在恍然大悟,the_end 就是終界,而 nether 就是地獄啊!,我找了好久的地獄檔案,就在這個資料夾啊!

這裡讓我來解釋一下,伺服器會將地獄與終界的檔案存到 worldname_nether 以及 worldname_the_end 中,所以我的目錄結構長這個樣子:

OurLiveWorld/
    .git/
OurLiveWorld_nether/
OurLiveWorld_the_end/

我的 Git 只有版本控制 OurLiveWorld 這個資料夾,所以其實只有儲存了主世界的紀錄,其他兩個世界是完全沒有儲存的,因此當我更換使用者到 minecraft 的時候,我是直接 git clone 過去,並不是把原本的世界檔案複製過去,所以只有 Git 有儲存的檔案才會被複製過去,因此地獄與終界在 minecraft 使用者那邊就看不到啦!

當伺服器啟動時,發現找不到地獄和終界,就重新生成了一個,才會發生「新的地獄」的情形。

同時,因為 Git 沒有儲存到地獄的檔案,因此過去時間旅行時,地獄才會沒有回到過去,解釋了那個神奇的樓梯的存在,與一週前的殭屍豬人為何生氣。

因此,要修復只要將 OurLiveWorld_nether 以及 OurLiveWorld_the_end 複製過去就行了。

然後我將原本的 git 移除,建立一個更上層的資料夾 ourliveworld 來將三個世界的檔案都包住,在裡面設定 Git,來讓我可以儲存三個世界,目錄樹就變成這樣:

ourliveworld/
    .git/
    OurLiveWorld/
    OurLiveWorld_nether/
    OurLiveWorld_the_end/

接下來每個世界都可以版本控制了。

後記

在設定完成後,我再度啟動了伺服器,進到了地獄。眼前是熟悉的車站,熟悉的道路,熟悉的地獄疙瘩田,我漫步走在高速公路上,看著下方的岩漿海。

突然一隻地獄幽靈從下面出現,朝我的正下方發射了火球,我來不及反應,橋被硬生生炸斷,我掉進了廣大的岩漿海,來不及喝藥水,我就死了。

我嘆了口氣

「唉…又要回到過去了。」