"你明白吗?这是一场赌注,"坐在我对面的女人玩弄着头发,歪着头对我说,"而且至今为止你的所有的筹码,都仅仅是出自你自己的猜测,甚至其中有些是你的臆想."她眯紧了眼睛,露出了一丝诡异的微笑.
然后是良久的沉默,我和她都一言不发地盯着对方,下午的阳光透过咖啡店的玻璃,照在桌上两杯已经凉了的咖啡上,照在她白色的帽子上,照在我已经被晃得微微发痛的眼睛上.最终她厌倦了这样的沉默,从不可名状的地方掏出了她的紫色洋伞,整理了一下衣领便站起来准备离开,"况且迄今为止,你对她的认识大多是来自你自己推理出的结论,而不是客观的调查,如果仅凭这些你就想下注的话,未免也太过于..."
"事实上我认为我可以赢."我打断了她的话,已经站起来准备离开的她又停了下来,带着满脸的惊奇将头转向了我."而且我感觉这次的胜率是前所未有的高."
-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主要是没啥自信打算等过一阵子再熟悉下再换成新的