提示

若您并没有拥有 Minecraft 账号,请自行退出,否则在完成之后你可能将会违反 Minecraft EULA,该教程仅适用于拥有 Minecraft 账号的人。

反编译

工具

  1. MCP 4.3

  2. 任意启动器生成的启动命令行

  3. IDE(例如 IDEA

修改 MCP

首先将下载好的 MCP 4.3 单独解压到一个目录中,然后打开 runtime 目录中的 commands.py 文件转到 496 行,将 md5srvlist 的值修改为 {},再将502 和 503 行注释掉,修改完成后保存:

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第1张图片

导入依赖

然后用任意启动器使用 正版登录 在官方启动器目录启动一次原版 Minecraft Beta 1.7.3:

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第2张图片然后将 版本目录中的 b1.7.3.jar 复制到 mcp 目录中的 jars/bin 目录中,并改名为 minecraft.jar,bin 目录需要自行创建,然后再将 libraries 目录中的以下几个文件复制到 mcp 的对应位置中:

org\lwjgl\lwjgl\lwjgl\2.9.0\lwjgl-2.9.0.jarjars\bin\lwjgl.jar
org\lwjgl\lwjgl\lwjgl_util\2.9.0\lwjgl_util-2.9.0.jarjars\bin\lwjgl_util.jar
net\java\jinput\jinput\2.0.5\jinput-2.0.5.jarjars\bin\jinput.jar
net\java\jinput\jinput-platform\2.0.5\jinput-platform-2.0.5-natives-windows.jar
jars\bin\natives\jinput-platform-2.0.5-natives-windows.jar

然后再将 bin 目录中的文件复制到 mcp 的 lib 目录中以防万一。

反编译

然后打开 mcp 目录中的 decompile.bat 文件等待反编译完成即可,预计 1 - 3 分钟左右:

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第3张图片

打包运行

首先使用 IDE 打开 mcp 目录中的 eclipse\Client 项目,这里以 IDEA IDE 为例,然后打开项目结构,将 SDK 和 语言级别设置为 Jdk 6:

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第4张图片

导入 eclipse\Client 目录中的 .project 模块文件,然后删除所有内容根,并添加内容根为 mcp 目录中的 src 目录,然后新建 resources 资源目录,模块依赖仅保留 jdk1.8,然后导入 mcp 目录中的 lib 目录为库,并将其导入模块:

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第5张图片

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第6张图片

然后再将 mcp 目录中的除了 net 和 META-INF 目录的所有文件复制进 resources 目录中。

打包

然后创建空的工件,类型 JAR,将 "Client"编译输出添加进去:

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第7张图片然后构建工件即可得到打包好的 Minecraft beta 1.7.3 客户端。

运行

首先使用任意启动器生成一个启动命令行在游戏目录中,然后去掉命令行末尾的 pause ,然后在 IDEA 中添加一个 Shell 脚本配置来执行脚本文件,并设置在执行前构建工件,脚本内容填写以下内容:

cmd /c copy /y <out_jar> <game_dir>\b1.7.3.jar

取消在中终端运行选项:

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第8张图片然后再创建一个 Batch 配置,设置在执行前运行刚刚创建的 Shell 脚本配置,脚本填写启动命令行的绝对路径。

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第9张图片

最后运行测试即可。

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第10张图片

修改游戏窗口标题及简易功能实现

修改游戏窗口标题

首先打开 Minecraft 类,然后找到处于第 1549 行的 frame 变量,然后将其中的 "Minecraft" 改为你想要的标题即可。

简易功能实现

首先打开 Minecraft 类并创建一个布尔值变量,然后打开 EntityPlayerSP 类,然后在 onLivingUpdate 类中判断 I 键是否被按下,如果符合便判断刚刚创建的变量,如果为假则修改 Timer 为原本的 2.5 倍,并设置刚刚创建的变量为真,否则修改为原速,记得要将 timer 变量的修饰符改为 public:

if(Keyboard.isKeyDown(Keyboard.KEY_I)){
    mc.timer = new Timer(mc.timed?20f:20f*2.5f);
    mc.timed = !mc.timed;
}
public Timer timer;
public boolean timed = false;

最后运行测试即可。

beta1.7.3客户端的反编译与打包运行及修改游戏标题和简易功能的实现-第11张图片

完整代码

Minecraft.java

public Timer timer;
public boolean timed = false;
public static void startMainThread(String s, String s1, String s2) {
    [...]
    Frame frame = new Frame("ExampleBetaClient | 1.0");
    [...]
 }

EntityPlayerSP.java

public void onLivingUpdate()
{
    if(Keyboard.isKeyDown(Keyboard.KEY_I)){
        mc.timer = new Timer(mc.timed?20f:20f*2.5f);
        mc.timed = !mc.timed;
    }
    [...]
}