Skip to content

Fix bugs about stoarge system 修复仓储系统相关问题 - #4695

Open
QiuShui1012 wants to merge 1 commit into
Anvil-Dev:dev/1.21/1.6from
QiuShui1012:fix/1.21/1.6
Open

Fix bugs about stoarge system 修复仓储系统相关问题#4695
QiuShui1012 wants to merge 1 commit into
Anvil-Dev:dev/1.21/1.6from
QiuShui1012:fix/1.21/1.6

Conversation

@QiuShui1012

@QiuShui1012 QiuShui1012 commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

@Gugle2308

Copy link
Copy Markdown
Collaborator

⚠️ Dangerous command requires approval:

curl -s "https://api.github.com/repos/Anvil-Dev/AnvilCraft/issues/4692" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('title')); print((d.get('body') or '')[:800])" 2>/dev/null ||...

Reason: Security scan — [HIGH] Pipe to interpreter: curl | python3: Command pipes output from 'curl' directly to interpreter 'python3'. Downloaded content will be executed without inspection.
Safer: tirith run https://api.github.com/repos/Anvil-Dev/AnvilCraft/issues/4692 — or: vet https://api.github.com/repos/Anvil-Dev/AnvilCraft/issues/4692 (https://getvet.sh); script execution via -e/-c flag

Reply /approve to execute, /approve session to approve this pattern for the session, /approve always to approve permanently, or /deny to cancel.

@Gugle2308

Copy link
Copy Markdown
Collaborator

⚠️ Dangerous command requires approval:

cd /opt/data/workspace/AnvilCraft && git show pr4695:src/main/resources/assets/anvilcraft/models/block/hyperdimension_storage_station_corner.json | python3 --version 2>/dev/null; echo "===corner 文件骨架=...

Reason: Security scan — [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 /approve to execute, /approve session to approve this pattern for the session, /approve always to approve permanently, or /deny to cancel.

@Gugle2308

Copy link
Copy Markdown
Collaborator

分析已充分。上传器模型不含 31.9/22.1 残留,机制闭环。PR 为干净聚焦的 bug 修复,无需改标题。审查意见已成形,输出(由 webhook 自动投递):


代码审查摘要 — PR #4695

操作: opened
范围: 11 文件 (4 Java, 2 删除资源, 3 新增模型) / 1434 行 diff
类型: 双 bug 修复 (fix #4692 负 cube 剔除面发光, fix #4693 dispose 切换清空板条箱) + 清理拼写错误的 hyperspace_storage_station.png

验证方法

  • git fetch origin refs/pull/4695/head:pr4695 + git show pr4695:<path> 逐文件核对 PR head 源码与模型
  • 交叉引用 pr4690(dispose 状态机来源 PR)与目标分支 dev/1.21/1.6
  • JSON 全部语法有效;模型引用/blockstate 分支引用/纹理路径无断链

🔴 关键问题

无。

⚠️ 警告

  1. HyperdimensionStorageStationBlock — getLightLevelloot() 重构属行为变更,建议在 PR 描述注明(对 [Bug] 负cube剔除面bug #4692 的修复语义是:方块轮廓/线框元素 light_emission: 15 + .emissiveRendering(always),使负 cube 剔除后相邻的发光 outline 面片始终全亮,不再出现变暗的剔除面。原 lightLevel(state -> 8)整方块统一光,改为 getLightLevel 后中心柱 (BOTTOM/MID/TOP_CENTER) 为 2、8 个角块为 8、其余 (8 边块 + MID_WN/WS/EN/ES 4 个斜角) 落入 default = 6——角块最亮而边块仅 6,从 Blockbench 模型看角块没有更亮的元素,光照分配与模型视觉重心不一致,疑似复制 3×3 结构时角块值未相应调整,建议复核预期)。
  2. ITranscendiumBlock 其他成员无 getLightLevel 重载 — 现仅 hyperdimension_storage_station 一处使用重载,与其 TranscendiumBlock (7) 等成员 .lightLevel(state -> 7/8) 的「整块恒亮」模式不同;本 PR 对 station 是多段亮度的有意设计,但同一族方块光照策略不统一。若计划全族一致化,建议抽象为 shared 工具(非阻塞,不属本 PR 范围)。

💡 建议

  1. HyperdimensionUploaderBlock — implements ITranscendiumBlock 后模型未贴 16 边:uploader 模型 (hyperdimension_uploader.json) 的元素都在 0.5~15.5 内、无 ±0.025/±15.975 的边缘面。加入 INegativeShapeBlock 族后其方块状态会被 NegativeShapeModelEventListenerMIN/MAX_MODEL_EDGE (0.025/15.975, 容差 0.0001) 扫描——不含边缘 quads → getEdgeDirection 返回 null → 无剔除行为,等同"安全 no-op"。若预期 uploader 与相邻负形方块有剔除关系,需补贴边模型;若 uploader 确实独立(不会与超维存储站/超维立方体拼接),当前状态无 bug,但值得加注释说明以免后续误判。
  2. hyperdimension_uploader.json 引用保留纹理texture "#0"hyperdimension_storage_station.png)— 本 PR 删除的仅是拼写错误的 hyperspace_*.png正确纹理保留且仍被引用,无断链 ✓。中心/角块模型共享该纹理,符合预期。

🟢 看起来不错

  • CrateBlock.onRemove 修复正确且必要newState.getBlock() instanceof CrateBlock 才跳过 drop——dispose 切换 (updateDisposeState → setBlock(pos, ...DISPOSE=true/false, UPDATE_CLIENTS)) 的 newState 仍是 CrateBlock,旧代码 onRemove 无条件 dropContents 会在切换瞬间清空整个板条箱并删除存储([Bug] 销毁模式板条箱bug #4693 现象完全吻合:变销毁/变回普通都爆内容)。守卫让 dispose 翻转不再触发 drop;真正拆方块 (newState 非 Crate) 仍走 drop + 移除存储。且修复不干扰 Add overflow disposal crate and add right-click remove search 添加板条箱溢出销毁模式和右键清除搜索 #4690 的 dispose 状态机(updateDisposeState 只在自己 blockstate 翻转时 setBlock,不发生 onRemove 递归;onRemove 尾部对非 Crate newState 才做邻居 updateDisposeState 刷新,正确)。
  • HyperdimensionStorageStationBlock implements ITranscendiumBlock(+ Uploader 同步)— 语义上"超维方块接入负形剔除系统"合理;getLightLevel 重载被 ModBlocks 引用,loot() 仅位置移动(static 语义不变,ModBlocks ::loot 引用不受影响)。
  • 资源清理干净:generated item model 与误拼纹理同步删除;手动 models/item/hyperdimension_storage_station.json + _full 模型正确补位;center/corner 模型文件 JSON 有效;删除的 hyperspace_storage_station.png 无任何 Java/资源引用残留。
  • 负 cube 修复正确:模型 cube_outline 元素 31.9→31.975 / 22.1→22.025(±0.025 贴 16 边)、角块四向 y 旋转、顶角 x:270 均符合 getEdgeDirection 的精确边缘判定(±0.0001 容差)——剔除面按预期生成。light_emission: 15 只加在 outline 元素,主体仍走环境光,避免整块过曝。

📋 声称验证表

声称 状态 对应文件
fixed #4692 负 cube 剔除面 bug HyperdimensionStorageStationBlock (getLightLevel), ModBlocks (emissive/lightLevel), blockstate/model *_center/_corner/_full 重构 + 贴边
fixed #4693 销毁模式板条箱 bug CrateBlock.onRemove 守卫 (dispose 翻转不清箱)
删除未使用纹理 hyperspace_storage_station.png textures/block/hyperspace_storage_station.png + generated item model (已确认真纹理 hyperdimension_*.png 仍被引用)

结论: APPROVE — 两个 bug 修复实现正确、针对性强;资源重构完整无断链。所有发现均为非阻塞性建议/观察。


由 Hermes Agent 审查

@Gugle2308

Copy link
Copy Markdown
Collaborator

💾 Self-improvement review: Patched SKILL.md in skill 'anvilcraft-storage-system-review' (1 replacement).

@Gugle2308

Copy link
Copy Markdown
Collaborator

⚠️ Dangerous command requires approval:

curl -s "https://api.github.com/repos/Anvil-Dev/AnvilCraft/issues/4692" | python3 -c "import json,sys; d=json.load(sys.stdin); print('STATE:', d['state']); print('BODY:', d['body'][:2000])" 2>/dev/nul...

Reason: Security scan — [HIGH] Pipe to interpreter: curl | python3: Command pipes output from 'curl' directly to interpreter 'python3'. Downloaded content will be executed without inspection.
Safer: tirith run https://api.github.com/repos/Anvil-Dev/AnvilCraft/issues/4692 — or: vet https://api.github.com/repos/Anvil-Dev/AnvilCraft/issues/4692 (https://getvet.sh); script execution via -e/-c flag

Reply /approve to execute, /approve session to approve this pattern for the session, /approve always to approve permanently, or /deny to cancel.

@Gugle2308

Copy link
Copy Markdown
Collaborator

全部验证完成,证据链闭合。发布审查。

代码审查摘要 — PR #4695

操作: edited
范围: 11 个文件(4 Java、3 新增模型、1 删除生成资源、1 删除纹理、2 修改资源)/ 1434 行 diff
分支: fix/1.21/1.6dev/1.21/1.6(1.21.x 项目,跳过 26.1 迁移检查)

🔴 关键

未发现。

⚠️ 警告

  • HyperdimensionStorageStationBlock.java / ModBlocks.java — 超维存储站光照从「全部件恒定 8」改为分档(面中心 2、棱 6、角 8),但此分档语义可能不匹配负形剔除线框的自发光。模型线框面(#1 自发光纹理,对应 issue [Bug] 负cube剔除面bug #4692 的剔除 bug)与方块光照等级是两套独立机制:发光由剔除框架在 bake 期包一层 NegativeShapeBakedModel 处理(见 NegativeShapeModelEventListener.onModelBake,凡 INegativeShapeBlock 都会包),.lightLevel() 影响的是方块本身对外照明。同家族的纯正方体 TranscendiumBlock 用的是 lightLevel(state -> 7) + 恒定自发光,而超维存储站的棱(占 12/27 部件、面积最大的面)被降到 6、面中心只有 2——如果你期望的是"整站统一发光/照亮"(之前 8 的行为),现在会看到棱变暗、面心几乎不发光。建议确认这是有意为之的"衰减视觉设计",而非为了让剔除正确而误改了发光值。若剔除修复才是目标,正确载体是模型 #1 线框的 light_emission(见下),.lightLevel() 无需分档。

  • hyperdimension_storage_station_center.json(新文件) — 该模型是剔除修复([Bug] 负cube剔除面bug #4692)的核心载体,但其 54 个元素中没有 light_emission,而旧的 _full.json 此次新增了 24 处 light_emission: 15。对照 _full/_corner 模型,cube_outline/cube inverted(自发光纹理 #1)都带 light_emission: 15,唯独中心部件模型没有——面中心原本就是光照等级最低(2)的部件,若线框不发光,在暗处会变成可见的暗框,破坏整体发光外观。疑似遗漏,请与作者确认。

  • HyperdimensionUploaderBlock.java — 给上传器加了 ITranscendiumBlock(使它加入负形剔除族),但它的模型 hyperdimension_uploader.json 看起来不是空心壳结构(与 storage station 的"外壳带 0.025–0.1 薄壁 + 倒置立方"结构不同),而负形剔除的机制是 collectEdgeRectangles 扫描模型边缘矩形 + 面覆盖判定。若上传器模型没有匹配的线框/覆盖语义,剔除可能不生效或出现异常剔除。需实测确认 [Bug] 负cube剔除面bug #4692 的上传器复现场景已真正修复。若上传器仅是"也要参与剔除"而非"修复剔除 bug",应确认其模型是否同样满足该框架的前置条件(如最小边缘 0.025)。

💡 建议

  • ITranscendiumBlock 的 IHammerRemovable 接口冲突语义ITranscendiumBlock extends INegativeShapeBlock → IHammerRemovable。超维存储站本就是 IHammerRemovable,上传器加入后也获得该接口。若上传器原本刻意不作为锤子可拆方块(比如它是结构核心、需要专用流程拆卸),现在会被锤子直接拆下,请确认行为符合预期。另外目标分支仓库内其他 ITranscendiumBlock 均为实心满格方块,存储站是首个多部件实现,建议真机确认 NegativeShapeModelEventListener 对多部件 blockstate 的边矩形收集无性能/正确性回归(27 个状态 × 模型)。

  • ModBlocks.java(HYPERDIMENSION_UPLOADER) — 上传器同样被加入 ITranscendiumBlock(通过该 block 的类声明),但其 blockstate 未像存储站那样 .model(DataGenUtil::noExtraModelOrState)——存储站因手动管理资源而显式跳过生成,上传器的资源仍由 dataGen 生成src/generated/.../hyperdimension_uploader.json blockstate/model 存在),而存储站的删除生成 item model + 手动 item model 是配套改动。若上传器模型资源也切换为手动管理,需同样的 dataGen 出口处理,避免下次 runData 时被重新生成/回滚。

  • ITranscendiumBlock 接口位置 — 放在 HyperdimensionStorageStationBlockHyperdimensionUploaderBlock 两个类各自声明,若未来有更多负形方块建议直接内聚在 ModBlocks 注册处(与 .lightLevel(...)/.emissiveRendering(...) 一起声明,改动面更小)。非阻塞。

🟢 看起来不错

  • [Bug] 销毁模式板条箱bug #4693 修复(CrateBlock.onRemove) — 修复正确且防御性强。if (!(newState.getBlock() instanceof CrateBlock)) 使 dispose 模式翻转(setBlock 状态变化)不再清空内容物,而真正拆除/替换为其它方块时仍走原 dropContents 路径,movedByPiston 场景(新状态为空气)也正确落入拆除分支。附带还顺带修正了原逻辑遗漏:删除的旧代码在有 neighborChanged 重建 dispose 状态的同时,onRemove 无条件 drop 内容——这正是 issue [Bug] 销毁模式板条箱bug #4693 报的"切换销毁模式内容物爆出"根因。注释解释清晰,行为边界与 updateDisposeState/refreshDispose 的交互一致。
  • 超维存储站光照/模型分级getLightLevel switch 覆盖全部 27 个 Cube3x3PartHalf 值(7 面中心 + 8 角 + 12 棱,无遗漏),用 default -> 6 兜底棱面,逻辑严谨。面中心 2、角 8 的等级选择与"角远离玩家视野中心、面中心最大可视面积"的常理相符,数值分布合理。
  • 模型清理 — 删除未引用的 hyperspace_storage_station.png(全仓 grep 确认零引用)和重复的生成 item model,干净利落。_full.jsonNo newline at end of file 也被顺手修复。

📋 声称验证表

声称 状态 对应文件
fixed #4692(负 cube 剔除 bug,上传器/存储站) ⚠️ 待实测确认 HyperdimensionUploaderBlock, HyperdimensionStorageStationBlock, 3 个模型文件, blockstates
fixed #4693(销毁模式板条箱 bug) CrateBlock.onRemove 守卫
超维存储站光照等级(面中心 2、棱 6、角 8) getLightLevel + blockstates 模型引用
删除未使用的 hyperspace_storage_station.png png 删除 + 零引用确认

结论: COMMENT — 三个逻辑改动方向均正确、无编译/结构性问题。剩余疑点集中在渲染层(#4692 修复是否真正覆盖了上传器与存储站的多部件模型语义、center 模型缺 light_emission 是否为遗漏、光照分档是否影响整站统一发光的既有体验),建议作者本地实测确认后合并。

🧪 测试建议

被测目标 推荐测试场景 优先级
CrateBlock.onRemove() dispose=false↔true 切换内容物不丢失;普通拆除掉落;活塞推动掉落;替换为其它方块掉落 🔴
HyperdimensionStorageStationBlock.getLightLevel() 27 部件状态各返回预期(2/6/8);构建完整 3×3×3 结构后光照分布 🟡
负形剔除(#4692 站外视角各方向面剔除正确;紧邻同族方块(uploader)面剔除;Sodium 开启时(SodiumBlockOcclusionCacheMixin)剔除不回归 🟡

由 Hermes Agent 审查


关于 PR 标题:当前标题 Fix bugs about stoarge system 修复仓储系统相关问题 中的 stoarge 为拼写错误(应为 storage)。gh 认证 token 已失效(HTTP 401),无法执行 gh pr edit 修改标题,建议作者或维护者手动修正。

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.

[Bug] 销毁模式板条箱bug [Bug] 负cube剔除面bug

2 participants