如何使用 MCP GitHub?全面指南与示例

如何使用 MCP GitHub?全面指南与示例

Minecraft 是一款风靡全球的沙盒游戏,其强大的可定制性深受玩家喜爱。除了游戏本身的内容外,Minecraft 社区还开发了大量的模组(Mods)和数据包(Datapacks),极大地扩展了游戏的可玩性。MCP(Minecraft Command Processor)作为 Minecraft 社区的一个重要项目,旨在提供一个稳定、可靠且易于使用的工具链,用于反编译、修改和重新编译 Minecraft 的 Java 代码。

本文将深入探讨 MCP GitHub 的使用方法,面向不同层次的用户,从基础概念到高级技巧,提供全面的指南和示例。无论你是刚接触 MCP 的新手,还是希望深入了解其内部机制的开发者,都能从本文中获益。

1. MCP 简介与核心概念

在深入了解 MCP GitHub 的使用之前,我们需要先了解一些基本概念:

  • Minecraft Java 版 (Minecraft: Java Edition): 本文讨论的 MCP 主要针对 Minecraft 的 Java 版本,这是最初的、也是可定制性最强的版本。
  • 反编译 (Decompilation): Minecraft 的 Java 代码是以编译后的 .class 文件的形式发布的。反编译是指将这些 .class 文件转换回可读的 Java 源代码(.java 文件)的过程。
  • 混淆 (Obfuscation): 为了保护代码不被轻易理解和修改,Minecraft 的官方代码经过了混淆处理。混淆会将类名、方法名、变量名等替换成无意义的短字符串(如 a, b, c),使得代码难以阅读。
  • 映射 (Mappings): MCP 的核心功能之一是提供映射文件,将混淆后的名称与可读的、有意义的名称对应起来。例如,将混淆后的方法名 a 映射回 tick
  • 补丁 (Patches): 补丁文件记录了对原始 Minecraft 代码所做的修改。MCP 使用补丁来管理代码的变更,使得修改和更新更加方便。
  • 重新编译 (Recompilation): 在修改完代码后,需要将修改后的 Java 代码重新编译成 .class 文件,以便 Minecraft 能够加载和运行。

MCP 的作用:

MCP 提供了一套完整的工具链,简化了 Minecraft 代码的修改流程:

  1. 反编译 Minecraft 代码: 将官方的 .class 文件转换成可读的 Java 代码。
  2. 提供映射文件: 将混淆后的名称还原为可读的名称。
  3. 管理补丁: 记录和应用对代码的修改。
  4. 重新编译代码: 将修改后的代码编译回 .class 文件。
  5. 提供开发环境: 方便开发者进行模组开发和核心代码修改。

2. MCP GitHub 仓库结构

MCP 的主要开发活动都在 GitHub 上进行。要使用 MCP,我们需要了解其 GitHub 仓库的结构:

  • 主仓库 (MCPConfig): https://github.com/MinecraftForge/MCPConfig 这是 MCP 的核心仓库,包含了配置文件、脚本、映射文件和补丁等。

  • 其他相关仓库:

    • Mappings: 存储映射文件的仓库,通常不直接与用户交互,而是由 MCPConfig 自动管理。
    • ForgeFlower: MCP 使用的 Fernflower 反编译器的一个分支。
    • SpecialSource: 用于处理继承关系和泛型的工具。
    • Hashed: 用于处理哈希版本的工具。

3. 安装与配置 MCP

MCP 的安装和配置相对简单,但需要一些准备工作:

3.1. 前提条件

  • Java Development Kit (JDK): MCP 需要 JDK 来编译 Java 代码。请确保安装了 JDK 8 或更高版本(建议使用 JDK 8,因为 Minecraft 1.12.2 及以下版本通常与 JDK 8 兼容性最好)。
  • Python: MCP 的一些脚本使用 Python 编写。请确保安装了 Python 3。
  • Git: 用于从 GitHub 克隆 MCP 仓库。

3.2. 下载与设置

  1. 克隆 MCPConfig 仓库:

    打开命令行或终端,执行以下命令:

    bash
    git clone https://github.com/MinecraftForge/MCPConfig.git

    这将在当前目录下创建一个名为 MCPConfig 的文件夹,其中包含了 MCP 的所有文件。

  2. 进入 MCPConfig 目录:

    bash
    cd MCPConfig

  3. (可选)切换到特定版本
    MCPConfig仓库包含了多个Minecraft版本的配置。你可以通过git tag查看所有可用的版本标签,然后使用git checkout切换到你需要的版本。
    bash
    git tag
    git checkout <version_tag> # 比如 git checkout mcp940

  4. 初始化设置

    在MCPConfig目录下,运行初始化脚本。根据你的操作系统,选择运行setup.sh(Linux/macOS)或setup.bat(Windows)。

    bash
    ./setup.sh # Linux/macOS
    setup.bat # Windows

    这个脚本将会下载所需的依赖项, 包括反编译器,一些库文件等。

4. 使用 MCP 进行反编译、修改和重新编译

4.1. 反编译 Minecraft

  1. 准备 Minecraft JAR 文件:

    找到你的 Minecraft 安装目录下的 versions 文件夹。选择你想要修改的版本(例如 1.12.2),进入该版本的文件夹。复制该文件夹下的 .jar 文件(例如 1.12.2.jar)到 MCPConfig 目录下的 jars 文件夹中。
    注意: jars文件夹可能需要你手动创建。

  2. 运行反编译命令:

    在 MCPConfig 目录下,运行以下命令:
    Linux/ macOS:
    bash
    ./decompile.sh

    Windows:
    bash
    decompile.bat

    这个过程可能需要几分钟到几十分钟,具体取决于你的电脑性能和 Minecraft 版本。

    反编译完成后,你将在 src 文件夹中看到反编译后的 Minecraft 源代码。

4.2. 修改代码

现在,你可以使用你喜欢的 Java 编辑器(如 IntelliJ IDEA, Eclipse, VS Code)打开 src 文件夹中的源代码进行修改。

  • 使用映射: MCP 会自动应用映射文件,将混淆后的名称还原为可读的名称。你可以通过查看 conf 文件夹中的映射文件(如 methods.csv, fields.csv)来了解映射关系。

  • 创建补丁: 在修改代码时,MCP 会自动跟踪你的修改,并生成补丁文件。这些补丁文件位于 patches 文件夹中。

4.3. 重新编译代码

修改完代码后,你需要将代码重新编译成 .class 文件:

  1. 运行重新编译命令:

    在 MCPConfig 目录下,运行以下命令:
    Linux/ macOS:
    bash
    ./recompile.sh

    Windows:
    bash
    recompile.bat

    这将编译修改后的代码,并将编译后的 .class 文件输出到 reobf 文件夹中。

4.4. 重新混淆(Reobfuscation)

重新编译后,我们需要将修改过的代码进行重新混淆,以确保其与原始的Minecraft代码兼容。

在 MCPConfig 目录下,运行以下命令:
Linux/ macOS:
bash
./reobfuscate.sh

Windows:
bash
reobfuscate.bat

重新混淆后的文件位于reobf/minecraft

4.5. 测试修改

  1. 创建 Minecraft 客户端副本:

    在 Minecraft 安装目录的 versions 文件夹中,复制你修改的版本的文件夹(例如 1.12.2),并重命名为一个新的名称(例如 1.12.2-modified)。

  2. 替换 .class 文件:

    reobf/minecraft文件夹中的所有文件复制到 1.12.2-modified 文件夹中,替换原有的 .class 文件。
    注意: 你可能需要将.jar文件解压,替换里面的class文件后重新打包。或者使用支持直接替换jar内文件的压缩软件。

  3. 修改 JSON 文件:

    1.12.2-modified 文件夹中,找到与文件夹同名的 .json 文件(例如 1.12.2-modified.json)。用文本编辑器打开该文件。

    找到 "id" 字段,将其值修改为新的文件夹名称(例如 "1.12.2-modified")。

  4. 启动 Minecraft:

    启动 Minecraft 启动器,选择你创建的修改后的版本(例如 1.12.2-modified),然后启动游戏。

    如果一切正常,你的修改应该已经生效。

5. 高级用法

5.1. 使用 Forge 与 MCP

Forge 是 Minecraft 最流行的模组加载器之一。如果你想开发 Forge 模组,可以将 MCP 与 Forge 结合使用。

  1. 下载 Forge MDK (Mod Development Kit):

    从 Forge 官网下载与你的 Minecraft 版本对应的 MDK。

  2. 解压 MDK:

    将 MDK 解压到一个单独的文件夹中。

  3. 运行 Forge 的 setupDecompWorkspace 任务:
    在Forge MDK的目录下, 运行:
    Linux/ macOS:
    bash
    ./gradlew setupDecompWorkspace

    Windows:
    bash
    gradlew setupDecompWorkspace

    这个命令会自动下载和配置 MCP,并将 Forge 的代码与 MCP 集成。

  4. 使用IDE
    运行./gradlew eclipse或者./gradlew idea来生成对应IDE的项目文件。然后你就可以使用IDE打开项目进行开发了。

5.2. 更新 MCP

MCP 会不断更新,以修复错误、添加新功能和支持新的 Minecraft 版本。要更新 MCP,只需在 MCPConfig 目录下运行以下命令:

bash
git pull

这将从 GitHub 拉取最新的 MCP 代码。更新后,你可能需要重新运行 ./setup.shsetup.bat 来更新依赖项。

5.3. 使用不同的映射

MCP 默认使用官方的映射文件。如果你想使用其他的映射文件(例如社区维护的映射),可以在 conf 文件夹中找到并修改 mcp.cfg 文件。在该文件中,你可以指定不同的映射文件来源。

5.4. 参与 MCP 开发

如果你对 MCP 的开发感兴趣,可以参与到 MCP 的 GitHub 项目中。你可以提交错误报告、提出功能建议,甚至贡献代码。

6. 常见问题解答

  • Q: 反编译失败怎么办?

    A: 确保你已经安装了 JDK 和 Python,并且版本符合要求。检查你的 Minecraft JAR 文件是否正确,并且没有损坏。如果问题仍然存在,可以在 MCP 的 GitHub 仓库中搜索类似的问题,或者提交一个 issue。

  • Q: 修改后的代码无法正常运行怎么办?

    A: 仔细检查你的代码修改是否正确,是否有语法错误或逻辑错误。确保你已经正确地重新编译和重新混淆了代码。如果问题仍然存在,尝试使用调试器来查找问题所在。

  • Q: 如何找到某个类或方法?

    A: 使用你的 Java 编辑器的搜索功能。你可以搜索类名、方法名、变量名,或者使用 MCP 提供的映射文件来查找混淆后的名称。

  • Q: MCP 支持哪些 Minecraft 版本?

    A: MCP 支持多个 Minecraft 版本,具体支持的版本列表可以在 MCPConfig 仓库的 README 文件中找到。

7. 总结

MCP 是 Minecraft 社区的一个重要工具,为 Minecraft 代码的修改和模组开发提供了强大的支持。本文详细介绍了 MCP 的安装、配置、使用方法,以及一些高级技巧。希望本文能够帮助你更好地理解和使用 MCP,享受 Minecraft 的无限可能性。

THE END