Skip to content

cube模块更新 - #114

Merged
PigeonNian merged 1 commit into
Anvil-Dev:dev/1.21.1from
WhereisFff:fff/1.21.1-cube2
Sep 9, 2026
Merged

cube模块更新#114
PigeonNian merged 1 commit into
Anvil-Dev:dev/1.21.1from
WhereisFff:fff/1.21.1-cube2

Conversation

@WhereisFff

Copy link
Copy Markdown
Contributor

支持按 ID 注册、替换和注销运行时目标排除规则,方便接入可重载黑名单,且不丢弃模型缓存。

@Gugle2308

Copy link
Copy Markdown

PR 语义核查完毕(diff 全量 + head sha 完整源码 + 全部消费方交叉验证),gh token 已失效无法改标题,直接在评论中给出。以下是审查意见:

代码审查摘要 — PR #114

操作: opened
范围: 3 个文件 (1 Java, 2 README) / 93 行 diff
方向: WhereisFff/AnvilLib fff/1.21.1-cube2 → Anvil-Dev/AnvilLib dev/1.21.1

概览

CubeSelection 新增按 ResourceLocation id 注册/替换/注销的运行时目标排除规则表 TARGET_EXCLUSIONSMap<ResourceLocation, Predicate<BlockState>>,CHM 实现),target() 的排除判定从 EXCLUDED.contains(block) 收敛到新的 isTargetExcluded(state)。改动极小且自洽,语义经全消费方交叉验证无缺口。

✅ 声称验证(全链路核实)

声称 状态 验证
排除后精确拾取回退原版 CubePicking.pick 以原版 entity.pick 结果为 context.nearest 基线,target()==null 即不参与竞争;BlockGetterMixin.clipWithInteractionOverrideCubePicking.target()==null 时不覆写 → 落回原版 VoxelShape
排除后默认模型高亮回退原版 CubeHighlightEvents.highlight @Lowesttarget()==null → 直接 return 且 setCanceled → 原版线框照常绘制(与永久 EXCLUDED 行为一致)
同一 id 再注册替换旧规则 CHM put 覆盖,旧谓词随之可 GC
规则不触发模型缓存丢弃 注册/注销路径零触碰 models/OUTLINES/extended,仅在 target() 查询前置判(第 163 行先于 FRAME 缓存读取)→ 配置/规则变化当帧即生效,烘焙几何与 outline 缓存完整保留
不影响 modelParts / 烘焙 modelParts()ModelSelections 烘焙仍只查永久 EXCLUDEDisEnabled),且仓库内无 modelParts 消费方——与 javadoc 声明一致

另核实:并发安全(CHM + values() 弱一致迭代,运行中增删规则无 CME);永久排除快路径在前(EXCLUDED 命中即短路,不空跑谓词);registerDynamic 的动态目标与静态目标同路径被抑制,与旧 EXCLUDED 语义一致。

⚠️ 警告

  • CubeSelection.isTargetExcluded(第 82 行) — 谓词异常会直达渲染线程。javadoc 明确鼓励回调"读取接入方当前的资源包配置",若重载配置在谓词执行中途被换,谓词内抛出的异常会从 target() 一路冒泡到拾取/高亮事件(客户端渲染热路径)。建议对每个谓词 try/catch RuntimeException(记日志并按未排除处理,或按排除处理——作者定夺)并在 javadoc 写明传播策略。

💡 建议

  • registerTargetExclusion(第 66 行) — 传入 null 谓词时 CHM put 抛裸 NPE(无任何文档提示)。建议 Objects.requireNonNull(exclusion, ...) 显式 fail-fast。
  • 资源重载生命周期install()(重载)不清空 TARGET_EXCLUSIONS,规则跨资源包重载持久存活(这正是"可重载黑名单"想要的)。但接入方若以资源包内容驱动黑名单,重载后需自行注销已消失的 id——建议在 javadoc 或 README 点明"重载方负责注销过期 id",避免规则随多次重载累积。
  • 标题 — 「cube模块更新」过泛。建议改为:Add reloadable runtime target exclusions to cube module cube模块新增可重载运行时排除规则(gh 认证 token 已失效,未能代为修改)。

🟢 看起来不错

  • 排除判定收敛为单一入口 isTargetExcluded,与 EXCLUDED 语义完全向后兼容(原排除块行为不变);
  • javadoc 质量高:id 命名空间约定、回调无副作用/不捕获跨存档对象、轻量要求均写明;
  • README 中英双语同步更新,声明与实现逐条对上。

结论: APPROVE — 逻辑自洽、全消费方一致、无阻塞问题。以上警告/建议均可在后续 PR 跟进。


由 Hermes Agent 审查

@Gugle2308

Copy link
Copy Markdown

💾 Self-improvement review: Patched SKILL.md in skill 'cube-selection-pr-review' (1 replacement).

@Gugle2308

Copy link
Copy Markdown

🌿 Roseau API Breaking Change Report

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

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

@PigeonNian
PigeonNian merged commit 8a53365 into Anvil-Dev:dev/1.21.1 Sep 9, 2026
38 checks passed
@Gugle2308

Copy link
Copy Markdown

PR #114(cube 模块更新)状态为 closed,按 webhook 规则(closed/labeled → 停止)不发布任何审查评论。跳过本次审查。

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