前言
Minecraft 的版本迭代逐渐加速,一转眼已经来到 1.21 的时代,而 1.7.10 这个版本在大多数追随高版本社区的玩家眼中已经是古董版本了,然而社区上依然有玩家认为 1.7.10 制作的整合包对配置的需求更低从而更自由。
社区中的一些开发者曾经想过尝试回到 1.7.10 版本进行开发,了解为什么这些玩家会选择留在 1.7.10,但是奈何 1.7.10 的文档可以说是几乎没有,开发教学更是寥寥无几,尤其是中文社区中跟是几乎没有。1.7.10 这个时代的大多开发者可能是一些刚从 C++ 语言跳到 Java 进行尝试,除了 C/C++ 语言的规范与习惯遍布项目之外,代码充数着大量语法糖浆(或几乎全是装箱)。很多开发者都放弃了对 1.7.10 的浅尝,转向拥有更多更好支持的高版本。
既然 1.7.10 怎么“糟糕”,为什么一些开发者还在坚持在 1.7.10 开发?这个问题或许应该作为保留节目,留给读者品味。而这篇教程将是为那些突发奇想,想要在 1.7.10 中燃烧热情的开发者准备的。现在,请准备好与 Forge 1.7.10 共舞。
当然, 这篇教学可能会存在错误, 欢迎指出。
准备工作
不过在开始之前,读者可能需要问自己几个问题来确定你确实想要写一个 1.7.10 Mod,并且还是一个不受到额外支持,且能够获取的帮助极其有限的 1.7.10 开发模组:
- 你真的要写一个 Mod 吗?而不是去为 Bukkit 写一个插件?或是寻找已经存在的模组,亦或是使用 OVO 这样的简单编程模组作为你的支持?
- 你真的要写一个 1.7.10 的模组吗?在这个很难找到更多资源的版本,如果没有一定 Java 基础去阅读先辈的代码,可能会遇到更多挫折… 即便这个教程的目的就是帮助读者独立完成一个模组,但是依然可能会遇到各种奇怪的问题,甚至最终不得不放弃。
- 你想要的就是一个 1.7.10 的模组吗?你有很多选择,你可以去高版本编写数据包,或者用高版本的 Java 感受到更加酣畅的编写体验。
这些问题并不是为了尝试劝退你,如果你没有足够的决心,上面的问题甚至没有一个能够得到明确的答案,或许你应该花一些时间思考你想要的是什么,你知道的,半途而废没有任何好处,如果你没有解决问题的决心,你可能连构建都无法完成。当然,如果上述的问题你都有了明确的答案,那么我们就开始吧!
你不一定要对 Java 有足够的了解——你完全可以一边玩一边学,因为在最开始的时候,一切都很简单!在你准备好制作更复杂的内容的时候,你自然会开始学习新的内容,同时不会感受痛苦… 如果你能跟上节奏的话!这篇教学会尽可能用简单易懂的大白话,并且读者在读完这篇教学之后应该也会对 Java 8 的语法有一定掌握。
但这依然有个大前提——你至少需要知道如何布置 Java 8 的开发环境 Java Developtor Kit 8(JDK 8)。以及你需要有一个上手的 IDE:IDEA,Eclipse,VSCode,NetBeans… 当然,记事本也算,只要你不觉得记事本编程会让你感到痛苦就好。如果你从未尝试过 Java 开发,并且你只是打算写一些玩(或者你有计划学习 Kotlin),那么 IDEA 这样开箱即用的 IDE 非常适合你。而如果你打算正经学 Java, 请试一试 Eclipse 或者 NetBeans。IDEA 确实缩减了大量的工作,让开发得心应手,但是一些 Java 基本功你或许以后再也不会用,但你绝对不可以不会。至少试一试这些一直以来都作为行业顶级的 IDE 拓宽你的适用习惯,而不会被 JetBrains 舒适的工具链惯坏。当你已经得心应手的编写 Java, 你可以自由尝试。
值得一提的是,1.7.10 ForgeGradle 对 Eclipse 的支持非常好。
下载 Forge 提供的 Src 源包,然后把它解压在你喜欢的地方。做到这一步,准备工作你已经完成一半了,但是一个严肃的问题:1.7.10 Forge Gradle 不再维护,Gradle 版本支持相当落后,这意味着我们无法使用先进但依赖更高版本的 Gradle 的工具参与开发,此时我们需要使用第三方开发包。诸如使用我的 1.7.10 Mod 开发框架,或者来自 GTNH 维护的 MDK。
感谢各路大佬提供的镜像源,以及耗子大佬也提供了离线开发包 (MCBBS 已经失效,请通过 Github 途径)
部署工作区
如果你尝试写过高版本的模组,你可能只需要打开 IDE 然后导入就好了。但 1.7.10 的构建步骤可不是刷新一下 Gradle, 而且必须使用一个指令来初始化:
如果你正在使用 Windows PowerShell, MacOS 或 Linux,你的指令是
.\gradlew, 只有在 cmd 环境才能缺省目录符号使用gradlew。
大多情况下,上述步骤只需要执行一次,并不需要每个项目都执行一次。如果你的项目出现任何问题,删除缓存后重新执行初始化能够解决大部分问题。
如果你使用 IDEA,直接右击文件夹然后选择在 IDEA 中打开就好,IDEA会自动开始构建 Gradle。稍后可以执行 genIntellijRuns 来配置自动任务。
如果你使用 Eclipse,执行 gradlew genEclipse 可以生成一个专用的开发工作区文件夹。
如果你使用 VSCode,请确定你已经安装好所需要的一切插件,这里是插件清单:
是的,就两个。你可能注意到了插件包 Package,没问题!这是好的,你当然可以安装它们!
如果你正在使用其他的 IDE,请使用控制台 cd 到你的工作环境后执行 ./gradlew 进行环境 Gradle 构建。
如果你是 Windows 环境,并且发现 Win+R 输入 cmd 后打开的控制台窗口不具备管理员权限,请在 Win 菜单中搜索 cmd,并在结果中以管理员身份启用。
当你完成这一步,那么恭喜你——你已经迈出了 Mod 开发的第一步!实不相瞒,走到这里就已经足够劝退一些开发者…
当然,这里还有一个不错的提议:了解一下 Forge 的历史 对你的开发会有一定的帮助!
最后检查
一切就绪!如果你遇到了一些问题,比如构建失败,你应该先阅读错报检查是网路问题还是缓存问题,当你构建失败后你就再也没有成功过,甚至看不到 xxx downloading… 字样,这可能是由于缓存未刷新,此时请打开你的任务管理员,杀死一切 Jdk、Java 相关的项目后重新构建,如果问题依然存在,请找到 Gradle User Home 目录(例如 Windows 环境下默认路径为 C:/user/.gradle/caches)并删除它。
如果没有任何问题,那么现在请检查 mcmod.info 文件,它在你的工作区的 resources 文件夹下!
在 1.7.10 中没有高版本那么多严格的规矩,通常来讲这个文件是不重要的。但是如果在模组中申请调用 MetaInfo,那么 Forge 将会从 mcmod.info 覆盖读取你的模组讯息。不过对于一些热衷于开包查找作者与版本的玩家或整合报作者们相当重要的,因此依然建议填写完毕。
在 1.7.10 中,ModID 可以随意编写,包含任何字符。
如果你完成了全部内容,使用 .\gradlew runClient 启动一次游戏来验证你的工作区环境已经准备就绪!
build.gradle中可能需要改动的地方
由于1.7.10默认使用 Java 6,在我们使用 Java 8 开发时可能需要在 Gradle 中申明严格等级为 1.8 来阻止构建时警告使用了较新版本的特性。
如果你没有使用预设的 MDK,或者你确实遇到了这样的问题,别担心,一切都很简单,只需打开 build.gradle 后在文件尾部加入以下内容:
另外,这个仓库下 ModDev 分支将会记录这份教学内全部代码。