模组作为第二作者
当 Minecraft 逐渐成为正式产品,另一套创作体系也在客户端、服务器和资源包之间生长。模组没有简单地“补完原版”,却持续扩大了玩家对 Minecraft 能做什么的想象。
对很多老玩家来说,“Minecraft”从来不只是一份原版客户端。
有人第一次见到自动化矿场,是在 BuildCraft 或 IndustrialCraft 里;有人熟悉的多人世界从出生点开始就有领地、经济和小游戏;也有人换上一套材质和声音以后,几乎把同一张地图变成了另一种气氛。
这些内容并不都来自 Mojang,却长期和 Minecraft 本身一起被安装、讨论、录成视频、做成教程。等到正式版发布时,玩家已经不只是消费官方更新,也开始用另一套工具继续改这款游戏。
这里把他们称作“第二作者”,不是为了争论谁拥有 Minecraft,而是为了描述一个事实:社区创作者开始参与决定玩家眼中的 Minecraft 可以是什么。
1从修改 jar 开始
早期 Java 版并没有为模组准备一套正式、稳定的接口。客户端代码经过混淆,类名和成员名难以直接阅读,想修改游戏往往先要理解一份不断变化的程序。
Minecraft Coder Pack(MCP)让这件事容易了很多。它帮助开发者反编译、反混淆并重新编译 Minecraft,使原本难以阅读的代码变成可以工作的开发环境。1 但制作和安装模组仍然很像给游戏本体做手术:修改 class 文件,再把它们塞回 minecraft.jar。两个模组碰巧改到同一处,就可能互相覆盖。
Risugami 的 ModLoader 开始把一些常见修改整理成共享的加载方式,减少模组之间直接冲突。随后出现的 Minecraft Forge 又把这种思路向前推了一步。Forge 最初由 Eloraam、FlowerChild、SpaceToad 等模组作者围绕兼容问题建立,2011 年已经开始开发;它提供更多共享 hook,让大型模组不必各自反复修改同一份基础代码。23
这些工具本身并没有给 Minecraft 增加一台机器或一个新世界,却非常重要,因为它们改变的是谁有能力稳定地继续写游戏。
当安装多个模组从手工合并代码逐渐变成加载器处理,创作门槛和使用门槛都会下降。后来整合包进一步把一组模组、配置和版本固定成一个可以整体分发的组合。于是玩家接触到的不再只是“一个模组”,而可能是一整套重新组织过的 Minecraft。
2不只一种方式在改 Minecraft
“Mod”很容易被说成一个整体,但早期 Minecraft 至少长出了三种差异很大的扩展方式。
| 方式 | 主要改变什么 | 玩家通常需要什么 |
|---|---|---|
| 客户端 / 双端模组 | 方块、物品、机器、维度、规则等游戏系统 | 加载器与对应模组 |
| 服务端插件 | 权限、经济、领地、小游戏、管理规则 | 通常仍可使用原版客户端 |
| 资源包 | 纹理、声音、语言、模型等表现层 | 安装或接受资源包 |
客户端模组最接近“继续写游戏”。它可以加新的机器、新的资源循环、新的维度,甚至让原版熟悉的合成和生存只剩下一层底座。BuildCraft 的管道、引擎与物流就是典型例子;Forge 的出现本身也和这些大型模组如何共存密切相关。4
服务端插件走的是另一条路。hMod 之后,Bukkit 从 2010 年底开始开发,并在 2011 年成为重要的插件平台。5 CraftBukkit 让服主在不要求每个玩家安装客户端模组的情况下,加入权限、领地、经济、反作弊和小游戏。
这意味着服务器可以改变的已经不只是管理命令,而是“这台服务器怎么玩”。下一章会专门讨论服务器怎样进一步变成独立的游戏和社会;在这里先看到一个区别就够了:客户端模组更容易改变世界里可以发生什么,服务端插件则很擅长改变玩家之间允许怎样发生。
第三种是材质包,后来扩展为资源包。Java 1.6.1 把原来的材质包系统升级为资源包,声音、语言等更多资源也进入可替换范围。6 它通常不改变底层玩法,却说明另一件事:即使规则相同,玩家仍然希望重新定义这个世界看起来、听起来是什么。
这三种方式后来经常混在一起。一台服务器可以同时运行插件、要求玩家使用资源包,也可以直接是一台 Forge 模组服。实际玩家记住的“那个 Minecraft”,往往就是这些层叠在一起后的结果。
3模组开始回答原版没有回答的问题
模组最有意思的地方,不是“官方没有做,所以社区补上”。很多模组做的事情,本来就未必适合成为 Minecraft 的默认规则。
工业模组会把物流、能量和自动化变成主要玩法。BuildCraft 和 IndustrialCraft 让管道、机器和能源网络占据大量时间,玩家可能不再亲手搬运每一组矿石,而是设计一条能自己工作的产线。
魔法模组则会给世界再加一套需要学习的规则:研究、法术、仪式、污染、魔力传递。它们往往不是简单换一层奇幻皮肤,而是在原版红石、生存和合成之外重新定义一套因果关系。
RPG 模组和插件又走向另一边。职业、技能、任务、等级会把成长更多放到角色身上,而原版 Minecraft 很长时间更习惯把成长放在工具、装备、建筑和玩家拥有的基础设施里。
这些方向彼此甚至会冲突。一个强调工业自动化的整合包,和一个强调冒险与角色成长的整合包,可以使用相同版本的 Minecraft,却让玩家形成完全不同的日常。
因此,模组生态真正扩大的是 Minecraft 的可能性空间。它证明同一套方块、物品、实体和世界存档,可以承载远比原版默认玩法更多的游戏结构。
这也解释了为什么整合包后来会如此重要。把几十个模组放在一起并不是纯粹做合集;作者要决定哪些系统共存、资源如何平衡、哪些配方应该修改、玩家先接触什么。组合本身开始带有设计意味。
4有些社区创作会进入原版
Mojang 并没有把社区创作和原版之间划出一条永远不能跨越的线。
最著名的例子之一是活塞。活塞最初由 Hippoplatimus 以模组形式发布在 Minecraft Forums,后来由 Jeb 整合进游戏,并在 Beta 1.7 正式加入;Hippoplatimus 也出现在 Additional Programming 名单中。78
这个例子有意思,不是因为它证明“好模组迟早会被官方收编”。绝大多数模组当然没有进入原版。它更说明 Mojang 会观察社区正在发明什么,并且官方与民间之间的边界并不是完全封闭的。
另一种变化不是把某个模组搬进来,而是给玩家更多官方支持的创作入口。命令方块让命令可以被写进地图和机关;后来数据包又让配方、战利品、函数、进度等内容可以通过数据文件分发。910 它们并没有取代 Forge,也不是完整的官方 Mod API,却让“不修改客户端代码也能重新组织玩法”的空间越来越大。
2012 年 Mojang 甚至直接聘请了 Bukkit 的几位核心开发者。Jeb 当时公开写道,计划先构建新的服务端 API,再扩展到客户端模组支持。11 这说明 Mojang 已经非常清楚社区扩展不是边缘现象。
只是那套被玩家期待的统一官方 Mod API,后来并没有按当时想象的形态出现。Java 版的模组生态继续主要依赖 MCP、Forge,以及后来新的社区加载器。官方创作工具和社区模组因此长期并存,而不是谁完全替代谁。
5每次更新,都有人要把世界重新接起来
社区扩展的自由有一个很实际的代价:Minecraft 自己一直在变。
官方更新可以修改类、数据格式、注册方式、网络行为和世界生成。对普通玩家来说,这是一次新版本;对模组作者来说,它可能意味着大量代码需要重新适配。依赖几十个模组的整合包和服务器因此经常停留在某个旧版本很久,不是因为玩家不知道新版存在,而是整个依赖链还没有一起搬过去。
这种版本错位后来成了 Modded Minecraft 很典型的历史体验。某个版本之所以被大量模组长期使用,不一定因为它是“最好的 Minecraft”,也可能只是因为那一代工具、模组和整合包恰好形成了稳定组合。
维护这些组合的劳动很少直接出现在 Mojang 的产品列表里。模组作者、加载器维护者、整合包作者、Wiki 编辑者和服务器开发者,大量依靠兴趣、捐助、广告分成或平台分成持续工作。具体的收入和灰色经济留到后面的商业章节;这里更重要的是看到:Minecraft 的扩展能力长期依赖一批不属于 Mojang 员工体系的人。
这种依赖也会暴露脆弱的一面。
Bukkit 是最典型的例子。2012 年 Mojang 聘请核心开发者后,项目仍由社区继续维护。到 2014 年,随着维护者退出、代码归属和 GPL 许可争议升级,Wesley Wolfe 对 CraftBukkit 发出 DMCA 通知,CraftBukkit 的公开分发因此中断。1213
对玩家来说,这不是抽象的开源法律问题。大量服务器依赖的基础设施突然失去了原来那种可直接下载和更新的方式,社区不得不寻找新的继承路径。后来 Spigot 等项目继续发展,但这次冲突清楚暴露出:一个被大量玩家依赖的平台,如果建立在专有游戏、社区代码和志愿维护者之间,技术兼容之外还有许可证、所有权和治理问题。
6“第二作者”意味着什么
说模组作者是 Minecraft 的“第二作者”,并不是说 Mojang 只做了一个空壳,也不是说每个 Minecraft 玩家都必须安装模组。
原版本身完全可以独立游玩,而且绝大多数社区创作都建立在 Mojang 已经做出的世界、规则和技术之上。两者不是互相取代的关系。
“第二作者”更适合描述另一件事:当一款游戏允许社区持续改变系统、服务器规则和表现层时,它在社会中的实际形态就不再只由官方版本决定。
IndustrialCraft 让一代玩家相信 Minecraft 可以是一款自动化游戏;Bukkit 让服务器管理员能够把一个生存世界改造成有权限、经济和小游戏的公共空间;资源包、地图和后来的数据包则不断降低另一部分创作的门槛。
这些东西未必应该全部进入原版。它们的意义恰恰在于不必进入原版,也可以成为 Minecraft 历史的一部分。
下一章会把镜头留在第二条路径上:当服务器不仅增加几个插件,而是开始拥有自己的规则、经济、社区和玩法时,它还只是“运行 Minecraft 的服务器”吗?
7这一章留下什么
- 爱好者:很多人记忆里的 Minecraft,本来就是原版、模组、插件、资源包和整合包共同组成的。它们不需要都被 Mojang 正式收编,才算这款游戏历史的一部分。
- 开发者:可扩展性真正改变产品的地方,不只是“玩家可以装内容”,而是外部作者能够长期建立新的系统和玩法。代价也同样真实:兼容、版本迁移、治理和维护责任不会因为创作发生在社区就自动消失。
注释
-
Minecraft Coder Pack(后称 Mod Coder Pack)由社区对官方客户端做反混淆与再编译,是早期客户端模组的重要开发工具。Searge 等人后来进入 Mojang。概述见 Minecraft modding 与 Packt《A Brief History of Minecraft Modding》:https://www.packtpub.com/en-us/learning/tech-guides/brief-history-minecraft-modding。 ↩
-
Risugami 的 ModLoader 为早期模组提供常见加载与 hook,减少多个模组直接修改同一基础代码时的冲突。参见 Packt,《A Brief History of Minecraft Modding》:https://www.packtpub.com/en-us/learning/tech-guides/brief-history-minecraft-modding。 ↩
-
asie,《BuildCraft History and Design》(2015 年)记载 Forge 由 Eloraam、FlowerChild、SpaceToad 等人在 ModLoader 之上发起,用于改善大型模组之间的兼容;SpaceToad 于 2011 年 7 月 12 日提交早期 commit,LexManos 同年 10 月加入。见 https://blog.asie.pl/2015/01/buildcraft-history-and-design/。 ↩
-
BuildCraft 早期版本围绕管道、引擎、液体和自动化快速扩展,并从 2.0 起依赖 Minecraft Forge。时间线与设计回顾见 asie,《BuildCraft History and Design》:https://blog.asie.pl/2015/01/buildcraft-history-and-design/。 ↩
-
Bukkit 在 hMod 开发停滞后于 2010 年 12 月开始开发,2011 年发布;项目由 Bukkit API 与运行它的 CraftBukkit 服务端实现等部分构成。概述见 Minecraft modding 与 Bukkit。 ↩
-
Java Edition 1.6.1(2013)以资源包替代材质包,使纹理之外的声音、语言等资源也可以被替换。见 Resource pack。 ↩
-
Mojang / Minecraft 官方《Block of the Week: Piston》明确记载,活塞最初来自 Hippoplatimus 发布在 Minecraft Forums 的模组,之后由 Jeb 整合进游戏,作者列入 Additional Programming。见 https://www.minecraft.net/en-us/article/block-week-piston。 ↩
-
命令方块于 2012 年快照阶段加入,并随 Java Edition 1.4.2 正式发布。见 Command Block。 ↩
-
数据包于 Java Edition 1.13 开发周期加入。Dinnerbone 的 1.13 变更说明将 data pack 定义为可加载的 zip / 目录,并提供
/datapack管理。见 https://gist.github.com/Dinnerbone/943fbcd763c19be188ed6b72a12d7e65 与 Data pack。 ↩ -
Jens Bergensten,《Minecraft Team Strengthened!》,Mojang,2012 年 2 月 28 日。文中宣布 Bukkit 核心开发者加入,并计划先开发新的服务端 API,再扩展到客户端模组支持。归档:https://web.archive.org/web/20130927162025/https://mojang.com/2012/02/minecraft-team-strengthened/。 ↩
-
2014 年 Bukkit 维护危机期间,Dinnerbone 公开表示 Mojang 拥有 Bukkit,同时强调 Bukkit 并不是、也不会成为官方 API。相关转述与历史语境见 Justin Wheeler,《The day open source died》:https://jwheel.org/blog/2020/04/open-source-minecraft-bukkit-gpl/。 ↩
-
2014 年,Wesley “Wolvereness” Wolfe 对 CraftBukkit 及其衍生发出 DMCA 通知,争议涉及 GPL 代码与 Mojang 专有服务端代码的组合与分发。报道存档:https://web.archive.org/web/20160310131235/http://gamepolitics.com/2014/09/05/mod-turns-latest-ongoing-minecraft-bukkit-saga/。 ↩