MCP 简介
Mod Coder Pack(缩写 MCP)最初是一套用于 Minecraft Mod 开发的工具包,包括了种种救开发者于水深火热之中的脚本、工具及映射表。之所以说“救开发者于水深火热之中”,归根结底还是因为 Minecraft 不是开源软件,而且绝大部分程序带有混淆;在 MCP 出现之前,开发者若要制作基于 Minecraft 的 Mod 就必须在反编译 Minecraft 后硬啃天书一样的反编译结果;而 MCP 出现后,开发者便可以在反编译反混淆(人类能看懂)的环境里轻松开发 Minecraft 的 Mod 了。
工作流程
其实,在插件开发中使用 MCP 并不难:
- 配置 MCP 工作环境
下载原版 Minecraft 客户端及服务器的必须文件
反混淆(换言之,将“天书”翻译成可辨识的文字)
反编译(暴力拆解编译好的类并生成对应的源码)
然后,基于反混淆后的 Minecraft 源码编写插件
编译时,重新混淆对 Minecraft 本身代码的引用,使之可以在生产环境(也就是你的 Minecraft 服务器上)运行
映射表
MCP 使用了两份映射表(译注:指Searge、MCP、Notch 三种名称之间存在的两份映射表;三种名称的区别见下),每份映射表的功能不尽相同。具体来说,Notch 、 Searge 和 MCP 的差别大概就是:
// Notch
boolean a(rw ☃);
// Searge
boolean func_72838_d(Entity p_72838_1_);
// MCP
boolean spawnEntityInWorld(Entity entityIn);
Notch 名,指原版 Minecraft 本身,这个编译好的二进制文件中,使用的各种带混淆的名字。 Minecraft 更新一次,这个名字就会变一次。
Searge 名则略显复杂,它包含两部分:一部分是可以望文生义的类名,另一部分是给混淆后的方法、字段及参数取的特殊名字(依旧是混淆的),两两之间互不相同。它的特点在于,只要对应方法签名不变,不论 Notch 名怎么变,Searge 名都不会发生变化。实际上 SpongeVanilla 和 SpongeForge 都在生产环境中使用 Searge 名。
MCP 名则全部是普通人可辨识的文字了。不要小看这些名字——这些文字背后是无数社区成员奋战无数个日夜后的成果。一般,这就是开发环境所使用的各种类、方法、字段、参数的名称;编译时会自动将这些引用翻译回 Searge 名或 Notch 名。
備註
你在开发环境中看到的自然是清一色的 MCP 名。若要在生产环境(即某个服务器上)中运行插件,你需要将其重新混淆至 Searge 名。
使用 MCPBot
MCPBot 是个 IRC 机器人,目前运行在 Sponge 和 MCP 的 IRC 频道里。(译注:二者的服务器都是esper.net)这个机器人可以帮你快速查找 MCP 映射表的具体映射,同时也提供了贡献新映射名的窗口。只需加入频道(比如 #spongedev
中就可以找到这个机器人),然后发送消息,一切就是那么简单。
小訣竅
使用 MCP 机器人前记得查阅 MCPBot help page ,以确认可用指令。
提交新的映射
对于那些还没MCP名的映射,你可以考虑抢先提交一个。具体操作流程可以在 MCPBot help page 找到。
備註
然而,一旦 MCP 名确定下来了你就没法修改了。如果你的确对某个 MCP 名有意见(或建议),你可以在 GitHub 上寻找 这个机器人的问题追踪器 提出意见。
也參考
- Mod Coder Pack
Mod Coder Pack 的官方网站。
- MCPBot help page
MCPBot 的帮助页面。