"你明白嗎?這是一場賭注,"坐在我對面的女人玩弄着頭髮,歪着頭對我說,"而且至今為止你的所有的籌碼,都僅僅是出自你自己的猜測,甚至其中有些是你的臆想."她眯緊了眼睛,露出了一絲詭異的微笑.
然後是良久的沉默,我和她都一言不發地盯着對方,下午的陽光透過咖啡店的玻璃,照在桌上兩杯已經涼了的咖啡上,照在她白色的帽子上,照在我已經被晃得微微發痛的眼睛上.最終她厭倦了這樣的沉默,從不可名狀的地方掏出了她的紫色洋傘,整理了一下衣領便站起來準備離開,"況且迄今為止,你對她的認識大多是來自你自己推理出的結論,而不是客觀的調查,如果僅憑這些你就想下注的話,未免也太過於..."
"事實上我認為我可以贏."我打斷了她的話,已經站起來準備離開的她又停了下來,帶着滿臉的驚奇將頭轉向了我."而且我感覺這次的勝率是前所未有的高."
-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.
注:最初在這裡還有個如何設置資源文件目錄,但在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參數為遊戲的工作目錄,因此就沒有必要再自己指定了.
現在你已經完成了一個方案配置.返回到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!(鬧毛啊...)
發布那裡能不能寫詳細一點啊?
一開始recompile叫我嘗試decompile...decompile顯示n多錯誤之後,再用recomplie又顯示代碼有100個錯誤,然後直接用reobfuscate了...
輸出的文件是一個jar嗎?看上去很大?裡面包括了全部class,不是應該只有mod那幾個class才對嗎?
依賴ide真心弄不清這些bat的作用是幹什麼了
樓上的叫你嘗試decompile也許是缺少伺服器的src?
你重新decompile不是會把你原本的東西蓋過去嗎?
反正我現在已經都完全理解不了他是這樣發布了
二月 03, 2014 3:52:28 下午 net.minecraft.launchwrapper.LogWrapper log
信息: Using tweak class name cpw.mods.fml.common.launcher.FMLTweaker
2014-02-03 15:52:28 [信息] [ForgeModLoader] Forge Mod Loader version 6.2.62.871 for Minecraft 1.6.2 loading
2014-02-03 15:52:28 [信息] [ForgeModLoader] Java is Java HotSpot(TM) 64-Bit Server VM, version 1.7.0_45, running on Windows 7:amd64:6.1, installed at C:\Program Files\Java\jdk1.7.0_45\jre
2014-02-03 15:52:28 [信息] [ForgeModLoader] Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
2014-02-03 15:52:28 [信息] [STDOUT] Loaded 39 rules from AccessTransformer config file fml_at.cfg
2014-02-03 15:52:28 [信息] [STDOUT] Loaded 107 rules from AccessTransformer config file forge_at.cfg
2014-02-03 15:52:30 [嚴重] [ForgeModLoader] The binary patch set is missing. Either you are in a development environment, or things are not going to work!
2014-02-03 15:52:30 [信息] [ForgeModLoader] Launching wrapped minecraft
2014-02-03 15:52:31 [嚴重] [ForgeModLoader] Unable to launch
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:57)
at net.minecraft.launchwrapper.Launch.main(Launch.java:18)
Caused by: java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at org.lwjgl.Sys$1.run(Sys.java:73)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
at org.lwjgl.Sys.loadLibrary(Sys.java:95)
at org.lwjgl.Sys.(Sys.java:112)
at net.minecraft.client.Minecraft.getSystemTime(Minecraft.java:2456)
at net.minecraft.client.main.Main.main(Main.java:37)
... 6 more
google一下大概是說丟失了natives文件...
跪求解決方法
按這個帖子的說法是LWJGL的JNI庫位置設錯了...在項目屬性里的Java Build Path - Libraries中,把lwjgl-2.9.0的Native library location設定到"[Forge目錄]/build/natives"
請問一下> <,1.7以上的版本怎麼發布呢?
沒有MCP就沒有recompile.bat和reobfuscate.bat。。。
直接用forge/bin目錄下的文件打包的mod不能使用。。
好吧= =,我找到方法了。。。還是表示感謝,最近一直來打擾(我是MCBBS的那個fqy92,不知您還有印象不
我是1.7.10,但是依然沒有MCP,如何解決啊?
霧草不要看這篇了,沒看索引貼寫着從1.7開始就不用考慮這個了嗎 ← ←
qwq能教我一下怎麼打包嗎,謝謝
-w-嗯……自己找到方法了,謝謝w
話說我要是代碼本身不是在mcp下的而是在別的文件夾里然後再eclipse里通過LinkSource過來的,這樣要發布的時候需要有什麼額外的步驟嗎?還是直接分別運行recompile.bat進行編譯,然後再運行reobfuscate.bat就可以了?另外reobfuscate之後是輸出到哪裡了我沒找到。。。
這個...這已經是1.6時代的東西了啊... 我記得在MCP中要編譯外部的源碼的話,可以改mcp/conf/mcp.cfg中的CmdRecomp一項,在-sourcepath "{sourcepath}"中加上外部代碼的路徑,比如-sourcepath "{sourcepath};D:/xxx/"
謝謝
確實是還停留在1.6mcp時代qwq主要是沒啥自信打算等過一陣子再熟悉下再換成新的