Reimplement negative shape cullface 重新实现负形剔除 - #4329
Conversation
Reason: script execution via -e/-c flag Reply |
Reason: script execution via -e/-c flag Reply |
Reason: script execution via -e/-c flag Reply |
Reason: Security scan — [CRITICAL] Mass file deletion in a short window: 4 non-build files were deleted within 20s. A burst of deletions can be destructive (ransomware-like or an accidental recursive wipe). Reply |
Reason: Security scan — [MEDIUM] Schemeless URL in sink context: URL without explicit scheme passed to a command that downloads/executes content; [HIGH] Pipe to interpreter: git | python3: Command pipes local output into interpreter 'python3'. This can execute or process unreviewed piped content; write it to a file and inspect it first when the content may be code. Reply |
|
所有关键验证完成。核心结论已确认: 代码审查摘要 — PR #4329操作: edited 🔴 关键
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 重新实现负形剔除(模型四边形级裁剪 + skipRendering + sodium/embeddium 兼容) | NegativeShapeModelEventListener(新)、BlockStateBaseMixin(新)、BlockMixin、Emb/SodiumBlockOcclusionCacheMixin(新)——架构完整但存在 C1 渲染级缺陷 | |
| 约束仓角落超限纹理与其它超限方块同步 | confinement_chamber.json——texture 已换 #1,但缺 light_emission/rotation/UV 对齐 |
结论: REQUEST_CHANGES — edgeQuads 丢弃内部四边形导致所有负形方块本体不可见,属必须修复的渲染回归;修复后需同步确认相邻块 0/16 共面外壳与实心方块邻接的 z-fighting 语义,以及 vanilla/sodium 视觉一致性。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
NegativeShapeBakedModel.getQuads(state, side) |
内部四边形(0.5/15.5、0/16 面)在任意 side 请求下保真返回;边缘四边形按 coverage 裁剪 | 🔴 |
FaceRectangle.subtract / intersection |
全覆盖、部分覆盖、相切、分离矩形组合;减法后碎片和等于原面积 | 🟡 |
shouldSkipFace |
同族/异族/非负形邻接 3×3 矩阵;EDGE_RECTANGLES 空(未烘焙)回退 |
🟡 |
getEdgeDirection / isOnEdge |
0.025/15.975 ± 0.0001 容差边界;非轴对齐四边形 | 🟢 |
rebuildQuad 顶点重写 |
切片后 UV 插值、COLOR 通道、UV1/UV2/NORMAL 保持 | 🟡 |
| 渲染集成 | 同布局 vanilla vs Sodium vs Embeddium 视觉一致性(对应 W2) | 🟡 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
|
分析完成。已交叉验证 PR head(10d955b7)、基分支与相关模型/Sodium 源码。以下是审查意见。 代码审查摘要 — PR #4329操作: opened 实现概览: 旧的
🔴 关键
|
| 声称 | 状态 | 对应实现 |
|---|---|---|
| 重新实现负形剔除 | ✅ | BlockStateBaseMixin + shouldSkipFace + NegativeShapeBakedModel |
| Sodium/Embeddium 兼容 | ✅ | Sodium/EmbBlockOcclusionCacheMixin + 插件门控 |
| ConfinementChamberBlock 接入 ITranscendiumBlock | ✅ | ConfinementChamberBlock.java + 模型换 #1 轮廓贴图(8 个 inverted cube,48 处) |
| 框架合并渲染(相邻方块剔除共享面) | ✅ | 仅对 0.025/15.975 面生效(chamber/ember/frost 等全方块模型) |
结论: REQUEST_CHANGES — 问题 1(mixin 公共列表引用客户端类)必须修复,一行改动(移入 client 段)即可;问题 2 需要设计决策:目前约半数负形方块(slab/stair/anvil 系列)的剔除静默失效且依赖 general pass,至少应在文档/注释中明确支持范围,或按建议 2 的方案改造为非边缘四边形保留在逐面 pass。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
NegativeShapeModelEventListener.shouldSkipFace |
两个 chamber 相邻(完全覆盖→剔除)、部分覆盖(角对边)、不同类型负形方块相邻 | 🔴 |
NegativeShapeBakedModel.getQuads |
side==null(物品渲染)vs 逐面调用:非边缘四边形是否存活、物品图标是否含框架 | 🔴 |
FaceRectangle.subtract |
矩形完全包含/部分相交/不相交/退化(0.025 厚度) | 🟡 |
rebuildQuad 插值 |
含 tint 的四边形切片后颜色/UV 保持、非轴对齐 quad 的 null 回退 | 🟡 |
| 专用服务器启动 | 无客户端类环境下加载 BlockStateBaseMixin 是否抛 LinkageError | 🔴 |
| Sodium/Embeddium 实测 | 相邻 chamber/ember 块接缝表现、slab/anvil 是否可见且着色正常 | 🟡 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/baked-model-wrapper-quad-filter-review.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
Reason: script execution via -e/-c flag Reply |
|
Analysis complete. I've verified everything against both the PR branch head and the target branch. Here's the review: 代码审查摘要 — PR #4329操作: synchronize 🔴 关键
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 重新实现负形剔除 | ✅ | NegativeShapeModelEventListener.java、BlockStateBaseMixin.java、BlockMixin.java |
| 约束仓角落超限纹理与其它超限方块同步 | confinement_chamber.json(纹理已换 #1 + light_emission,但缺 format_version;且为 8 角元素 + UV[0,4,4,0],与其它方块的单 outline 立方体 + UV[0,0,16,16]/rotation 180 结构不同,视觉效果需实际验证) | |
| Sodium/Embeddium 兼容 | ❌ | EmbBlockOcclusionCacheMixin.java、SodiumBlockOcclusionCacheMixin.java — 未在 mixins.json 注册,死代码 |
结论: REQUEST_CHANGES — 核心剔除算法本身设计合理、数学正确,但新增的 Sodium/Embeddium compat mixins 未注册进 anvilcraft.mixins.json,导致兼容路径完全失效并留下死代码(含插件判断与孤儿文件),需修复后再合入。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
shouldSkipFace / sliceQuad |
相邻负形方块全覆盖/部分覆盖/错位覆盖的剔除结果;与 ITranscendiumBlock 族(transcendium_block 全脸矩形 vs 约束仓角矩形)的混合覆盖 | 🔴 |
NegativeShapeBakedModel.getQuads |
带 cullface 的模型是否缺面(当前无用例,建议加回归测试);item 渲染(null + 六方向)是否完整 | 🟡 |
| Embeddium/Sodium 环境 | 注册 mixins 后两环境下相邻方块面剔除的 in-game 截图对比 | 🔴 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched references/baked-model-wrapper-quad-filter-review.md in skill 'minecraft-mod-pr-review' (1 replacement). |
Reason: Security scan — [MEDIUM] Lookalike TLD detected: Domain uses '.dev' TLD which can be confused with file extensions; [MEDIUM] Lookalike TLD detected: Domain uses '.dev' TLD which can be confused with file extensions Reply |
|
All verification is complete. Here is the review. 代码审查摘要 — PR #4329操作: synchronize 实现概述负形剔除被重写为「模型烘焙包装 + 边矩形裁剪」方案: 已交叉验证(目标分支 dev/1.21/1.6 + Sodium 1.21.6 源码):接口层级( 🔴 关键问题
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 重新实现负形剔除 | ✅ | NegativeShapeModelEventListener, BlockStateBaseMixin, BlockMixin, Sodium/Emb 兼容 Mixin |
| 约束仓角落超限纹理与其它超限方块同步 | ✅ | confinement_chamber / confined_neutronium_ingot / confined_time_anvilon 模型(energy/mass/space 经 parent 继承) |
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
| 三个 DecoOutline 方块 | 放置后肉眼/截图验证可见性(预期当前不可见) | 🔴 |
| 专用服务器 | 启动 + 加载区块验证不崩溃(BlockStateBaseMixin 移至 client 前) | 🔴 |
| NegativeShapeModelEventListener | F3+T 热重载期间快速移动镜头(EDGE_RECTANGLES 竞态) | 🟡 |
| 相邻负形方块 | 同类型 2×2 邻接时框架面消失、异类型邻接时框架完整、与实体方块邻接时面仍渲染 | 🟡 |
| 方块物品形式 | 物品栏渲染不丢框架面(null 通道 + 侧向通道合并正确) | 🟢 |
结论: REQUEST_CHANGES — 核心算法设计合理且验证充分,但三个装饰描边方块会整体不可见(问题 1),且通用列表 Mixin 引用客户端类有专用服务器崩溃风险(问题 2),均需修复后再合并。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-modding' (1 replacement). |
Reason: Security scan — [MEDIUM] Archive extraction to sensitive path: Archive command 'unzip' extracts to a potentially sensitive location Reply |
Reason: script execution via -e/-c flag Reply |
|
分析完成。所有关键点已交叉验证:接口层级、模型几何(0.5 inset vs 0.025/15.975)、原版渲染器双通道、mixin 分层约定、资源存在性。以下是审查意见: 代码审查摘要 — PR #4329操作: synchronize 主题: 重新实现负形剔除——废弃原 🔴 关键
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 重新实现负形剔除 | ✅ | NegativeShapeModelEventListener(564 行新)、BlockStateBaseMixin、BlockMixin 简化、Sodium/EmbBlockOcclusionCacheMixin |
| 约束仓角落超限纹理同步 | ✅ | confinement_chamber.json / confined_neutronium_ingot.json / confined_time_anvilon.json 角块面 #0→#1 |
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
shouldSkipFace |
全覆盖/部分覆盖/无覆盖/跨族相邻四象限;同族不同 state(POWERED) | 🔴 |
NegativeShapeBakedModel.getQuads |
rotation:180 UV 切片后纹理采样正确性(角块视觉回归) | 🔴 |
| 服务端启动 | 无 client 类环境下加载含 BlockStateBaseMixin 的 jar 不崩溃(移入 client 列表后验证) | 🔴 |
getEdgeDirection |
0.025/15.975 边界检测对 0.5-inset 模型返回 null(不误判) | 🟡 |
结论: REQUEST_CHANGES — 机制本身设计扎实且正确,但需先修复两个问题:① BlockStateBaseMixin 移入 client 列表(服务器类加载风险 + 分层约定违反);② skipRendering 拦截不应绕过原版同方块剔除(影响全部 ember/frost/transcendium 方块族的隐藏面 overdraw)。其余为建议项。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/baked-model-wrapper-quad-filter-review.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
|
分析完成。所有关键路径已验证:模型几何、接口族、mixin 门控、quad 分类机制。现在输出审查意见。 代码审查摘要 — PR #4329操作: synchronize 机制理解(先确认我读对了)新机制把负形方块的渲染拆成两条路径:
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 重新实现负形剔除 | ✅ | NegativeShapeModelEventListener (新), BlockMixin 重写, BlockStateBaseMixin (新), Sodium/Emb occlusion mixin (新) |
| 修改约束仓角落超限纹理 | ✅ | confinement_chamber.json 角元素 #0→#1 + light_emission 15 |
| 与其它超限方块同步 | confined_time_anvilon ✅ / confinement_chamber ✅ / confined_neutronium_ingot 缺 light_emission |
结论: COMMENT — 核心机制正确且自洽,无阻塞级问题。建议合并前补上 confined_neutronium_ingot.json 角元素的 light_emission: 15,并考虑 EDGE_RECTANGLES 的并发安全(原子替换 volatile 引用即可,改动很小)。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
| 同族相邻角块(chamber 角 + transcendium 墙) | 6 个方向各放一组,目视确认共享面无双线/无缺口,角部纹理对齐 | 🔴 |
| 不同族相邻(transcendium + ember) | 确认双方框架均正常渲染(不互剔) | 🟡 |
EDGE_RECTANGLES 重载 |
F3+T 资源重载 + 同时移动视角触发 chunk rebuild,确认无崩溃/闪烁 | 🟡 |
| 模型一致性 | 扫描全部负形方块模型:无 cullface + 边缘坐标 ∈ {0.025, 15.975}(可用 grep 快速校验) | 🟢 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/baked-model-wrapper-quad-filter-review.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
Reason: Security scan — [MEDIUM] Dependency manifest change followed by network egress: build.gradle was modified, then a network call to a network destination ran within 60s. A dependency edit that immediately phones out can indicate a poisoned install step. Reply |
Reason: script execution via -e/-c flag Reply |
Reason: script execution via -e/-c flag Reply |
|
The sandbox guard is blocking further local commands, but I now have comprehensive evidence. Let me compile the final review. Key evidence gathered:
代码审查摘要 — PR #4329操作: synchronize 变更概览全新的负形剔除实现,取代旧的
🔴 关键1. List<BakedQuad> quads = originalModel.getQuads(state, null, random, modelData, renderType);
if (side == null) return withoutEdgeQuads(quads); // ← 丢弃全部边界 quad
return edgeQuads(quads, side, ...); // ← 只保留"位置在 side 边界平面"的 quad两条路径返回的是互斥子集:
我核对了目标分支所有受影响方块的模型,非边界面的比例是决定性的:
世界内逐面查询(vanilla 2. 即使修复 #1,方块级剔除也只比较边界矩形。同类型相邻方块接触面上的非边界几何(如 0.5 处的横杆面)不在矩形减切范围内,模型级
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 重新实现负形剔除 | NegativeShapeModelEventListener, BlockStateBaseMixin, BlockMixin(核心机制在,但 quad 分流存在致命缺陷) | |
| 约束仓角落超限纹理与其它超限方块同步 | ✅ | confinement_chamber/confined_neutronium_ingot/confined_time_anvilon.json(#0→#1 + light_emission 15) |
| Sodium/Embeddium 兼容 | ✅ | SodiumBlockOcclusionCacheMixin, EmbBlockOcclusionCacheMixin + 插件门控 |
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
NegativeShapeBakedModel.getQuads |
逐面查询时返回的 quad 集合是否等于原模型该面的全部 quad(非边界不丢失);null 查询是否含全部 quad | 🔴 |
| 方块相邻剔除 | 同类型相邻(完全覆盖/部分覆盖/无覆盖三态)的面剔除与切片结果截图对比 | 🔴 |
| 物品形态 vs 世界形态 | 物品栏渲染(side=null)与世界中渲染的外观一致性 | 🟡 |
| 资源重载 | 重载后 EDGE_RECTANGLES 重建、包装不叠加(无双重 wrapper) |
🟡 |
| Sodium/Embeddium 实机 | 安装后 shouldDrawSide 注入不崩溃、剔除行为一致 |
🟡 |
结论: REQUEST_CHANGES — 核心机制思路可行,但 NegativeShapeBakedModel.getQuads 的 quad 分流使所有被包装方块的世界内渲染丢失主体几何(约束仓只剩角框、负物质方块只剩描边),必须修复后实机验证再合入。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
Uh oh!
There was an error while loading. Please reload this page.