You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何修改.class文件添加自定义代码后成功重编译

核心结论
  • 单个.class文件反编译、插入自定义代码后重编译是完全可行的,你之前命令行编译失败是操作细节问题,不是方案本身不成立。
  • 修改JAR包内单个class文件不需要反编译整个JAR包,仅需提取目标class单独处理后替换回JAR对应路径即可。
重编译失败的常见原因
  • Java版本不匹配:Minecraft不同版本要求的Java版本差异极大,1.16及更早版本需Java8,1.17~1.18需Java16,1.19及以上版本需Java17。如果编译用的javac版本和客户端运行要求的版本不一致,会直接报类版本错误、语法不支持等问题。
  • 编译依赖缺失:单独编译Main类时,如果classpath中没有原客户端JAR内的其他关联类、以及客户端依赖的第三方库,javac会报找不到符号、类不存在的错误。
  • 反编译结果错误:部分老旧反编译工具(如旧版JD-GUI)还原的Java源码会存在lambda表达式错误、泛型逻辑偏差、语法残缺等问题,直接编译必然失败。
可直接落地的操作步骤
  1. 用任意压缩软件打开目标Minecraft客户端JAR,进入net/minecraft/client/main/路径,把里面的Main.class单独拖出来,不需要解压整个JAR。
  2. 用FernFlower(IDEA内置反编译器)或者CFR对单独提取的Main.class做反编译,得到可编辑的Java源码,不要用输出结果误差大的反编译工具。
  3. 在main方法的最开头插入自定义逻辑,不要修改原有方法的参数、签名以及后续的原有代码,插入的代码参考如下:
// 记得补全对应import,不要漏
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) throws Exception {
        // 插入的自定义逻辑开始
        String jarFullPath = Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getSchemeSpecificPart();
        String versionName = jarFullPath.substring(jarFullPath.lastIndexOf("/") + 1).replace(".jar", "");
        Path outputFile = Paths.get(System.getProperty("user.dir"), "BetterSettings.txt");
        Files.writeString(outputFile, "JAR完整路径:" + jarFullPath + "\n版本名称:" + versionName, StandardCharsets.UTF_8);
        // 插入的自定义逻辑结束

        // 下方是原main方法的所有原有代码,不要做任何修改
        // ...原有业务逻辑
    }
}
  1. 执行编译命令,命令模板如下,替换为你本地的实际路径、对应Java版本号即可:
# 示例为Java8环境编译,Java17就把8改成17,路径替换成你自己的文件路径
javac -source 8 -target 8 -cp 你的原客户端文件.jar -d ./compile_output Main.java

编译完成后,会在compile_output目录下生成对应路径结构的新Main.class文件。
5. 再次用压缩软件打开原客户端JAR,进入net/minecraft/client/main/路径,把新编译得到的Main.class拖进去覆盖原文件,修改就完成了,不需要改动JAR内的其他任何文件。

注意:如果是未做反混淆的原版客户端,反编译出来的类、方法、字段名都是短字符混淆名,插入代码时不要改动这些原有命名,否则会运行报错。

内容的提问来源于stack exchange,提问作者LearningJava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:18:39