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!(闹毛啊...)