Minecraft 穿越時空
> 自古以來,穿越時空的能力令人嚮往,但就算你是神(創造),仍無法辦到。
於Matters註:OurLiveWorld 是我和朋友經營了半年的 Minecraft 生存世界,我偶爾會寫些裡頭的冒險故事,希望將遊戲,以另一種形式呈現出來。
# 地獄之旅
故事要從我們一次去地獄的冒險開始說起。隨著文明的開發,我們世界的地獄資源越來越短缺,尤其是大量的 **終界箱** 需求,讓烈焰桿的消耗超乎預期,用完已經是不久之後的事了。
因此我們計畫一趟地獄要塞之旅,我們在先前的日子裡已經發現了地獄要塞的存在,也去過幾趟,把一些寶箱都開箱了。但儘管去了很多趟,它仍是十分危險的地方,底下一大片岩漿海不說,整個要塞遍布著發射火球的 **烈焰使者**,還有很難打的 **凋零骷髏**。
這天剛好 Andrea 有空,我們就一起來出任務。
## 出發
我們基於先前去得到的材料,烈焰桿與熔岩球,得以釀製抗火藥水,有了抗火藥水,就不怕烈焰使者的攻擊,基本上在要塞就安全了多。
走地下道,來到了我們的轉運站 ---地獄門,出發到了地獄,尋著過去留下的痕跡,一路找尋到了地獄要塞的入口。
Andrea 說下山的路不好走,於是我們 **挖了一條樓梯下山**,接著吞了抗火藥水,進入要塞之中。
## 遇害
Andrea 第一次進到這座要塞,非常的緊張,不知路怎麼走又一直遇到凋零骷髏。而我目的要刷烈焰使者,一時也不知在哪刷比較好,隨意的上了一棟高樓,就準備開刷了。
> 我拿我的鑽劍去敲了一下,烈焰使者受傷,飄到空中,打不到。我拿出我的神弓,拉滿弓一射,好巧不巧一隻殭屍豬人走到我面前。
頓時,四周響起了殭屍豬人憤怒的聲音,我知道我犯下大錯了,趕緊轉身就跑,Andrea 注意到了,但她不熟悉路,也幫不到我。
我從高台上往下跑,一路沒煞車,在走一條一格寬的樓梯時差點跌進岩漿海。
我跑到了要塞的走廊上,這時連凋零骷髏也來找我了。後方是幾十隻憤怒的殭屍豬人,而前面則有凋零骷髏數只,我心一橫,有我這把鋒利4鑽劍,還有什麼打不贏的敵人?
但在緊張下,我的攻擊卻屢屢放空,而後方 Andrea 的救援卻遲遲不來,舉盾擋住一邊就遭到另一邊的攻擊,凋零骷髏的凋零效果讓我看不清血量。而當我正在吃金蘋果時,眼前出現了一片紅屏。
我死了。
# 一場空
憤怒的殭屍豬人停止了,恢復了平常呆呆的樣子。Andrea 終於到了,但看到的已是掉了滿地的物品。她趕緊幫我撿起來,能撿多少算多少,但她的背包太滿,裝不下我的所有裝備。
我在家裡重生,望著自己空空的背包,以及歸零的經驗條。趕緊抓了些破衣服,拿了把粗製的鐵劍,帶瓶抗火藥水,準備衝回地獄。
Andrea 聽我的指示,先離開危險的要塞,回到我們地獄的基地,我和她在基地會合,先給我一些撿到的物品。
> 就只有這樣?
只撿回了一把鑽劍,我那吃到一半的金蘋果,以及一條褲子。
「也許還有些遺落的在那邊」,我們趕緊出發,再次進入要塞,但到了我所死亡的地點,卻不見任何東西。
> 不會吧...
我不敢相信,在要塞中不斷尋找,但就是找不到我遺落的物品。
回到了家中,我的裝備已不再,原本一趟掠奪之旅,竟然換來一場空。
> 「你想...回到過去嗎?」
# 回到過去
「可以嗎?」,Andrea 十分震驚,因為 **就算是創造的世界,仍辦不到穿越時空這件事。**
其實在八月的時候,我就開始用版本控制工具 [Git](https://git-scm.com/) 來紀錄我們的世界,每次玩完就會做一個紀錄。因此我就得以回到過去存檔的任何時間點。
我先關閉了伺服器,將這次的更動先放到一個分支,將世界 checkout 回主分支,就回到了我們出發前的世界。
```
$ git add .
$ git checkout -b dead-branch
$ git commit -m "死了"
$ git checkout master
$ ./start.sh
...
Done
>
```
我啟動了伺服器,登入。
眼前出現了我的家,而手中握著的正是我失去的裝備。
我笑了。
# 來自未來的地獄樓梯
在回到了過去後,我們進展非常順利,遇到一樣的怪,一樣的附魔,有種不可思議的感覺。
我們再度到了地獄,卻發現一見非常離奇的事。
> 「這個樓梯,不是我們剛剛挖的嗎?」
剛才挖的那條樓梯,竟然還在!但它明明已經被 format 掉的啊!
我懶的去猜測為什麼,也許我的 Git 沒有把地獄一起存進去吧?
**直到發生了那件事**
過了一段時間後,我們開始了新的計畫,要在沙漠蓋一座宮殿。我們已在另一個創造世界蓋好了草圖,打算用生存複製一份。
在興建的期間,我為了伺服器的安全性,將伺服器從執行在自己的使用者,改成用一個專門使用者 minecraft 來負責執行,避免有 sudo 權限的帳號被入侵造成系統危險。
於是我建立了 minecraft 使用者,將世界的檔案 clone 一份過去。我在前些時間將伺服器從官方改成用 [spigot](https://www.spigotmc.org/) ,所以也把 spigot 一起複製過來,剩下的一些舊地圖就不管它。
由於沙漠與家裡的距離遙遠,約 5 公里,所以我們過去興建了 **地獄高速公路** ,透過地獄 : 主世界移動一格的距離為 8 : 1 的性質來大幅縮減往來的距離。
這次沙漠宮殿的建案花了我們一兩個禮拜的時間,由於材料都是當地取材,所以很久沒回家去看看了。
當我們終於完工後,要來鋪地毯,羊毛和染料都放在家裡,所以我就要回家一趟。我進了地獄門
> **「這裡是哪裡啊!」**
# 地獄消失了?
我的眼前是一片陌生的大地,雖然我們不常在地獄探險,但畢竟親自蓋了高速公路,對於地貌還是有些印象的。我原先以為是傳送門又跑到了奇怪的位置,過去沙漠的這個傳送門當從地獄回來時常常跑到一些荒郊野外去,很討厭,都必須將新的門破壞掉才能夠恢復原本的通路。
我原本沒多想,以為這次也是門跑掉,所以就回去拿了炸彈,準備把這個新的怪門給炸掉。所以我叫 Ken 待在主世界,我帶著炸藥過來,我把舊的門炸掉後,再叫 Ken 進到地獄,應該就可以找到原本的門了。
好巧不巧,我在炸門的時候,一隻殭屍豬人正好給我走過來,而且偏偏還沒炸死,頓時空氣瀰漫著殭屍豬人的憤怒聲,我叫 Ken 趕快過來,一邊奮力反抗。但當 Ken 進來時,新的傳送門卻離上一個沒多遠,但時間緊迫,我趕緊衝進傳送門回到主世界,一隻殭屍豬人也跟著我一起回來了。
在主世界把那隻殭屍豬人宰殺後,我們開始疑惑了,**怎麼會兩次傳送門都壞掉呢?**,我們決定回家一趟,剛好沙漠的馬廄還有兩匹馬,於是我們騎著馬走著很久未行的驛道回家。
自從地獄高速公路完工後,這條驛道就荒廢了,久久沒有騎著馬在大地上奔馳,突然也有點懷念。半天過後,我們到達家。
我們一下馬,馬上衝到地獄傳送門,希望可以趕快找回原本的門。站在傳送門中,看著眼前越來越模糊...
> 「地形建構中...」
> 「唰」
眼前出現的是一大片陌生的大地,原本的車站、道路、火把,全部都不見了,這時我才恍然大悟
> *** 「地獄不見了!」***
# 原來是...
> 「傳送門颼颼聲...」
>
我愣住了,昔日的車站、高速公路、地獄古堡,地獄熟悉的一切,全部已經不在了,我不敢相信自己的眼睛,反覆的進出地獄,但仍然改變不了事實。
我突然想起,自己使用 Git 來版本備份,這麼說,檔案應該還在。我關掉伺服器,將地圖回復到教早的版本。
```
$ git checkout 4a55
```
地圖時間回到了一個禮拜前,我開啟伺服器,再進去一次,我一進去就直奔地獄。
「地形建構中...」
空氣中充滿著殭屍豬人的憤怒聲,我感到疑惑,**我明明是剛剛才打了殭屍豬人,為什麼一個禮拜前的殭屍豬人會對我生氣?**
我上網查 Minecraft 究竟是怎麼儲存地獄的,在 [Minecraft Wiki](https://minecraft-zh.gamepedia.com/index.php?title=%E4%B8%8B%E7%95%8C&variant=zh-tw#.E6.8A.80.E6.9C.AF.E6.80.A7.E4.BF.A1.E6.81.AF) 查到了這個
> 地獄的存檔方法與普通世界存檔方法相同,默認都在下列位置:
>...
> 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/
```
接下來每個世界都可以版本控制了。
在設定完成後,我再度啟動了伺服器,進到了地獄。眼前是熟悉的車站,熟悉的道路,熟悉的地獄疙瘩田,我漫步走在高速公路上,看著下方的岩漿海。
突然一隻地獄幽靈從下面出現,朝我的正下方發射了火球,我來不及反應,橋被硬生生炸斷,我掉進了廣大的岩漿海,來不及喝藥水,我就死了。
我嘆了口氣
> 「唉...又要回到過去了。」。
# 後記
這篇文章由於是發表在我的部落格 ,書寫上使用的是 Markdown ,貼上來想說乾脆就不用改了,保留著讓一般人也可以習慣 Markdown 的語法。
OurLiveWorld 是我和朋友經營了半年的 Minecraft 生存世界,我偶爾會寫些裡頭的冒險故事,希望把遊戲,用不同的方式呈現出來。
Like my work? Don't forget to support and clap, let me know that you are with me on the road of creation. Keep this enthusiasm together!


- Author
- More