Skip to content

Fix the crash issue caused by premature initialization 修复过早初始化导致的崩溃问题#3710

Merged
Gu-ZT merged 4 commits into
dev/26.1/1.6from
port/26.1/1.6
Jun 13, 2026
Merged

Fix the crash issue caused by premature initialization 修复过早初始化导致的崩溃问题#3710
Gu-ZT merged 4 commits into
dev/26.1/1.6from
port/26.1/1.6

Conversation

@QiuShui1012

Copy link
Copy Markdown
Collaborator

No description provided.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

好的,这是对提交请求(PR)中代码更改的审查结果。

1. 代码风格与文档改进(Javadoc 格式)

问题: 多个 Java 文件中的 Javadoc 注释使用了 Markdown 风格的代码标记(反引号 `)来包裹代码引用、参数名和字面量,而不是标准的 {@code} 标签。

影响: 虽然 Markdown 风格在 IntelliJ IDEA 等现代 IDE 中可能被正确渲染,但 {@code} 是 Javadoc 标准,能确保在所有工具(如 javadoc 生成器)中正确显示。使用反引号可能导致在某些环境下渲染不正确。

涉及文件:

  • SolidCauldronExtractor.java
  • GiantAnvilLandingEventListener.java
  • StoredItem.java
  • IAmulet.java
  • SpectralSlingshotItem.java
  • DataFixer.java
  • CauldronUtil.java
  • CommandUtil.java
  • FormattingUtil.java

建议: 将所有 Javadoc 中的反引号 ` 替换为 {@code} 标签,以符合 Javadoc 标准。例如:

  • `(Level, BlockPos) -> Wrapper` 改为 {@code (Level, BlockPos) -> Wrapper}
  • `true` 改为 {@code true}
  • `cauldronContent` 改为 {@code cauldronContent}

2. 文档格式改进(Markdown 表格)

问题:FormattingUtil.java 中,原有的 HTML <table> 被替换为 Markdown 表格。虽然 Markdown 表格在 GitHub 上可读性更好,但 Javadoc 工具链原生不支持 Markdown 表格,这可能导致生成的 API 文档中表格显示异常或完全丢失。

影响: 生成的 Javadoc HTML 页面中,该表格可能无法正确渲染。

建议: 为了确保在所有 Javadoc 生成工具中的兼容性,建议保留原有的 <table> HTML 标签,或者使用 Javadoc 支持的 {@table} 标签(如果可用)。如果项目明确只依赖现代 IDE 的渲染能力,使用 Markdown 表格也是可接受的,但这是一个需要注意的权衡。

3. 代码逻辑与资源引用改进

问题:BlockTagLoader.java 中,将三个独立的原版铁砧方块引用(Blocks.ANVIL, Blocks.CHIPPED_ANVIL, Blocks.DAMAGED_ANVIL)替换为了一个标签引用 BlockTags.ANVIL。同时,对应的 JSON 标签文件 anvil_tier_0.json 也做了相同的更改。

影响: 这是一个积极的改进#minecraft:anvil 标签已经包含了所有原版铁砧变种。使用标签代替硬编码的方块列表,可以更好地兼容其他模组添加的、也属于该标签的自定义铁砧,提高了代码的健壮性和扩展性。

建议: 无。此更改是推荐的。

4. 代码简化与依赖移除

问题:ComponentSerializationMixin.java 中,移除了对 AnvilCraft 类的导入,并将 AnvilCraft.of("mod_name").toString() 替换为硬编码的字符串 "anvilcraft:mod_name"

影响: 这是一个积极的改进。它移除了一个不必要的依赖和方法调用,使代码更简洁、更易读,且性能略有提升(避免了方法调用和字符串拼接)。

建议: 无。此更改是推荐的。

5. 资源文件(JSON)格式

问题:anvil_tier_0.json 文件中,移除了三个独立的方块条目,并添加了 #minecraft:anvil 标签。文件末尾缺少一个换行符。

影响: 文件末尾缺少换行符是一个微小的风格问题。虽然不影响 JSON 解析,但许多代码风格指南和工具(如 git diff)建议文件以换行符结尾。

建议:anvil_tier_0.json 文件的末尾添加一个换行符。

总结

文件 问题类型 严重程度 建议
多个 Java 文件 Javadoc 风格 将反引号 ` 替换为 {@code} 标签
FormattingUtil.java 文档格式 考虑 Javadoc 兼容性,可能需恢复为 HTML 表格
BlockTagLoader.java & anvil_tier_0.json 逻辑改进 更改正确,无需修改
ComponentSerializationMixin.java 代码简化 更改正确,无需修改
anvil_tier_0.json 文件格式 在文件末尾添加一个换行符

@ZhuRuoLing

Copy link
Copy Markdown
Contributor

代码审查总结

Verdict: 已审核(无阻塞性问题,2条轻微建议)

PR #3710 — "Fix the crash issue caused by premature initialization" by @QiuShui1012 | 12个文件变更,+41/-45


✅ 核心修复(正确)

🔴 Fix — ComponentSerializationMixin.java

这是 PR 的核心修复。旧代码:

contentTypes.put(AnvilCraft.of("mod_name").toString(), ModNameContents.CODEC)

ComponentSerialization.bootstrap() 在游戏启动的极早期被调用——在数据组件系统引导期间。此时引用 AnvilCraft.of() 会触发 AnvilCraft 类的静态初始化器(ConfigManager.register(...)Registrum.create(MOD_ID)IntegrationManager(...) 等),而这些依赖的子系统尚未初始化,导致崩溃。

修复后使用硬编码字符串 "anvilcraft:mod_name",完全避免了 AnvilCraft 类的加载,同时删除了未使用的 AnvilCraft 导入。

正确且简洁。 唯一理论上的风险是如果 MOD_ID 变更此字符串不会自动更新,但这几乎不可能发生。


✅ 铁砧标签合并(正确)

anvil_tier_0.json + BlockTagLoader.java

将 3 个单独的铁砧方块引用替换为 #minecraft:anvil 标签。这是官方 vanilla 标签,包含所有原版铁砧变种。更易维护,且模组添加的自定义铁砧也会自动被识别。

推荐的做法。


✅ Javadoc 格式化(仅视觉)

涉及 9 个文件(SolidCauldronExtractor.javaGiantAnvilLandingEventListener.javaStoredItem.javaIAmulet.javaSpectralSlingshotItem.javaDataFixer.javaCauldronUtil.javaCommandUtil.javaFormattingUtil.java):将所有 {@code} / {@link} 替换为 Markdown 反引号 `,并在 FormattingUtil.java 中将 HTML <table> 替换为 Markdown 表格。

与项目现有风格一致。 该代码库已在许多地方使用反引号 Markdown Javadoc,此变更只是统一风格。现代 Javadoc 工具链(JDK 16+)原生支持 Markdown 表格。


💡 轻微建议

  1. anvil_tier_0.json 末尾缺少换行符 — 文件末尾标记 \ No newline at end of file,建议补上以避免 git diff 显示提示行。

  2. PR 描述为空 — 建议补充一段简短描述,解释崩溃的根本原因(AnvilCraft 类在 ComponentSerialization.bootstrap() 期间被过早加载),方便后期回溯。


对已有 Bot 审查的评价

GitHub Actions bot 的审查存在以下问题:

  • ComponentSerializationMixin 的变更描述为"代码简化",完全没意识到这是崩溃修复的关键变更,也未与 PR 标题中的 "premature initialization" 关联
  • 建议将反引号改回 {@code},但该代码库已广泛使用 Markdown Javadoc 风格,此变更与项目风格一致
  • 建议用 {@table},但该标签在标准 Javadoc 中不存在
  • 唯一有效的观察是 JSON 尾部换行符问题

Reviewed by Hermes Agent

@Gu-ZT Gu-ZT merged commit beab848 into dev/26.1/1.6 Jun 13, 2026
3 checks passed
@QiuShui1012 QiuShui1012 deleted the port/26.1/1.6 branch June 20, 2026 14:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants