MCP 简介

警告

这些文档是为 SpongeAPI 7 编写的,可能已经过时。 如果你觉得你可以帮助更新它们,请提交一个 PR!

Mod Coder Pack(缩写 MCP)最初是一套用于 Minecraft Mod 开发的工具包,包括了种种救开发者于水深火热之中的脚本、工具及映射表。之所以说“救开发者于水深火热之中”,归根结底还是因为 Minecraft 不是开源软件,而且绝大部分程序带有混淆;在 MCP 出现之前,开发者若要制作基于 Minecraft 的 Mod 就必须在反编译 Minecraft 后硬啃天书一样的反编译结果;而 MCP 出现后,开发者便可以在反编译反混淆(人类能看懂)的环境里轻松开发 Minecraft 的 Mod 了。

工作流程

其实,在插件开发中使用 MCP 并不难:

  • 配置 MCP 工作环境
    • 下载原版 Minecraft 客户端及服务器的必须文件

    • 反混淆(换言之,将“天书”翻译成可辨识的文字)

    • 反编译(暴力拆解编译好的类并生成对应的源码)

  • 然后,基于反混淆后的 Minecraft 源码编写插件

  • 编译时,重新混淆对 Minecraft 本身代码的引用,使之可以在生产环境(也就是你的 Minecraft 服务器上)运行

映射表

MCP 使用了两份映射表(译注:指SeargeMCPNotch 三种名称之间存在的两份映射表;三种名称的区别见下),每份映射表的功能不尽相同。具体来说,NotchSeargeMCP 的差别大概就是:

// 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 是个运行在 Sponge 和 MCP 的 IRC 频道和 MCP 的 Discord 服务器的 #bot-spam 频道里的机器人。(译注:这两个 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 的帮助页面。