首先需要强调,这个教程不是给没有任何编程基础的人准备的...你至少要懂得最基础的编程知识和OOP(面向对象编程)的基础,如果你真的对编程一窍不通的话建议先读读Java教程.
胡来的前言
明明在索引贴不是已经有一个前言了吗?那个是我在3月份写的,在离死又近了7个月后,我又有些新的话想说.前言和教程内容没有任何关系,懒得看文字的跳过就好了.
"当我们追求各种各样的Mod的时候,还记得当初在Alpha时代拿着石镐裸身下矿洞时的感动吗?"这个是我在PD服务器管理组讨论服务器Mod配置问题时说的,以现在的眼光看,Alpha版的MC无比简陋,然而当初我们却能孜孜不倦地下坑,挖矿,努力从矿洞中逃出生天,如此反复直到被骷髅送去见四季映姬(早期版本的JJ怪真不是威胁)...
"一个遗世独立的理想乡"这是我对Alpha1.1的MC的评价,在那个时候,没有Mod,没有MCP,没有作为新人的梦魇的HIM,没有明争暗斗的ModLoader和Forge,没有飞扬跋扈的Spout,没有短命的MCP MF/MS,就连当时的服务器端都是没有Mob的...MC就宛如一片生机盎然的净土(对开局随机到雪地地图的人例外)而玩家作为这片世外桃源中唯一的人类,用双手用工具,开拓出自己的家园.有人在树林中建起一座木屋,有人建起了一座城堡,玩家们挖开了家周围的泥土种上沙子和仙人掌作为护城沟,掏空了一座山建造自己心目中的Secret Base.MC犹如一片乐土,但是这又能维持多久呢...
一年半后,MC迎来了正式版,杀死Ender龙后的诗凝缩了Notch在3年间对Minecraft的所有感情,所有的辞藻汇聚成Notch眼中的MC的主题"A Dream",梦终了,Notch投身于0x10c中.不小心在自己名字中多打了一个e的JeB成了开发组的老大,MC也自然开始向"Jeb眼中的MC"发展,我倒并不是认为Jeb将MC搞砸了,但我感觉MC在慢慢变成一个RPG游戏,而不是最初的沙盒.可又能批评什么呢?"所有人都是如此爱着这个世界,以至于不允许它不向自己希望中的方向发展."谁都有权将MC改变成自己希望中的样子,这正是MC的魅力,而Mod则是实现这一目的的工具.
我尽力将这篇教程写好,我会竭力让它通俗易懂,能够让更多的人明白MCMod的开发.如果有人将上面的前言看完的话,Vielen Dank.
-szszss
-2012.10.27 23:00
-听着"八云紫のタイムマシン" 写下了这篇肾疼的前言
开发环境准备
首先你要准备JDK(Java开发工具包)和一个代码编辑器,我习惯用Eclipse(曾经是最流行的Java代码编辑器,现在嘛...至少是最流行的免费代码编辑器.不过在IDEA推出免费的社区版之后,它或许连最流行的免费代码编辑器都不是了 ?)
最新版本的JDK应该是JDK8,虽然MC要求Java6,但高版本JDK可以编译出低版本的代码.因此在版本的选择上不用太在意.JDK可以在官网下载,网址是:
JDK8:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
根据自己的操作系统来选择相应的版本,64位的Windows使用Windows x64版,32位Windows使用Windows x86版.
然后是准备一个Java编辑器,我使用的是Eclipse,这篇教程的代码也是在Eclipse下编写的,如果你喜欢的话,你也可以使用IDEA或NetBeans.现在很多人称IDEA很好用,但我总是不习惯IDEA的界面(感觉像是儿童玩具(笑) 不过JetBrain能用Swing搭出这种界面也不容易了).具体两者的对比可以上网搜一下,但不建议参考逼乎.
Eclipse可以在这里下载,网址是:http://www.eclipse.org/downloads/
最新版Eclipse是4.5版(代号Mars),同时Eclipse还分很多个定制版本,每个定制版本都预装了不同的插件,我因为个人需要所以使用的是"Eclipse for RCP and RAP Developers",你可以考虑"Eclipse IDE for Java Developers".同样每个版本又细分为64位版和32位版,根据你的操作系统来选择下载.这里下载来的是英文版,安装汉化的方法可以参照这个文章:http://www.cnblogs.com/yaotong/archive/2011/12/28/2305421.html.
IDEA可以从官网下载免费的社区版,开发MCMod足以了:https://www.jetbrains.com/idea/#chooseYourEdition
首先安装JDK,通常来说如果安装顺利的话程序会自动配置环境变量,否则你需要按照这个的步骤来自行配置环境变量
http://zhidao.baidu.com/question/351018707.html
http://www.cnblogs.com/kevinlocn/archive/2009/10/12/1581855.html
之后安装Eclipse或IDEA,Eclipse无需注册表或任何安装程序,直接将其解压到一个目录下就行了.IDEA则是通过安装包来安装.
然后便是MDK的安装.首先要说明什么是MCP和MDK,以及ForgeGradle、Forge和FML的区别.
MCP即Minecraft Coder Pack,它类似于其他软件的SDK(Software Development Kit,软件开发工具包),供开发者进行二次开发的源代码与工具包,那为什么MCP不直接叫MSDK(MC SDK)呢?因为MCP是个被官方默许的反向工程项目,Minecraft是个闭源的软件,而MCP的工作组则是将MC反编译并顺带反混淆(官方对源代码进行了混淆操作,将原本有意义的变量,方法,类名变成了无意义的文字,反混淆则是分析其功能并附上合理的名字),同时附上了一些有用的开发工具.MCP是Mod开发的基础,一定程度上说,没有MCP的话,MC也就没有如今的成就.
遗憾的是,MCP项目已经开始没落了...这个将会在下面的FML部分说到.
Forge则是MinecraftModAPI库,它实现了一些被大众所需的最基本的功能,最初Forge只是一个使用ModLoader(简称ML)的Mod,因为它依赖一些ML的功能,同时依赖ML的Mod加载功能.后来在某个版本中Forge实现了自己的Mod加载,于是摆脱了对ModLoader的依赖,并且与ModLoader开始不兼容...后来Forge搞出了个ForgeModLoader.
ForgeModLoader(简称FML)是ModLoader的替代品.尽管ForgeModLoader和Forge从来都是捆绑发布和运行的,但从代码的角度来看,两者其实是独立的,这一点你可以从FML和Forge的包结构中看出来.FML跟ModLoader相比有很多优点,首先它是开源的,这意味着任何人都可以对FML做出补充,这也是为什么FML的功能越来越丰富,而ModLoader则始终是只有那几样而已.FML的开发维护者也很多,除去两三位主力外,还有上百位开发者在或多或少贡献代码.更重要的是,如今FML已经掌起了MCMod界的大旗,毫不夸张的说,MC的最高版本不是由Mojang决定而是由FML决定...(就拿1.8来说,如果FML不更新的话,你会玩1.8吗?)如今MCP基本已经弃坑了,其发起人Searge已被Mojang招安...FML已经接替了MCP的任务,并且从1.7开始,FML使用了一种新的代码构建方式:ForgeGradle.
ForgeGradle是一个封装好的Gradle插件,它能够形式原本MCP的责任,反编译MC并准备开发环境.Gradle是一个构建工具,它比Ant(一个很基本的Java构建工具)要高级,但比Maven(一个很高大上的Java构建工具)要简化一些.虽然看上去低不成高不就,但它使用起来确实挺不错,首先它比Ant的构建功能要强,正好适合MCMod复杂的发布方式,其次它支持使用Maven的代码仓库,Maven制定了一套代码仓库标准,一个程序库发布后可以直接上传到在线的仓库中,使用者能直接从仓库下载需要的库,而无需自己手动寻找.最后,Gradle比Maven要简单很多,开发者不必花费大量的时间来学习.
不过,有很长一段时间Forge官方对Mod开发环境一直没有一个正式的称呼,直到MC1.8的晚期版本,Forge开发组才给Mod开发环境起了个正式名字:MDK(Mod Development Kit?)
我们为什么需要ModLoader和FML?最原始的Mod是直接修改游戏文件,这意味着如果两个Mod修改了同一个文件的话,就会发生可怕的冲♂突.ModLoader的出现一定程度上解决了这个问题,它封装了最基本的一些操作,这让大部分Mod无需修改MC原本的类就能实现各种功能.MCPModSystem(请为它点一支蜡烛,虽然没有人记得它,但它确实曾在这个世界上存在过),Spout和ForgeModLoader则将这一特性发扬光大.
(关于Forge,FML和FG的更多的故事,可以看这个帖子的5L)
开发环境的配置
首先我们要下载MDK,MDK的下载地址在这里
http://files.minecraftforge.net/
在某次网站改版之后,Forge下载站有了完善的界面,现在已经很直观地能看出如何选择要下载的版本.建议下载Recommended版(即稳定版,非稳定版有小概率遇到猎奇事件,例如某个非稳定版的Forge无法创建世界).如果没有Recommended,那再考虑Latest.由于我们是开发者,这里是点"Mdk"来下载开发工具.(如果是1.7或更早版本的话,是点"Src")
图:撰稿时Forge下载站1.9.4只有Latest版,当你看的时候应该已经有Recommended版了.
(提示:Forge的默认下载链接是到adfoc,它是让你先看5秒广告,然后才能点右上角的链接继续下载.如果你不喜欢看广告,或者在你那里adfoc被墙了的话,可以右键Mdk选复制链接(或者其他什么的,取决于你用的浏览器,如果是IE那就是"复制快捷方式"),然后粘贴到浏览器地址栏里,手动删掉前面的adfoc地址,只留下后半段真实下载位置)
将MDK的压缩包解压到一个文件夹,建议避免目录中带有非ASCII字符(比如汉字),也不推荐带有空格,我们先来视奸一下MDK中都有什么.
除去txt文本和.gitignore,这里主要分为四部分:
- Gradle的终端 - 用于在未安装Gradle的机器上部署Gradle,以及运行Gradle指令.由文件夹gradle和文件gradle与gradle.bat组成,后两者分别是Unix/OSX和Windows下的终端.
- build.gradle - 构建文件,这个文件用来告诉Gradle如何部署和构建一个项目.
- eclipse - 预置的Eclipse工作目录,由于Eclipse的配置文件包含了不少二进制数据,想就地生成比较困难,因此MDK提供了一个已经预置了一些配置的Eclipse工作目录,注意区分工作目录和项目.此外,在老版本(1.7和早期的1.8)中这还是存放调试时的游戏文件的地方,在新版中已经改到run目录了.
- src - 源码目录,存放Mod的代码和资源文件,这个之后会详细介绍.
现在可以通过Gradle终端来着手配置环境了.打开命令窗口并切换到这个文件夹.
(Windows7及以上有个很方便的方式,就是按住Shift然后右键,就能选择直接在当前目录中打开命令窗口.这个是yuxuanchiadm教给我的...)
在控制台内输入:
gradlew.bat setupDecompWorkspace
(注:其实即使在Windows下,"gradlew.bat"也可以简写成"gradlew",CMD会自动执行gradlew.bat文件的.我这里是习惯了改不过来了?)
(再补充一条@HaozheJiang在评论中提到的Linux下的指令:"./gradlew setupDecompWorkspace",此外如果中途遇到权限不足的问题的话,可以尝试"chmod +777 gradlew")
然后回车执行...之后ForgeGradle就会自动下载和配置操作环境了,很方便吧...
(提示:其实我还习惯加上-i,来让控制台显示当前的进度,否则卡住了的话连卡在哪都不知道...)
如果你真以为方便那你就输了,你可能会在下载过程中遇到各种谜の卡死或下载不能,甚至会在gradle文件下载时就卡住,这和天朝的GFW有关.
如果你在下载Gradle(屏幕上显示"Downloading https://services.gradle.org/distributions/gradle-2.X-bin.zip")时卡住的话,可以手动编辑gradle/wrapper/gradle-wrapper.properties文件(但不建议用记事本,随便别的什么文本编辑器都可以,哪怕写字板都行),将:
distributionUrl=https\://services.gradle.org/distributions/gradle-X-bin.zip
改为:
distributionUrl=http://forgemavenmirror.sinaapp.com/gradle/gradle-X-bin.zip
其中X为具体的Gradle版本,比如2.7.
然而在配置ForgeGradle过程也经常会出现卡死,通常是发生在从网上下载代码库的时候,这就需要考虑使用ForgeGradle on Wall.
关于如何配置FGOW来加速有有篇专门的文章,不过我想各位应该不想在这上面花太多时间,因此这里直接讲最后配置的结果,还记得之前提到的build.gradle不?用文本编辑器将它打开,然后根据你使用的版本来修改它:
1.8.0
将'version = "1.0"'的前面的所有内容替换为:
buildscript { repositories { maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.0-SNAPSHOT' classpath 'net.hakugyokurou.fgow:fgow:1.2.0' } } ext.mcpJsonUrl = "http://forgemavenmirror.sinaapp.com/versions.json" ext.forgeJsonUrl = "http://forgemavenmirror.sinaapp.com/maven/net/minecraftforge/forge/json" ext.skipFGVersionCheck = true apply plugin: 'fgow' repos { mcJsonUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.json" mcClientUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.jar"; mcServerUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/minecraft_server.{MC_VERSION}.jar";; assestIndexUrl = "http://bmclapi2.bangbang93.com/indexes/{ASSET_INDEX}.json"; assestUrl = "http://bmclapi2.bangbang93.com/assets" mcpUrl = "http://forgemavenmirror.sinaapp.com/fernflower-fix-1.0.zip" } repositories { flatDir { name "local"; dirs "/" } maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } }
1.8.8/1.8.9/1.9
将'version = "1.0"'的前面的所有内容替换为:
buildscript { repositories { maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT' classpath 'net.hakugyokurou.fgow:fgow:1.2.2' } } ext.mcpJsonUrl = "http://forgemavenmirror.sinaapp.com/versions.json" ext.forgeJsonUrl = "http://forgemavenmirror.sinaapp.com/maven/net/minecraftforge/forge/json" ext.skipFGVersionCheck = true apply plugin: 'fgow' repos { mcJsonUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.json" mcClientUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.jar"; mcServerUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/minecraft_server.{MC_VERSION}.jar";; assestIndexUrl = "http://bmclapi2.bangbang93.com/indexes/{ASSET_INDEX}.json"; assestUrl = "http://bmclapi2.bangbang93.com/assets" mcpUrl = "http://forgemavenmirror.sinaapp.com/fernflower-fix-1.0.zip" } repositories { flatDir { name "local"; dirs "/" } maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } }
1.9.4
将'version = "1.0"'的前面的所有内容替换为:
buildscript { repositories { maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT' classpath 'net.hakugyokurou.fgow:fgow:1.2.2' } } ext.mcpJsonUrl = "http://forgemavenmirror.sinaapp.com/versions.json" ext.forgeJsonUrl = "http://forgemavenmirror.sinaapp.com/maven/net/minecraftforge/forge/json" ext.skipFGVersionCheck = true apply plugin: 'fgow' repos { mcJsonUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.json" mcClientUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/{MC_VERSION}.jar"; mcServerUrl = "http://bmclapi2.bangbang93.com/versions/{MC_VERSION}/minecraft_server.{MC_VERSION}.jar";; assestIndexUrl = "http://bmclapi2.bangbang93.com/indexes/{ASSET_INDEX}.json"; assestUrl = "http://bmclapi2.bangbang93.com/assets" mcpUrl = "http://forgemavenmirror.sinaapp.com/fernflower-fix-1.0.zip" } repositories { flatDir { name "local"; dirs "/" } maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } }
选读:对上述代码的解释
哇,你还真是好奇心很强的类型啊,我喜欢?
之前已经提到了build.gradle是告诉Gradle如何部署和构建一个项目的,准确来说,它的学名是构建脚本,不同的软件构建系统有不同的脚本,比如构建C/C++的CMake有CMakeList,之前提到的Maven也有pom,Gradle则采用的是build.gradle,它的一个特点是其本身其实是一段可执行的Groovy程序.Groovy是一个类Java的脚本语言,有着十分灵活的语法,Gradle便选用它作为构建脚本的语言.
由于构建脚本本身就是可编程的,理论上所有的操作都可以放在脚本中进行,但有些重复性的操作可以被提取出来做成一个公用库,于是便有了Gradle插件,Gradle插件包含了一系列预置的操作,在脚本中可以通过apply plugin来载入一个插件.
不过有时候构建脚本会依赖一些第三方库来启动,于是便有了buildscript这个"用来构建'构建脚本'的脚本",buildscript用于描述构建脚本依赖的外部库和它们的下载源,比如MDK默认的buildscript是:
buildscript { repositories { jcenter() maven { name = "forge" url = "http://files.minecraftforge.net/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.X-SNAPSHOT' } }
这个buildscript表示在构建脚本的准备阶段,需要在JFrog的中央仓库和Forge的仓库下载ForgeGradle的插件和它的依赖库.而前面我们修改的buildscript是:
buildscript { repositories { maven { name = "fmm" url = "http://forgemavenmirror.sinaapp.com/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.X-SNAPSHOT' classpath 'net.hakugyokurou.fgow:fgow:1.2.X' } }
它指定了从FMM(Forge的非官方仓库镜像)下载ForgeGradle和FGOW和它们的依赖库.
再往后的代码就是配置FGOW的各种下载源了,在FGOW的下载页有详细的介绍,这里主要说明最后一段,最后一段你会发现又来了一个"repositories",而且在其下不远处还有个自带的"dependencies",那么这里的"repositories, dependencies"和buildscript中的"repositories, dependencies"有什么关系?
它们的差别是:这里的"repositories, dependencies"描述的是该项目的下载源和依赖的库,buildscript中的"repositories, dependencies"描述的是此脚本的下载源和依赖的库.比如如果我的项目额外使用了一种编译型语言,需要在构建时编译一遍,而运行时则不需要.显然只有构建脚本在启动时需要下载并加载该语言的编译器,而我的项目发布后便不再需要它了.因此要将项目和构建脚本的dependencies分开对待,至于你问为何repositories也要分开对待...
整个安装过程需要"一段时间",最长可能多达一个小时,如果你采用了上文中FGOW加速下载的话,中途应该不会有卡死的情况,但如果你发现在某一处地方真的停顿了超过10分钟的话,果断Ctrl+C中断操作然后重来 ? Gradle卡死现象防不胜防,确实神烦.
对于Forge1.7.X/1.8.X,如果你在getVersionJson阶段遇到形如"xxx.json could not be parsed","FileNotFoundException: Inherited json file (null) not found"之类的错误的话,尝试将gradle.build中的
classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT'
改成
classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-20160209.170057-21'
当你安装结束后(我忘了截图了...总之如果你稍微懂一点英语的话,就能看出控制台明显地提示已经安装成功,而不是安装未完或失败.)就可以着手开始配置IDE了.
Eclipse自动配置
Gradle支持自动生成Eclipse项目,但愿你现在还没有关掉命令窗口(如果已经关掉了的话...就再打开吧),在命令窗口中执行:
gradlew.bat eclipse
然后等待其操作完成,然后运行Eclipse,首次运行时会让你选择工作目录,直接将工作目录设为MDK目录下的eclipse目录中.如果你已经运行过Eclipse,并且已经设置过工作目录的话,打开Eclipse,点开左上角菜单File,选择Switch Workspace.
然后将工作目录切换到你的MDK目录下的eclipse目录中.
于是便完了...没错,自动配置就是这么屌炸,连配置启动方案都省去了= =
Eclipse手动配置
有时因为各种各样的原因,我们不想切换工作目录,这时就只能将项目导入然后手动配置项目,第一步还是跟自动配置相同,.
在Eclipse中打开File - Import,选择Existing Projects into Workspace.
然后在Select root directory中将目录设为MDK目录,注意是MDK目录而不是它下面的eclipse目录.
之后点Finish就可以导入了.现在你还需要自己配置启动方案.右键你的项目,选择Properties.
然后选择Run/Debug Setting,点击New添加一个启动方案.
首先我们要创建一个客户端启动方案.名字就叫做Client吧.将主类(Main Class)选为GradleStart.
然后打开Arguments页,将Working directory选为Other,内容填上:
${workspace_loc}
如果你需要设置用户名(用来显示皮肤)的话在Program Arguments中加入:
--username [用户名]
如果你有爱的话还可以在VM arguments里加入各种虚拟机优化参数
于是你便配置完客户端的启动方案了.如果你需要的话还可以配置服务器的启动方案,服务器的启动方案设置和客户端的相似,不同之处在于:
MainClass为:
GradleStartServer
Eclipse的收尾工作
无论你是手动配置Eclipse,还是自动配置Eclipse,都还剩下最后一步需要进行 - 更改文件编码和JDK版本
依然是在Properties页中,将Resource项中的Text file encoding设为UTF-8.否则你的Mod中的中文显示出来的都是乱码的.(如果默认是UTF-8的话那再好不过)
然后检查Java Compiler项,将Compiler compliance level设为1.6 (已经是1.6?那更好)
IDEA配置
配置IDEA首先要编辑build.gradle,在其中加入(如果不知道该加在哪的话...就加在最后吧!):
idea { module { inheritOutputDirs = true } }
然后在命令窗口中执行:
gradlew.bat idea genIntellijRuns
等它执行完毕后,打开IDEA,选Open,然后目录设为MDK目录.
之后打开就行了,按Alt-1来显示项目目录.
最后还要在项目目录中选中Forge模块,按F4(或者右键模块,点Open Module Settings),在Project Settings - Project中,将Project Language Level改为6. (已经是6了?唔...也好)
无论你用的哪种IDE哪种配置方法,至此开发环境配置便完成了(\散花/) 快点击Eclipse上方的Run按键或IDEA的Run菜单来运行一下试试吧.然而如果你发现运行不了,或者项目中少了很多东西...那很有可能是配置时哪里出了问题,可以参考这篇文章:http://blog.hakugyokurou.net/?p=1298#gradleslow.
附录 - 更换Gradle本地库位置
Win7下,Gradle的本地库位于C:\Users\[用户名]\.gradle下. 在评论中@魏澎总结了一种更换本地库位置的办法:
将.gradlew复制到新位置后,在环境变量的系统变量里加个名称为GRADLE_USER_HOME的变量,值填新的目录位置,之后在Forge目录内打开CMD,执行gradlew.bat inti修复Gradle,然后执行gradlew.bat eclipse/idea重新生成Eclipse/Idea文件,然后在Eclipse/Idea里重新导入项目.
你好啊~很高兴找到你的Bg 我做到 decompile的步骤 然后就failed了...?
版本1.8.8 jdk环境也设置好了De...试了很久了..很苦恼诶.= =
== MCP 9.18 (data: 9.18, client: 1.8.8, server: 1.8.8) ==
"scalac" is not found on the PATH. Scala files will not be recompiled
# found ff, ff patches, srgs, name csvs, doc csvs, param csvs, astyle, astyle co
nfig, rg, ss
== Decompiling client using fernflower ==
> Creating SRGs
> Applying SpecialSource
> Applying MCInjector
> Creating renamed srg
> Filtering classes
> Decompiling
'"C:\Program Files\Java\jdk1.7.0_17\bin\java" -jar runtime\bin\fernflower.jar -d
in=1 -rbr=1 -dgs=1 -asc=1 -rsy=1 -iec=1 -jvn=1 -log=WARN "-e=jars\libraries\net/
java/jinput\jinput\2.0.5\jinput-2.0.5.jar" "-e=jars\libraries\org/lwjgl/lwjgl\lw
jgl-platform\2.9.4-nightly-20150209\lwjgl-platform-2.9.4-nightly-20150209-native
s-windows.jar" "-e=jars\libraries\com/ibm/icu\icu4j-core-mojang\51.2\icu4j-core-
mojang-51.2.jar" "-e=jars\libraries\tv/twitch\twitch-external-platform\4.5\twitc
h-external-platform-4.5-natives-windows-32.jar" "-e=jars\libraries\org/apache/ht
tpcomponents\httpcore\4.3.2\httpcore-4.3.2.jar" "-e=jars\libraries\org/apache/lo
gging/log4j\log4j-api\2.0-beta9\log4j-api-2.0-beta9.jar" "-e=jars\libraries\org/
apache/commons\commons-lang3\3.3.2\commons-lang3-3.3.2.jar" "-e=jars\libraries\n
et/java/jutils\jutils\1.0.0\jutils-1.0.0.jar" "-e=jars\libraries\net/java/dev/jn
a\jna\3.4.0\jna-3.4.0.jar" "-e=jars\libraries\com/paulscode\libraryjavasound\201
01123\libraryjavasound-20101123.jar" "-e=jars\libraries\net/sf/jopt-simple\jopt-
simple\4.6\jopt-simple-4.6.jar" "-e=jars\libraries\com/google/guava\guava\17.0\g
uava-17.0.jar" "-e=jars\libraries\oshi-project\oshi-core\1.1\oshi-core-1.1.jar"
"-e=jars\libraries\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.j
ar" "-e=jars\libraries\org/apache/commons\commons-compress\1.8.1\commons-compres
s-1.8.1.jar" "-e=jars\libraries\net/java/dev/jna\platform\3.4.0\platform-3.4.0.j
ar" "-e=jars\libraries\com/paulscode\codecjorbis\20101023\codecjorbis-20101023.j
ar" "-e=jars\libraries\com/paulscode\soundsystem\20120107\soundsystem-20120107.j
ar" "-e=jars\libraries\com/paulscode\librarylwjglopenal\20100824\librarylwjglope
nal-20100824.jar" "-e=jars\libraries\org/lwjgl/lwjgl\lwjgl_util\2.9.4-nightly-20
150209\lwjgl_util-2.9.4-nightly-20150209.jar" "-e=jars\libraries\commons-codec\c
ommons-codec\1.9\commons-codec-1.9.jar" "-e=jars\libraries\org/apache/httpcompon
ents\httpclient\4.3.3\httpclient-4.3.3.jar" "-e=jars\libraries\org/lwjgl/lwjgl\l
wjgl\2.9.4-nightly-20150209\lwjgl-2.9.4-nightly-20150209.jar" "-e=jars\libraries
\commons-io\commons-io\2.4\commons-io-2.4.jar" "-e=jars\libraries\com/mojang\rea
lms\1.7.24\realms-1.7.24.jar" "-e=jars\libraries\com/mojang\authlib\1.5.21\authl
ib-1.5.21.jar" "-e=jars\libraries\com/google/code/gson\gson\2.2.4\gson-2.2.4.jar
" "-e=jars\libraries\tv/twitch\twitch\6.5\twitch-6.5.jar" "-e=jars\libraries\com
/paulscode\codecwav\20101023\codecwav-20101023.jar" "-e=jars\libraries\tv/twitch
\twitch-platform\6.5\twitch-platform-6.5-natives-windows-32.jar" "-e=jars\librar
ies\net/java/jinput\jinput-platform\2.0.5\jinput-platform-2.0.5-natives-windows.
jar" "-e=jars\libraries\org/apache/logging/log4j\log4j-core\2.0-beta9\log4j-core
-2.0-beta9.jar" "-e=jars\libraries\io/netty\netty-all\4.0.23.Final\netty-all-4.0
.23.Final.jar" temp/minecraft_ff_in.jar temp\src\minecraft' failed : 1
Decompile failed
请按任意键继续. . .
Sigh...大神你好,我在做1.8.9的MOD构健,我按照你的方法使用了了FGOW,然而还是在某地方卡,重试已经一天了,才下了10K的文件,怎么办?谢谢
你有没有试一下 文章里讲的换成国内的下载源 我换了国内的下载源之后 就很快了。
但是 我卡在eclipse上面了。。。
为什么我自动配置以后不是“Minecraft”而是“MDKExample”?
ForgeMDK版本:1.8.9-11.15.1.1875
Eclipse版本:Mars.2 Release (4.5.2)
一直是MDKExample啊 你可以改的
从1.8.X的某个版本开始项目的默认名字就是MDKExample而不是Minecraft了,不过这个没什么太大影响 (。・・)ノ
哦,那好吧
Minecarft :1.7.2
FAILURE: Build failed with an exception
Execution failed for task ":getAssetsIndex".
> java.io.FileNotFoundException: C:\Users\Administrator\.gradle\caches\minecraft\assets\indexes\legacy.json(系统找不到指定的文件)
怎么解决
你的安装程序的组件可能损坏,重新下载安装程序再试一下。
向楼主致敬!对了,我运行gradlew是,进度56%,反编译mc (task:decompilemc) 时出问题了,显示反编译mc任务失败 ,提示:【 > Java heap space】,网上说似乎是内存溢出什么的,烦请lz指点!
新版ForgeGradle加大了内存需求,现在理论上是1.2G,但实际上有人表示加到1.5G还会挂掉...官方表示他们测试时使用的是6G...你可以编辑gradlew.bat,在"set DEFAULT_JVM_OPTS="后面加一个"-Xmx2G",就可以把最大内存加到2G,如果不够的话还可以再加.
额,我加到2G了,但是运行后弹出提示【输入命令后直接弹出】:
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
加到4G及以上又弹出另一个,懒得写了,大概意思是超过最大限制啦什么的,应该不影响吧
不过,事实上我的编程知识还不足以解决这些。。求lz帮忙!
没错,CZ的问题我也有,求解决!
配置MDK 时最后出现 BUILD FAILED 错误怎么办啊
是Eclipse好用还是IDEA好用呢?
我觉得eclipse好用。
为什么我卡在了> Configuring > 0/1 projects > root project TAT
而且总是这里
向楼主致敬!我运行gradlew是,进度56%,反编译mc (task:decompilemc) 时出问题了,显示反编译mc任务失败 ,提示:【 > Java heap space】,网上说似乎是内存溢出什么的,烦请lz指点!
好吧,发错了【NEVERMIND】
前面我都没问题,直到Eclipse设置工作空间,进入界面后就MDKExample包报错(就是这个东西旁边有个大的红色感叹号,下方problem栏显示两项错误,看不懂)按照后面的都设置好了之后,再按照第二课的方法建包、class之类的,加代码就和教程里不一样了,不知道是不是就是这两个错误出了问题
Description Resource Path Location Type
Project 'MDKExample' is missing required library: 'F:\forge172\unresolved dependency - net.minecraftforge forgeBin 1.8.9-11.15.1.1722' MDKExample Build path Build Path Problem
Description Resource Path Location Type
The project cannot be built until build path errors are resolved MDKExample Unknown Java Problem