MCP&Forge的Mod教程 Extra編(2) – 在Eclipse下編譯和調試

"你明白嗎?這是一場賭注,"坐在我對面的女人玩弄着頭髮,歪着頭對我說,"而且至今為止你的所有的籌碼,都僅僅是出自你自己的猜測,甚至其中有些是你的臆想."她眯緊了眼睛,露出了一絲詭異的微笑.
然後是良久的沉默,我和她都一言不發地盯着對方,下午的陽光透過咖啡店的玻璃,照在桌上兩杯已經涼了的咖啡上,照在她白色的帽子上,照在我已經被晃得微微發痛的眼睛上.最終她厭倦了這樣的沉默,從不可名狀的地方掏出了她的紫色洋傘,整理了一下衣領便站起來準備離開,"況且迄今為止,你對她的認識大多是來自你自己推理出的結論,而不是客觀的調查,如果僅憑這些你就想下注的話,未免也太過於..."
"事實上我認為我可以贏."我打斷了她的話,已經站起來準備離開的她又停了下來,帶着滿臉的驚奇將頭轉向了我."而且我感覺這次的勝率是前所未有的高."
-Indecisive Heart

由於無聊,我又寫了第二篇Extra編,這一次並不是教Mod製作,而是Mod的編譯和調試.
準確的說,是Mod在Eclipse下的編譯和調試,以前我們都是用recompile.bat來編譯,用startclient.bat來運行,用自己寫的信息輸出來調試,如果是這樣的話,那未免也太浪費Eclipse的潛力了.為什麼不試試在Eclipse下執行這一切呢?現在我們就要來模擬MCP的啟動命令,在Eclipse中編譯和運行.
我一直在想這個坑爹的東西真的配得上Extra編的稱號嗎?難道不應該放在基礎教程嗎...也許某一天這玩意就會被Extra編除名吧...

配置客戶端的編譯&運行方案

(注:在此之前,請先確認你的項目是按照我的基礎教程(1)中的那樣配置的)
右鍵你的Minecraft項目,選擇Properties(菜單最下面的那個),然後選擇Run/Debug Settings,這個界面是用來配置啟動/除錯的方案的,我們點擊New來新建一個,系統會讓你選擇是基於Java小程序還是基於Java應用程序(Java Application),小程序是供網頁使用的,我想我們沒多少人對它有興趣,所以我們自然要選擇應用程序.

然後我們就到了這個界面,首先我們要配置方案的名稱和入口類(Main Class),項目名稱我定為MinecraftDebug,客戶端的入口類選為net.minecraft.launchwrapper包下的Launch.
E2-1

注:最初在這裡還有個如何設置資源文件目錄,但在MC1.6改變資源文件管理方式後,這個內容因為失效所以被刪去了.現在另有一種替代方法可實現資源文件外置,但因為是"歪門邪道",而且與啟動配置無關,所以沒有被寫入本篇.

然後點到Common頁,配置編譯的編碼,這裡我們選為UTF-8,另外對於Display in favorites menu,那個是是否顯示在啟動/調試按鈕的下拉菜單中,這個不影響實際操作,實際操作時你直接點擊啟動/調試按鈕那麼就是使用此方案,而無需點開它們的下拉菜單.

最後,我們返回Arguments頁,進行最關鍵的一步,參數的配置.在Program Arguments里填上:
-username [改為你的玩家名] -session - -version [遊戲版本] -gameDir [你的mcp目錄]/jars -assetsDir [你的mcp目錄]/jars/assets -tweakClass cpw.mods.fml.common.launcher.FMLTweaker
關於參數,[遊戲版本]可以直接填版本號,比如1.6.2,也可以乾脆就填個FML_DEV,讓FML決定版本.
(注:由於Wordpress的某些特性,你在這篇教程里看到的參數前的橫杠可能是全角符號'-',事實上,這裡應使用半角橫杠'-',全角比半角要稍微長一點,複製到記事本上後你能明顯看出兩者的區別,遊戲接受的參數只能使用半角符號,如果你遇到了這種情況,請手動在Eclipse里糾正.)
另外關於Working Directory,過去它是MC的工作目錄,現在遊戲會強制指定gameDir參數為遊戲的工作目錄,因此就沒有必要再自己指定了.
E2-2

現在你已經完成了一個方案配置.返回到Eclipse主界面,找到你頭上的小按鈕,綠色圓圈中間一個白色箭頭是啟動,綠色蟲子是調試,兩者都是編譯並運行,但後者會遵從你的調試器的管理,如果你想用程序斷點來調試的話,就啟動後者吧!

FML的Relaunch和可愛的Eclipse輸出窗口.(真的是可愛?這玩意承載了我多少的噩夢...)

順利進入遊戲!妥妥的!外部資源文件也載入正常!(前提是你放進去了...)

調試

其實到這裡已經沒什麼好說的了,我相信用中文版Eclipse的各位肯定對Eclipse的功能了如指掌...

這裡我加了一個斷點.

然後進遊戲用迪拉克礦錠對着地一敲,彭...可愛的Eclipse調試界面就出來了!多麼親切的指令棧!
(其實有用的調試工具還有很多...如果只為一個指令棧和變量監視的話就真辜負了Eclipse了)

發布

當你需要發布的時候,先運行MCP下的recompile.bat進行編譯,然後再運行reobfuscate.bat進行發布.
也許你會問我為什麼不通過Linkd Folder和修改Output Folder來做到直接輸出到MCP的bin目錄下,因為你需要考慮MD5的問題,Eclipse的輸出經過了優化,由於MD5變動會導致reobfuscate一口氣將所有文件都發布出來,你確實可以updateMD5,但仍有其他問題.
因此,我強烈建議你稍微麻煩一下,在發布時手動操作幾下,這能避免很多不必要的麻煩.

配製服務器的編譯&運行方案

其實這個和客戶端差不多,打開Properties,選擇Run/Debug Settings,將你的客戶端方案複製(Duplicate)一份,將其改個名字,將參數改為
-version FML_DEV -gameDir [你的MCP目錄]/jars -assetsDir [你的MCP目錄]/jars/assets --tweakClass cpw.mods.fml.common.launcher.FMLServerTweaker
(其實就是改了個tweakClass,然後去掉了玩家姓名和登陸會話)
.最後,在Common頁的Display in favorites menu中把它們選上,不然你可能無法啟動這個方案...

之後開始測試吧,別忘了在下拉菜單中選你的新配置方案.剛啟動時會下載一些必須的庫,下載完畢後就啟動了.不過剛開始你是進不去遊戲的- -因為online-mode=true,將服務器關掉後改一下設置然後再啟動,之後進去試試.

看上去效果不錯,不是嗎?
(好像有奇怪的東西進去了,不過別在意.)

結尾

"陳女士:'你是愛我還是愛紫媽?'"
-Ethern,QQ聊天記錄

就這麼完了嗎...是啊,這篇只有1800多字,只有上一篇的一半長度.不過我想這篇教程還是有一定作用的.另外學海無涯,你還可以研究如何利用附加參數來做到MCP啟動做不到的事,比如附帶玩家信息.繼續裝哉我大Forge!F@CK THE SPOUT!(鬧毛啊...)