Fix #4358 #4307 - #4378
Conversation
Fix TransmissionPoleBlock and RemoteTransmissionPoleBlock don't immediately respond to redstone signals 修复输电杆和远程输电杆放置时不立即响应红石信号
Fix Anvil-Dev#4307 Fix TransmissionPoleBlock and RemoteTransmissionPoleBlock don't immediately respond to redstone signals 修复输电杆和远程输电杆放置时不立即响应红石信号
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. Reply |
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. Reply |
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. Reply |
|
分析完成。我已完整验证了 PR 的修复机制(多方块放置顺序、neighborChanged 逻辑等价性、电网 flush 语义、序列化路径),现在输出审查意见。 代码审查摘要 — PR #4378操作: opened 📋 声称验证表
🟢 修复机制验证(输电杆)
🟢 #4358 修复验证(放电器)
|
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
TransmissionPoleBlock.neighborChanged/onPlace |
杆放在已通电红石旁放置(BOTTOM 被 getPlacementState 置 OFF、TOP 置 ON 的不一致场景)→ 断言 TOP 立即变 OFF |
🔴 |
RemoteTransmissionPoleBlock |
同上(4 段杆, pos.above(3)) | 🔴 |
ChargerBlockEntity.tick |
电网 generate==consume(恰为档位边界 64/128/256/512)时充电是否意外停摆;高频红石时钟下物品 FE 是否仍净增长 | 🔴 |
DischargerBlockEntity |
配方放电中途退出重进 → 输出功率恢复;FE 放电中途退出重进 | 🟡 |
ChargerBlockEntity.saveAdditional/loadAdditional |
旧存档(无 PowerValue 键)加载兼容 | 🟢 |
结论: APPROVE — 三处修复机制均经源码级验证成立:#4358(持久化 powerValue,配方放电路径是关键受益者)、#4307(严格盈余守卫,方向正确)、输电杆(TOP-first 枚举顺序使 BOTTOM 的 neighborChanged 在结构完整时触发,新逻辑同步 BOTTOM+TOP)。无阻塞性问题;主要遗留是 >= 守卫在"发电量恰为档位整数倍"电网下的自锁边界,请作者确认是否符合预期。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
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. Reply |
Reason: recursive delete Reply |
Reason: script execution via -e/-c flag Reply |
代码审查摘要 — PR #4378操作: synchronize 已对照目标分支 🔴 关键
|
| 声称 | 状态 | 对应实现 |
|---|---|---|
| Fix #4358 放电器重进游戏后不放电 | ✅ | saveAdditional/loadAdditional 新增 PowerValue 持久化(Charger + Discharger);打破"重进后 demand=0→consume=0→放电器输出=0"死锁链 |
| Fix #4307 高频红石无中生电 | 空电网场景(0>=0)被堵死 ✅;但有 1:1 转换回归与陈旧快照竞态(见 🔴) |
|
| 输电杆/远程输电杆放置响应红石 | 新增 onPlace + neighborChanged 等价重写;常规放置路径下实际初始化仍依赖既有 neighborChanged 路径,修复覆盖面需实测确认 |
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
ChargerBlockEntity.tick() |
单放电器+单充电器 1:1 循环应持续转换(当前会停摆) | 🔴 |
ChargerBlockEntity.tick() |
空电网 + 高频红石时钟 + 充能物品(#4307 复现)应完全无法充能 | 🔴 |
ChargerBlockEntity.tick() |
过载电网(产<耗)+ 蓄电池:蓄电池不应凭空漏电 | 🔴 |
DischargerBlockEntity |
重进游戏后放电恢复(#4358 复现) | 🟡 |
TransmissionPoleBlock.onPlace |
已充能区域放置 → 立即断开电网;移除信号 → 立即接入 | 🟡 |
| 电网守卫边界 | generate == consume(平衡)与 generate == consume+1 的边界行为 | 🟡 |
结论: REQUEST_CHANGES — powerValue 序列化修复与 pole 的 neighborChanged 重写质量良好,但充电器新守卫 consume >= generate 使标准 1:1 放电器→充电器转换永久停摆,且拦截期间挂账的 powerValue 造成蓄电池能量凭空蒸发。建议改为 generate <= 0 || remaining < 0 并在拦截时清零 powerValue,同时补实测确认杆的放置修复覆盖目标场景。
由 Hermes Agent 审查
git status or read_file to confirm.
• /tmp/fetch_issues.py — [write_file] Write denied: '/tmp/fetch_issues.py' is a protected system/credential file.
|
💾 Self-improvement review: Patched references/anvilcraft-power-grid-review.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
|
分析完成,证据链齐全。输出审查意见: 代码审查摘要 — PR #4378操作: synchronize 🔴 关键1. 新增的 5 参
2. 新守卫
|
| 声称 | 状态 | 说明 |
|---|---|---|
| Fix #4358(放电器重进后不放电) | ✅ | PowerValue 持久化,根因修复 |
| Fix #4307(充电器无中生电) | 仅排除 consume==generate 边界;独立充电器+发电机自由能量环路仍在 | |
| 输电杆/远程输电杆放置时立即响应红石 | ❌ | 5 参 onPlace 为死代码;neighborChanged 为行为等价重构;placedState 仍强制 SWITCH=ON |
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
TransmissionPoleBlock.onPlace/neighborChanged |
在有信号方块旁放置杆子 → 验证 TOP 部件 SWITCH 立即为 OFF、灯不亮、电网断开 | 🔴 |
ChargerBlockEntity.tick 守卫 |
充电器 + 64~127 发电电网(精确平衡)→ 应暂停;充电器 + 小发电机 + 高频红石时钟 → 验证物品 FE 是否凭空增加 | 🔴 |
DischargerBlockEntity 持久化 |
配方放电中途退出重进 → 恢复后应继续输出 recipe.power 功率 |
🟢 |
结论: REQUEST_CHANGES — #4358 修复到位;但输电杆放置修复因 onPlace 触发时机错误而完全失效(建议改修 placedState 或 3 参 IHasMultiBlock 钩子),#4307 守卫仅覆盖精确平衡边界,需实测确认是否真正堵住复现路径。
由 Hermes Agent 审查
|
后台下载已超时退出(HTTP:000,cjsah maven 不可达),但该下载已无必要—— |
|
💾 Self-improvement review: Patched references/multipart-block-placement-order.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
|
分析完成,所有关键点已交叉验证。整理审查意见: 代码审查摘要 — PR #4378操作: synchronize 🔴 关键1. 三处交叉验证,逻辑互斥:
同时 净效果(对照 TransmissionPoleBlockEntity.tick:
即修复的核心意图(放置时立即同步 TOP 与 BOTTOM)完全落空,且无信号场景出现更严重的回归。 建议修法:删除 onPlace 中反转的 if/else(BOTTOM 状态已由 getPlacementState 正确设置),改为在 TOP 部件放置时从 BOTTOM 位置触发同步: @Override
protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) {
if (state.getValue(HALF) == Vertical3PartHalf.TOP) {
update(level.getBlockState(pos.below(2)), level, pos.below(2)); // Remote 用 below(3)
}
}2.
建议:改为
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| Fix #4307 充电器"电流相生" | ChargerBlockEntity(门控方向正确,但引入平衡点永久卡死) | |
| Fix #4358 放电器重进不放电 | Discharger/Charger 序列化(powerValue 为派生值,根因存疑,需实测) | |
| 输电杆放置时立即响应红石 | ❌ | TransmissionPoleBlock / RemoteTransmissionPoleBlock(onPlace 逻辑反转 + 时机错误,修复失效且引入新回归) |
结论: REQUEST_CHANGES — 输电杆 onPlace 的 SWITCH 反转是确定性功能错误(放置后线路状态与红石语义相反,需修正反转并调整 update() 触发时机);充电器门控的严格不等会在常见平衡配置下永久卡死,需改为 <= 或排除自身消耗。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
TransmissionPoleBlock.onPlace |
无信号/有信号两种放置场景,验证 BOTTOM/TOP 的 SWITCH 状态与电网接入 | 🔴 |
ChargerBlockEntity.tick |
电网恰好平衡(发电 == 充电档位 64/128/256/512)时充电是否卡死;配方充电路径在新门控下是否暂停 | 🔴 |
ChargerBlockEntity 序列化 |
存档→重载→放电/充电状态与 powerValue 一致性(#4358 复现验证) | 🟡 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/multipart-block-placement-order.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
|
分析完成。所有关键路径都已验证(放置顺序、电网结算、isFeCharging 生命周期)。以下为审查意见,将直接作为评论发布。 代码审查摘要 — PR #4378操作: synchronize 🔴 关键
|
| 声称 | 状态 | 说明 |
|---|---|---|
| Fix #4358 放电器重进不放电 | ✅ | PowerValue NBT 持久化 + 赋值时机提前(DischargerBlockEntity) |
| Fix #4307 切换信号无中生电 | 充电器 20 tick 迟滞有效,但 FE 分支死锁使充电器 FE 路径完全失效;迟滞可被重进绕过 | |
| 输电杆/远程输电杆放置时立即响应红石 | ✅ | 放置顺序验证通过(TOP→MID→BOTTOM,MID 触发 BOTTOM 的 neighborChanged);实现较脆弱(见 💡) |
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
ChargerBlockEntity.tick() |
FE 物品(可 receiveEnergy)完整充电流程:isFeCharging=true 后 startupCoolDown 应能归 0 并触发 receiveEnergy | 🔴 |
ChargerBlockEntity.tick() |
电网 consume == generate 边界:充电器暂停后 powerValue 申报是否导致永久卡死 |
🟡 |
ChargerBlockEntity NBT |
saveAdditional/loadAdditional 往返:PowerValue、startupCoolDown 一致性(含旧存档无新 key 的兼容) | 🟢 |
| 红石迟滞 | 通电 5 tick → 断电 → 充电应在 20 tick 后才恢复;断电后立刻重进存档应保持剩余 cooldown | 🟡 |
TransmissionPoleBlock.onPlace |
有/无红石信号时放置 3 部件杆,验证底部+顶部 SWITCH 立即为 OFF/ON | 🟢 |
结论: REQUEST_CHANGES — ChargerBlockEntity 的 FE 充电死锁(🔴)必须修复:if (isFeCharging) 分支内的 setStartupCoolDown(20) 使 FE 充电逻辑不可达,这是本 PR 引入的功能性回归,合并前需解决;盈余门槛自包含卡死问题也建议一并处理。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/multipart-block-placement-order.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched references/anvilcraft-power-grid-review.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
# Conflicts: # src/main/java/dev/dubhe/anvilcraft/block/entity/ChargerBlockEntity.java
|
我已完整分析 diff 与目标分支源码。关键逻辑均已交叉验证( 代码审查摘要 — PR #4378操作: converted_to_draft 🔴 关键1. 新代码: if (isFeCharging) {
powerValue = -(getFeChargingPowerLevel());
this.setStartupCoolDown(20); // ← 每 tick 重置
}
if (startupCoolDown > 0) {
this.startupCoolDown--; // 19
return; // ← 永远 return
}
if (timeLeft > 0 && isGridWorking() && grid.getConsume() < grid.getGenerate()) {
// FE 实际充能逻辑 —— 永远不可达
}只要
2. 两个输电杆的
结果:放置在有红石信号处时,TOP 段 SWITCH 依然是 ON(
|
| 声称 | 状态 | 说明 |
|---|---|---|
| Fix #4358(杆子不立即响应红石) | onPlace 改动方向正确但首次放置时序下无法同步 TOP 段,修复不完整 |
|
| Fix #4307 | Charger/Discharger 有针对性改动,但 FE 充能死锁(问题 1)阻断主流程 |
结论: COMMENT — PR 处于 draft 状态,按规则仅报严重问题。问题 1(FE 充能死锁)与问题 2(杆子 TOP 段不同步)建议在转 ready 前修复;问题 3–5 建议确认设计意图。核心修复思路(onPlace 强制同步、启动冷却、功率序列化)方向合理。
由 Hermes Agent 审查
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. Reply |
|
💾 Self-improvement review: Patched references/anvilcraft-power-grid-review.md in skill 'minecraft-mod-pr-review' (1 replacement). |
|
All verification complete. Here is the review: 代码审查摘要 — PR #4378操作: synchronize 🔴 关键未发现合并阻断级问题。两个 bug 修复和输电杆修复均经代码交叉验证成立(diff 已用
|
| 声称 | 状态 | 对应实现 |
|---|---|---|
| Fix #4358 放电器重进后不放电 | ✅ | DischargerBlockEntity: PowerValue 序列化 + tick 无条件重算;ChargerBlockEntity 同步修复 |
| Fix #4307 高频红石白嫖充能 | ✅ | ChargerBlockEntity: startupCoolDown(20) + 电网盈余门控 |
| 输电杆/远程输电杆放置时立即响应红石 | ✅ | 两 Block: 新增 vanilla 5 参 onPlace + 抽取 update() 方法 |
结论: COMMENT — 三个修复目标均正确实现并通过代码级验证(含放置顺序、递归守卫、存档兼容);上述警告项为行为回归与边界场景,建议修复或确认后再合入。其中"上电仍吸入物品"一项强烈建议恢复 powered 判断顺序。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
ChargerBlockEntity.tick() |
红石 1/2/20 tick 周期切换 → 高频下不充能;稳定断电 20 tick 后才开始充能 | 🔴 |
ChargerBlockEntity.tick() |
上电状态下向槽 0 放入物品 → 验证物品是否被吸入槽 1 并锁定(回归点) | 🔴 |
DischargerBlockEntity |
配方物品放电中途保存/重进 → 功率输出恢复(#4358 回归测试);FE 物品同场景 | 🔴 |
TransmissionPoleBlock/RemoteTransmissionPoleBlock |
从下往上放置在已通电导线旁 → SWITCH 立即置 OFF;拆顶部再放回 → 恢复响应 | 🟡 |
ChargerBlockEntity |
输出槽满时完成充能(卡死态)→ 电网数据无虚耗/虚发 | 🟡 |
由 Hermes Agent 审查
|
分析完成。所有关键路径已在 PR head 分支(pr4378)上交叉验证。以下是审查意见。 代码审查摘要 — PR #4378操作: ready_for_review 📋 声称验证表
🔴 关键(需修复后合并)1. ChargerBlockEntity — 输出槽满时永久卡死(本次重构引入的回归) 新 tick 中 触发路径:物品完成瞬间输出槽(slot 2)已满 → 建议: 仅在
|
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
ChargerBlockEntity.tick() |
输出槽满时完成加工 → 清空输出后应自动恢复(当前会卡死) | 🔴 |
ChargerBlockEntity.tick() |
powered 锁定状态下放入输入物品,解锁后行为验证 | 🟡 |
ChargerBlockEntity.tick() |
电网过载 → 恢复供电 → 充电暂停/恢复 + cooldown 时序 | 🟡 |
ChargerBlockEntity.save/load |
StartupCoolDown/PowerValue 存档往返 | 🟢 |
TransmissionPoleBlock |
已激活红石旁放置两种输电杆,验证 BOTTOM+TOP SWITCH 立即同步 | 🟢 |
结论: REQUEST_CHANGES — 三个 fix 的核心机制均验证成立,但 Charger 的 startupCooldown 重构引入输出槽满时的永久卡死回归,需修复后合并。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched references/anvilcraft-power-grid-review.md in skill 'minecraft-mod-pr-review' (1 replacement). |
|
💾 Self-improvement review: Patched references/anvilcraft-power-grid-review.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
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. Reply |
|
分析完成。我已经完整验证了放置顺序(枚举 TOP 优先 → setPlacedBy 先放 TOP 再放 MID → MID 放置触发底部 neighborChanged → update() 在顶部存在后执行)、电网逻辑( 代码审查摘要 — PR #4378操作: synchronize 📋 声称验证表
🔴 关键
|
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
| 输电杆放置响应 | 已通电红石线旁放置 3/4 段杆 → 顶部件 SWITCH 应立即为 OFF 且从电网断开;无信号时放杆 → ON | 🔴 |
| Charger 红石控制 | 高频时钟(5 tick 周期)对充电器 → 物品不应被充能;断电后应延迟 20 tick 才恢复 | 🔴 |
| 充电器禁用状态 | powered 期间向输入槽投物品 → 确认物品是否被吞入处理槽(回归验证) | 🟡 |
| 序列化 | 配方充/放电进行中存档→重启→功率应保持(#4358/#4307 回归) | 🔴 |
| 电网闸门 | 发电 < 64 电网上的 FE 充电器 → 确认静默停摆行为是否符合预期 | 🟡 |
结论: COMMENT — 三个声称的修复方向均正确且核心机制有效(#4358 持久化、#4307 冷却、输电杆放置时序链路),无编译/数据丢失风险。建议合并前处理:充电器 powered 时吞入物品的回归(确认意图或修复),以及删除/修正冗余的 consume <= generate 闸门。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/multipart-block-placement-order.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched references/anvilcraft-power-grid-review.md in skill 'minecraft-mod-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-mod-pr-review' (1 replacement). |
|
分析完成,所有关键链路已通过目标分支源码验证。整理审查结论: 代码审查摘要 — PR #4378(Draft)操作: converted_to_draft 🔴 关键问题1. if (timeLeft == 0) {
moveItemToTransformingSlot();
this.setStartupCoolDown(20); // ← 每次 timeLeft==0 都重新武装 20
}
...
if (startupCoolDown > 0) {
this.startupCoolDown--;
return; // ← timeLeft==0 时必然在此 return
}
...
if (timeLeft == 0) {
moveItemToTransformedOverSlot(); // ← 永远执行不到
}只要
旧代码
|
| 声称 | 状态 | 说明 |
|---|---|---|
| Fix #4358(放电器重载不输出) | ✅ | PowerValue 持久化 + 移出 timeLeft 守卫 |
| Fix #4307(高频红石无中生电) | ✅ | startupCoolDown 20 tick 稳定期,持久化防重载绕过 |
| 输电杆/远程输电杆放置立即响应红石 | ✅ | update() 无条件双向对齐 + onPlace(放置顺序已验证 TOP→MID→BOTTOM) |
结论: COMMENT(Draft 阶段) — 三个修复目标方向全部正确,但 #1 的死锁(输出槽占用后永久卡死)是必须修复的硬伤,建议修复后再转 Ready。draft 阶段先不阻塞,等逻辑修正后可再看一轮。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/anvilcraft-power-grid-review.md in skill 'minecraft-mod-pr-review' (1 replacement). |
Fix #4358
Fix #4307
Fix TransmissionPoleBlock and RemoteTransmissionPoleBlock don't immediately respond to redstone signals
修复输电杆和远程输电杆放置时不立即响应红石信号