首先需要强调,这个教程不是给没有任何编程基础的人准备的...你至少要懂得最基础的编程知识和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里重新导入项目.
求教大神,我卡在这里就不动了,而且我也用了大神的FGOW加速了的,可貌似没卵用啊...
> Building 62% > :fixMcSources
执行完第一条指令以后底下有这个
Download http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.11.1/scala-compiler-2.11.1.jar
:makeStart FAILED
:makeStart (Thread[main,5,main]) completed. Took 8 mins 20.9 secs.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':makeStart'.
> Could not resolve all dependencies for configuration ':minecraftDeps'.
> Could not download artifact 'org.scala-lang:scala-compiler:2.11.1:scala-compiler.jar'
> Failed to download resource 'http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.11.1/scala-compiler-2.11.1.jar'.
> Connection reset
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
这样算行了嘛..
我也这样
我也是这样啊
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring root project 'forge-1.9-12.16.1.1887-mdk'.
> Could not resolve all dependencies for configuration ':classpath'.
> Could not download ForgeGradle.jar (net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT)
> Could not close resource 'http://files.minecraftforge.net/maven/net/minecraftforge/gradle/ForgeGradle/2.1-SNAPSHOT/ForgeGradle-2.1-20160401.201315-35.jar'.
> Premature end of Content-Length delimited message body (expected: 13739859; received: 153614
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 25 mins 18.258 secs
额,网址一直加载不了的样子,能不能帮忙发一份最新的MDK~
这样是构建失败,我也是失败了
大神~
:decompileMc FAILED
:decompileMc (Thread[main,5,main]) completed. Took 2 mins 59.397 secs.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':decompileMc'.
> GC overhead limit exceeded
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
Build failed with an exception
有一行显示这个是什么意思
为什么我一直..................很久了。。怎么解决?
一堆点是在下载Gradle,如果嫌下的太慢的话可以改gradle/wrapper目录下的gradle-wrapper.properties文件,把"distributionUrl=https\://services.gradle.org/distributions/gradle-x.xx-bin.zip"改成"distributionUrl=http://forgemavenmirror.sinaapp.com/gradle/gradle-x.xx-bin.zip" 其中x.xx为gradle版本,可能是2.0、2.5、2.7或2.14中的某一个,如果都不是的话再留言...
现在......没有了,总构建失败?怎么解决?
* What went wrong:
Execution failed for task ':deobfMcSRG'.
> Your Access Transformers be broke!
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.
BUILD FAILED
这个有可能是下载到的Minecraft客户端或服务器端文件有问题,最常见的情况是下载到的损坏了,如果你是用FGOW同时使用的BMCLAPI的下载源的话,可能是BMCLAPI的问题...某些情况下BMCLAPI的缓存会出错导致将服务器端下载成客户端...或客户端下载成服务器端,总而言之就是文件挂了,修复办法是删掉"C:\Users\[用户名]\.gradle\caches\minecraft\net\minecraft\minecraft\[MC版本]"、"C:\Users\[用户名]\.gradle\caches\minecraft\net\minecraft\minecraft_merged\[MC版本]"和"C:\Users\[用户名]\.gradle\caches\minecraft\net\minecraft\minecraft_server\[MC版本]"这三个文件夹(以及它们中的文件),然后重新下载客户端和服务器端文件,如果你在用BMCLAPI源的话就在build.gradle中删掉mcClientUrl="..."和mcServerUrl="..."这两行,使用Mojang的官方源下载.
求解orz
:fixMcSources FAILED
:fixMcSources (Thread[Daemon worker,5,main]) completed. Took 31.93 secs.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':fixMcSources'.
> com.cloudbees.diff.PatchException: Cannot find hunk target
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
Total time: 3 mins 12.889 secs
Stopped 0 compiler daemon(s).
Received result Failure[value=org.gradle.initialization.ReportedException: org.gradle.internal.exceptions.LocationAwareException: Execution failed for task ':fixMcSources'.] from daemon DaemonInfo{pid=54132, address=[24f94c94-0ace-45de-a90d-973f4398e479 port:2684, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]], idle=false, lastBusy=1481010759904, context=DefaultDaemonContext[uid=e19ea8fe-dfcc-4397-b02a-d08176cc5611,javaHome=C:\Program Files\Java\jdk1.8.0_92,daemonRegistryDir=C:\Users\Nake\.gradle\daemon,pid=54132,idleTimeout=120000,daemonOpts=-Xmx3G,-Dfile.encoding=GBK,-Duser.country=CN,-Duser.language=zh,-Duser.variant]} (build should be done).
我查了一下github上ForgeGradle的issues,有几条提到了这个问题(比如这个),最后的解决方案基本都是先来一发"gradlew clean"然后"gradlew setupDecompWorkspace --refresh-dependencies",强制清空缓存重新下载依赖库. 此外还有人提到build.gradle中设定的ForgeGradle版本也可能导致这个问题,如果你是配置MC1.9.4的话可以尝试使用2.2的快照版(classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT')
非常感谢~
我是配置1.11的
我先按照你的方法重新试试。
* What went wrong:
Execution failed for task ':decompileMc'.
> Java heap space
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
博主,为什么我把内存手动设置成1000m,还是这样?(用的是GUI界面)
Exception in thread "main" java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.(ZipFile.java:219)
at java.util.zip.ZipFile.(ZipFile.java:149)
at java.util.zip.ZipFile.(ZipFile.java:163)
at org.gradle.wrapper.Install.unzip(Install.java:157)
at org.gradle.wrapper.Install.access$400(Install.java:26)
at org.gradle.wrapper.Install$1.call(Install.java:67)
at org.gradle.wrapper.Install$1.call(Install.java:44)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAcc
essManager.java:65)
at org.gradle.wrapper.Install.createDist(Install.java:44)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:126)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:56)
如果这样了该怎么办
然后出现了这样的问题
FAILURE: Build failed with an exception.
* What went wrong:
Could not create service of type DefaultClassLoaderRegistry using GlobalScopeSer
vices.createClassLoaderRegistry().
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.