您尚未登录,请登录后浏览更多内容! 登录 | 加入最MC

QQ登录

只需一步,快速开始

 找回密码
 加入最MC

QQ登录

只需一步,快速开始

查看: 21513|回复: 7
打印 上一主题 下一主题

[其他] [码农世界专题]利用Forge API开发MOD第一期

[复制链接]
  • TA的每日心情
    开心
    2016-7-1 20:14
  • 签到天数: 282 天

    [LV.8]以坛为家I

    跳转到指定楼层
    楼主
    发表于 2014-7-25 16:01:39 | 只看该作者 |0人打赏回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 笔记本 于 2014-9-27 16:13 编辑

    原帖:http://www.hakugyokurou.net/wordpress/?p=134
    现在我们切入正题,来讲第一章: MCP,Forge和Eclipse的配置
    首先需要强调,这个教程不是给没有任何编程基础的人准备的…你至少要懂得最基础的编程知识和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的开发.如果有人将上面的前言看完的话.谢谢啦。

    开发环境准备
    首先你要准备JDK(Java开发工具包)和Eclipse(最流行的Java代码编辑器)
    最新版本的JDK应该是JDK8,但到目前为止它尚未发布稳定版,因此建议大家使用JDK7(Java7)或JKD6(Java6)开发.JDK可以在官网下载,网址是:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

    根据自己的操作系统来选择相应的版本,64位的Windows使用Windows x64版,32位Windows使用Windows x86版.
    顺便一提,MC(至少是MCP)约定统一使用JDK6来编译代码,不过JDK7也依然可以以低版本模式来编译代码,因此在选择JDK版本时大可不必纠结是使用6还是7.

    Eclipse可以在这里下载,网址是:http://www.eclipse.org/downloads/
    最新版Eclipse是4.3版(代号Kepler),同时Eclipse还分很多个定制版本,每个定制版本都预装了不同的插件,我因为个人需要所以使用的是”Eclipse for RCP and RAP Developers”,你可以考虑”Eclipse IDE for Java Developers”.同样每个版本又细分为64位版和32位版,根据你的操作系统来选择下载.这里下载来的是英文版,中文汉化包自行搜索吧…

    首先安装JDK,通常来说如果安装顺利的话程序会自动配置环境变量,否则你需要按照这个的步骤来自行配置环境变量
    http://zhidao.baidu.com/question/351018707.html
    http://www.cnblogs.com/kevinlocn/archive/2009/10/12/1581855.html

    之后安装Eclipse,Eclipse无需注册表或任何安装程序,直接将其解压到一个目录下就能运行了,首次运行时它会要你选择一个工作空间(Workspace)用以存放项目文件,不用在乎它.

    然后便是MCP和FML的安装了.首先要说明什么是MCP,以及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)结合了Forge和ModLoader的功能,更重要的是它兼容ModLoader的功能.尽管ForgeModLoader和Forge从来都是捆绑发布和运行的,但从代码的角度来看,两者其实是独立的,这一点你可以从FML和Forge的包结构中看出来.FML跟ModLoader相比有很多优点,首先它是开源的,这意味着任何人都可以对FML做出补充,这也是为什么FML的功能越来越丰富,而ModLoader则始终是只有那几样而已.FML的开发维护者也很多,除去两三位主力外,还有上百位开发者在或多或少贡献代码.更重要的是,如今FML已经掌起了MCMod界的大旗,毫不夸张的说,MC的最高版本不是由Mojang决定而是由FML决定…(就拿1.7来说,如果FML不更新的话,你会玩1.7吗?)如今MCP基本已经弃坑了,其发起人Searge已被Mojang招安…FML已经接替了MCP的任务,并且从1.7开始,FML使用了一种新的代码构建方式:ForgeGradle.

    ForgeGradle其实就是一个经过改良的Gradle,Gradle是一个构建工具,它比Ant(一个很基本的Java构建工具)要高级,但比Maven(一个很高大上的Java构建工具)要简化一些,这一低不成高不就的地位导致它很冷门 – 在此之前我从未听说过Gradle…但它使用起来确实挺不错,首先它比Ant的构建功能要强,正好适合MCMod复杂的发布方式,其次它支持类似Maven的中央库功能,Gradle在互联网上有一个巨大的代码库,项目能直接从代码库中下载需要的库,而无需开发者自己手动寻找合适的库.最后,Gradle比Maven要简单一些,开发者不必花费大量的时间来学习.

    我们为什么需要ModLoader和FML?最原始的Mod是直接修改游戏文件,这意味着如果两个Mod修改了同一个文件的话,就会发生可怕的冲♂突.ModLoader的出现一定程度上解决了这个问题,它封装了最基本的一些操作,这让大部分Mod无需修改MC原本的类就能实现各种功能.MCPModSystem(请为它点一支蜡烛,虽然没有人记得它,但它确实曾在这个世界上存在过),Spout和ForgeModLoader则将这一特性发扬光大.

    下文将介绍如何使用Gradle来配置开发环境,出于各种原因,很多开发者仍停留在1.6甚至更早的环境,因此以下保留了1.7之前的传统配制方法.

    备档:MC1.7以前的开发环境配置方法:

    MCP与Forge的准备
    过去,无论是ModLoader还是Forge,都需要开发者自行配置MCP,现在Forge支持一键配置,无需自己下载MCP和准备纯净版MC,只需简单运行一个文件就能完成全部配置步骤.

    关于Forge版本的问题:
    Forge更新比大姨妈来的还频繁,开发者最好使用Recommended的版本.这是目前最稳定的.

    首先我们要下载Forge的源代码,Forge的下载地址在这里

    开发环境的配置

    首先我们要下载Forge的源代码,Forge的下载地址在这里

    http://files.minecraftforge.net/

    过去我建议下载Recommended版(即稳定版,非稳定版有小概率遇到猎奇事件,例如某个非稳定版的Forge无法创建世界).但自从1.6开始,FML组似乎被Mojang弄烦了,如果你死等Recommended版的话可能得等很久,比如现在(14年1月10日)仍没有1.7的Recommended版,此时我们只能凑活使用1.7.2的Latest版了.无论你下载的是哪个版本的Forge,记得在这里我们要下载Src(源代码)

    另外你有可能会被Forge的文件服务器墙了(Forge的网站对大陆IP很不友好← ←我注册官方论坛后什么都没做就被封掉了),这时就得自备翻墙工具了…

    将Forge的压缩包解压到一个文件夹.然后打开命令窗口并切换到那个文件夹.

    在控制台内输入:

    [backcolor=white !important]
    gradlew.bat setupDecompWorkspace
    [/table]

    然后回车执行…之后ForgeGradle就会自动下载和配置操作环境了,很方便吧…

    如果你真以为方便那你就输了,你可能会在下载过程中遇到各种谜の卡死或下载不能,这和天朝的GFW有关,总之你可以挂一个VPN/代理来下载.如果有VPN的话,就再好不过了,如果用代理的话,请确保你的代理支持HTTP/HTTPS,在命令窗口内执行:


    gradlew.bat -Dhttp.proxyHost=[你的代理的地址] -Dhttp.proxyPort=[你的代理的HTTP代理端口] -Dhttps.proxyHost=[你的代理的地址] -Dhttps.proxyPort=[你的代理的HTTPS代理端口] setupDecompWorkspace

    如果你的代理需要账户和密码的话,你可能还需要加入http.proxyUser,http.proxyPassword,https.proxyUser和https.proxyPassword来设置账户名和密码…对于对HTTPS支持不好的代理,如GoAgent来说…可以采用代理/非代理交替执行的方式来下载,遇到非代理下不动的地方就用代理下,遇到代理下不动的地方就用非代理来下…

    整个安装过程需要一段时间,我建议你此时先往下看,因为下文中有些步骤是可以现在就进行的.

    当你安装结束后(我忘了截图了…总之如果你稍微懂一点英语的话,就能看出控制台明显地提示已经安装成功,而不是安装未完或失败.)就可以着手开始配置Eclipse了.

    Eclipse配置

    现在我们要开始配置Eclipse(如果你是用记事本编java的话请容我一拜)(yyf:我用VIM)
    进入Eclipse,工作空间随便选一个,建议默认.之后我们要来准备Minecraft代码项目.

    首先我们需要安装Gradle插件,打开Help – Eclipse Marketplace,搜索Gradle,然后选择Gradle Integration for Eclipse插件,这个插件为Eclipse提供了一些兼容Gradle项目的设定.点击它的Install.

    然后选择要安装的部分,这里我们只需要安装前两个就好了.

    然后便是漫长的安装了…安装完毕后会要求你重启Eclipse,让它重启就好了.

    当你安装完Gradle插件后,便是配置项目.

    自动配置

    Gradle支持自动生成Eclipse工作环境,没错是工作环境(Workspace)而不光是项目(Project).

    但愿你现在还没有关掉命令窗口(如果已经关掉了的话…就再打开吧),在命令窗口中执行:


    gradlew.bat eclipse

    然后等待其操作完成,之后在你的Eclipse中打开左上角菜单File,选择Switch Workspace.

    然后将工作目录切换到你的Forge目录下的eclipse目录中.

    于是便完了…没错,自动配置就是这么屌炸,连配置启动方案都省去了= =

    手动配置

    有时因为各种各样的原因,我们不想切换工作目录,这时就只能将项目导入然后手动配置项目了.

    首先打开File – Import,然后选择Gradle – Gradle Project

    然后选择你的Forge目录

    之后点Build Model,让它生成一个Eclipse项目,生成完毕后,就可以将生成的项目导入了.

    之后你还需要自己配置启动方案.右键你的项目,选择Properties.

    然后选择Run/Debug Setting,点击New添加一个启动方案.

    首先我们要创建一个客户端启动方案.名字就叫做Client吧.将主类(Main Class)选为net.minecraft.launchwrapper.Launch.

    然后打开Arguments页,在Program Arguments中加入:

    [backcolor=white !important]
    ---version 1.7 --tweakClass cpw.mods.fml.common.launcher.FMLTweaker --accessToken FML


    version一项在字面上看是决定版本,但实际上我感觉填什么都可以…tweakClass决定Minecraft启动器(LaunchWrapper)使用的入口类,accessToken…我也不知道啥= =欢迎跟帖补充
    用此配置启动的话,你的用户名是Player[随机分配的3位数字],如果你希望指定用户名的话,可以加上–username [用户名]来指定一个用户名,如果你是想体验正版功能的话,还可以加上–session [你的session号],怎么获取session号可以看这里.

    然后在VM arguments里加入:

    [backcolor=white !important]-Dfml.ignoreInvalidMinecraftCertificates=true

    如果你有爱的话还可以加入各种虚拟机优化参数

    最后,将Working directory选为Other,内容填上:


    ${workspace_loc }

    最后,打开Common页,将Save as项设为Shared file,然后将地址填为:


    \Minecraft\eclipse\.metadata\.plugins\org.eclipse.debug.core\.launches

    [另外,如果你的Encoding不是UTF-8的话,就把它设为UTF-8.
    [/td][/tr]
    [/table]

    对于Display in favorites menu…这个是是否显示在启动菜单里,无所谓啦.

    于是你便配置完客户端的启动方案了.如果你需要的话还可以配置服务器的启动方案,服务器的启动方案设置和客户端的相似,不同之处在于:

    MainClass为:

    cpw.mods.fml.relauncher.ServerLaunchWrapper



    Program Arguments和VM arguments什么也不用填.

    最后一点收尾工作

    无论你是手动配置,还是自动配置,都还剩下最后一步需要进行 – 更改文件编码和JDK版本

    依然是在Properties页中,将Resource项中的Text file encoding设为UTF-8.否则你的Mod中的中文显示出来的都是乱码的.(如果默认是UTF-8的话那再好不过)

    然后检查Java Compiler项,将Compiler compliance level设为1.6 (我们之前已经说过MC约定统一使用JDK6)

    最后还有可有可无的一步,设置开发环境中的Java库版本,即使你的代码符合Java6规范,但如果使用了Java7的东西的话可能会在安装JRE6的机器上发生糟糕的事情…为了避免这一步,我们干脆将Java库版本设为Java6.
    打开Java Build Path项,选择Libraries,选中JRE System Library,将其改为JavaSE-1.6

    至此,开发环境配置便完成了(\散花/) 快点击Eclipse上方的Run按键运行一下看看是不是Minecraft.



    评分

    参与人数 1人气 +10 MC币 +40 贡献 +1 收起 理由
    沉默 + 10 + 40 + 1 最MC有你更精彩!

    查看全部评分

    打赏

    0

    收藏

    0

    支持

    1

    反对

    0

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
  • TA的每日心情
    开心
    2014-7-26 09:43
  • 签到天数: 2 天

    [LV.1]初来乍到

    沙发
    发表于 2014-7-26 09:53:54 | 只看该作者
    沙发我的。。其实LZ没必要教装eclispe这个的。如果这都不会说明JAVA编程不会。。那也自然没意义看下去了

    点评

    这就不对了 我就不信你刚刚接触的时候就会搭这个环境  详情 回复 发表于 2015-9-23 18:21
    开始的时候我有说吗这个适合有JAVA基础编程的,MCBBS有这样子的JAVA基础教学。1.7.2的MCPforge配置与其他版本不同,比较麻烦,所以要说一下  详情 回复 发表于 2014-7-26 10:02
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
  • TA的每日心情
    开心
    2016-7-1 20:14
  • 签到天数: 282 天

    [LV.8]以坛为家I

    板凳
     楼主| 发表于 2014-7-26 10:02:48 | 只看该作者
    noname 发表于 2014-7-26 09:53
    沙发我的。。其实LZ没必要教装eclispe这个的。如果这都不会说明JAVA编程不会。。那也自然没意义看下去了 ...

    开始的时候我有说吗这个适合有JAVA基础编程的,MCBBS有这样子的JAVA基础教学。1.7.2的MCPforge配置与其他版本不同,比较麻烦,所以要说一下
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
  • TA的每日心情
    开心
    2015-7-26 19:20
  • 签到天数: 35 天

    [LV.5]常住居民I

    地板
    发表于 2014-8-24 17:53:36 | 只看该作者
    楼主如果是转载教程请最好标明转载和原作者名称哦
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
  • TA的每日心情
    郁闷
    2016-6-29 11:34
  • 签到天数: 93 天

    [LV.6]常住居民II

    5#
    发表于 2015-7-12 15:00:41 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
  • TA的每日心情
    擦汗
    2017-3-22 23:57
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    6#
    发表于 2015-9-23 18:21:23 | 只看该作者
    noname 发表于 2014-7-26 09:53
    沙发我的。。其实LZ没必要教装eclispe这个的。如果这都不会说明JAVA编程不会。。那也自然没意义看下去了 ...

    这就不对了  我就不信你刚刚接触的时候就会搭这个环境  
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

    该用户从未签到

    7#
    发表于 2016-2-6 19:10:13 | 只看该作者

    谁能帮个忙?这是什么情况?

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?加入最MC

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

    该用户从未签到

    8#
    发表于 2017-9-20 09:15:32 | 只看该作者
    由于本人拥有高端技术,秒杀VPN(技术名叫坐飞机)
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    您需要登录后才可以回帖 登录 | 加入最MC

    本版积分规则