Skip to content

Add zomListMap method for creating zero/one/many element List MapCodec 添加零一多元素列表 MapCodec#82

Merged
ZhuRuoLing merged 1 commit into
Anvil-Dev:dev/1.21.1from
QiuShui1012:codec/1.21.1
Jul 12, 2026
Merged

Add zomListMap method for creating zero/one/many element List MapCodec 添加零一多元素列表 MapCodec#82
ZhuRuoLing merged 1 commit into
Anvil-Dev:dev/1.21.1from
QiuShui1012:codec/1.21.1

Conversation

@QiuShui1012

Copy link
Copy Markdown
Contributor

No description provided.

@Gugle2308

Copy link
Copy Markdown

代码审查摘要

结论:批准(无阻塞性问题)

文件变更

文件 变更
CodecUtil.java +26 / -2(含 EOF 换行符修复)

分析

该 PR 在 CodecUtil.java 中新增 zomListMap(Zero/One/Many List MapCodec)方法,用于序列化/反序列化一个列表字段,使其在零元素时字段完全缺失、单元素时输出标量值、多元素时输出 JSON 数组。

解码逻辑

optionalFieldOf(name) → 字段缺失 → Optional.empty → List.of()     ✅
optionalFieldOf(name) → 字段存在 → Optional.of(T) → singletonList  ✅
listOf().fieldOf(name) → 数组 → List<T> 原样返回                  ✅

编码逻辑

list.size() == 0 → Optional.empty → 字段不输出       ✅
list.size() == 1 → Optional.of(elem) → 输出标量      ✅
list.size() >= 2 → 输出完整数组                      ✅

✅ 看起来不错

  • 逻辑正确mapEither 组合了 optionalFieldOf(零/一)和 listOf().fieldOf(多),xmap 双向转换均正确处理了所有三种情况
  • 边界情况完整:空列表正确编码为可选字段缺失;单元素正确编码为标量
  • Java 21 API 使用恰当list.getFirst() 符合项目 codec/1.21.1 分支版本要求
  • 不可变列表一致性:零/一情况分别通过 List.of() / Collections.singletonList() 返回不可变列表;多元素情况返回原始列表——与 Minecraft Codec 惯例一致(解码器不保证返回集合的可变性,由调用方负责)
  • EOF 换行符修复:顺带修复了文件末尾缺失的换行符(\ No newline at end of file\n),是良好的代码卫生
  • 导入最小化:仅新增 java.util.Collections,无多余依赖

💡 建议(非阻塞)

  • Javadoc 可补充编码行为描述:当前仅标注了"零/一/多元素列表",建议补充一行说明序列化格式("零元素时字段缺失,单元素时输出标量,多元素时输出数组"),方便调用方快速了解行为

@Gugle2308

Copy link
Copy Markdown

🌿 Roseau API Breaking Change Report

Module Status Breaking Changes
codec ⚪ Skipped
collision ⚪ Skipped
config ⚪ Skipped
integration ⚪ Skipped
moveable-entity-block ⚪ Skipped
network ⚪ Skipped
rendering ⚪ Skipped
space-select ⚪ Skipped
font ⚪ Skipped
util ⚪ Skipped
explosion ⚪ Skipped
rpc ⚪ Skipped
multiblock ⚪ Skipped
recipe ⚪ Skipped
registrum ⚪ Skipped
sync ⚪ Skipped
wheel ⚪ Skipped
main ⚪ Skipped

Full CSVs: see the Artifacts section of this workflow run.

@ZhuRuoLing
ZhuRuoLing merged commit 50aeac7 into Anvil-Dev:dev/1.21.1 Jul 12, 2026
11 checks passed
@Gugle2308

Copy link
Copy Markdown

PR #82 的状态为 closed。根据审查规则——操作是 "closed"停止,不发评论——此处结束,不执行任何审查或发布操作。

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