文件
ednaven3.3/README.md
T

3.8 KiB
原始文件 Blame 文件历史

EdNaven_Fabric — 源码工程

EdNaven_Fabric-3.3-LATEST.jar 反编译整理而来的 Gradle 源码工程,结构对齐 Southside 工程 settings.gradle + gradle.properties + build.gradle + src/main/java + src/main/resources), 目标是 gradle build 后产出可直接丢进 mods/ 目录的 Fabric mod jar。

基本信息

Mod ID ednaven_fabric
版本 3.3-LATEST
Minecraft 1.20.6
Fabric Loader ≥ 0.18.4
Java 21mixins.json 的 compatibilityLevel 就是 JAVA_21
入口 tech.naven.fabric.NavenModInitializer(空壳,真实逻辑在 Mixin
Mixin 包 tech.naven.Y33 个 client Mixin + x

目录结构

EdNaven-fabric/
├── build.gradle              # Fabric Loom 构建脚本
├── settings.gradle
├── gradle.properties         # 版本变量与 JDK 21 路径
├── libs/                     # 原 jar 内嵌依赖(javacv/ffmpeg/skija/javacpp/collection
└── src/main/
    ├── java/
    │   ├── tech/naven/       # 核心:fabric 入口 + Y(Mixin 包) + utils
    │   └── <中文包名>/        # EdNaven 的水面混淆层(anti-tamper),不可删
    └── resources/
        ├── fabric.mod.json
        ├── ednaven_fabric.mixins.json
        └── ednaven.accesswidener

构建

需要 JDK 21 与网络(首次构建会下载 Minecraft、Intermediary 映射、Fabric Loader、Loom)。

cd "C:\Users\zh201\WorkBuddy\2026-08-26-21-28-31\EdNaven-fabric"

# 用本地已有的 Gradle 8.5(工程目录下没放 wrapper
& "C:\Users\zh201\WorkBuddy\2026-08-26-21-28-31\gradle-8.5\bin\gradle.bat" build

# 想生成 wrapper 的话(首次构建成功后执行)
& "C:\Users\zh201\WorkBuddy\2026-08-26-21-28-31\gradle-8.5\bin\gradle.bat" wrapper --gradle-version 8.5

产物:build/libs/EdNaven_Fabric-3.3-LATEST.jar用这个,不要拿 -dev-sources 的)。 gradle packageMod 会额外打成 EdNaven_Fabric.zip 方便分发。

三个关键设计(改动前必读)

1. mappings 必须是 Intermediary,不能用 Yarn

反编译出来的源码里 Minecraft 类全是 Intermediary 中间名

import net.minecraft.class_310;   // = Minecraft
import net.minecraft.class_638;   // = ClientWorld

所以 build.gradle 里是 mappings "net.fabricmc:intermediary:1.20.6:v2"换成 Yarn 会导致全量编译失败——Yarn 会把 class_310 命名成 Minecraft,源码里的 import 全部失效。

2. libs/ 里的内嵌依赖要打回 META-INF/jars

fabric.mod.jsonjars 字段声明了 9 个内嵌依赖(javacv、ffmpeg、skija、javacpp、collection), 源码里的视频播放 / 字体渲染(io.github.humbleui.skija.*org.bytedeco.javacv.*)都依赖它们。

build.gradlejar 任务里已经有:

from('libs') { into 'META-INF/jars' }

删掉这行,运行时会 NoClassDefFoundError。

3. 中文包名是混淆层,不能随手删

src/main/java 下的中文包名(如 аеехаpр)是 EdNaven 自己的水面混淆(anti-tamper), 核心 Mixin 会引用它们。Java 允许 Unicode 标识符,编译没问题,但必须保持 UTF-8 编码 (构建脚本里已设置 options.encoding = 'UTF-8')。

已知限制

  • 反编译产物可能存在个别 CFR 输出问题(不可达语句、重复局部变量、泛型擦除导致的强转缺失等)。 首次构建若报编译错误,按错误逐条修即可,通常集中在少数几个文件。
  • 未做反混淆重命名:类名仍是 class_310 与中文包名。想要 Southside 那种全英文可读命名, 需要额外做「Intermediary → Yarn」的重命名 + 中文包名重构,属于独立工作量。