Add client config to swap fluid port bucket pour/store mouse actions, fix tooltips, and added four processing table to denylist 增加流体端口桶操作左右键翻转功能,修正tooltip换行,把四个加工台放入精确拾取黑名单 - #4940
Conversation
- 新增客户端配置项 invertFluidPortBucketAction,控制流体端口桶操作左右键功能互换 - 客户端事件监听同步该配置至服务端,确保服务端知道当前玩家的翻转状态 - 修改存储界面逻辑,根据配置动态判断左键或右键执行倒液或存桶操作 - 服务端根据客户端翻转状态及按键决定执行倒液或存桶行为,保证逻辑一致性 - 重构多处 RPC 调用,新增按键参数传递,实现客户端按键行为正确同步服务端 - 玩家退出时清理其翻转状态,避免内存泄漏 - 更新多语言资源文件,添加流体端口桶操作翻转相关提示文字
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 #4940操作: 🔴 关键无(未发现编译错误、调用点遗漏或未翻转路径的行为回归;非翻转路径已逐点验证等价,见下)。
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
新增客户端配置 invertFluidPortBucketAction |
✅ | AnvilCraftClientConfig.java:44 + 生成 lang 两 key |
| 客户端事件监听同步配置至服务端 | ✅ | InvertedActionEventListener.java:33-38、StorageClientStub.updateInvertedBucketAction |
| 存储界面按配置动态判断左右键倒液/存桶 | ✅ | StorageScreen.bucketActionButton()、mouseClicked:1902-1912 |
| 服务端按翻转状态及按键决定行为 | ✅ | StorageServerStub.shouldPourFluid:191 + 6 处调用 |
| 重构多处 RPC 新增按键参数 | ✅ | quickMoveToStorage/moveSameToStorage/deposit(boolean pour → int button) |
| 玩家退出时清理翻转状态 | ✅ | PlayerEventListener.java:72 |
| 客户端/服务端键位裁决一致性 | 逻辑一致,但存在同步漏发窗口(见警告 2) |
结论: REQUEST_CHANGES — 功能与非翻转路径的实现质量都不错,但警告 1(身份校验缺失)与警告 2(重连后静默失效、且表现为「做相反的事」)建议修掉后再合并。
标题建议(本次 gh 未认证 —— gh auth status 显示 token invalid,故未自动修改):
Add client option to invert fluid port bucket left/right-click actions 新增客户端配置项以翻转流体端口桶操作左右键
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
StorageServerStub.shouldPourFluid / interact |
翻转 × 左/右键 × 背包格/物品格/流体格组合矩阵,断言倒液/存桶分支与数量语义 | 🔴 |
InvertedActionEventListener.onClientTick |
断线重连后仍能重新上报(回归本次发现的漏发窗口) | 🔴 |
updateInvertedBucketAction |
伪造他人 UUID 的调用应被拒绝 | 🟡 |
quickMoveToStorage(button) |
断言拖拽路径 button 恒为 0(若保留该参数) | 🟢 |
由 Hermes Agent 审查
- 引入TooltipUtil.addTranslatedLines方法,支持含换行的翻译文本拆行显示 - 将EquipmentArmorItem中tooltip文本替换为调用TooltipUtil的统一多行添加方法 - 修改model_selection_denylist.json,新增多种工作台模型禁止清单 - 优化翻译文本在tooltip中的颜色和格式处理,保证换行效果正常显示
|
审查完成。以下是完整结论(webhook 会自动投递到 PR 评论区)。 代码审查摘要 — PR #4940操作: 📋 提交构成(重要)
第 2 个 commit 完全不在 PR 标题/描述范围内,而下面最严重的问题恰好出在它里面。 🔴 关键(必须修复)1. "anvilcraft:pink_cement_cauldron",
"anvilcraft:stamping_table", // ← 该方块不存在
blocks.add(BuiltInRegistries.BLOCK.getOptional(id)
.orElseThrow(() -> new IllegalArgumentException("Unknown block in model selection denylist: " + id)));
2. 建议拆分 PR:把 commit 2(tooltip 重构 + denylist)拆成独立 PR。它属于另一主题(且与已合并的 #4937「优化提示文本格式和内容」同一片区域,容易产生混淆/冲突),现在被塞进一个"流体端口桶翻转"PR,评审与回滚粒度都被破坏了。
|
| PR 描述声称 | 状态 | 对应实现 |
|---|---|---|
新增客户端配置项 invertFluidPortBucketAction |
✅ | AnvilCraftClientConfig.java:42-44 + en_us/en_ud |
| 客户端事件监听同步配置至服务端 | InvertedActionEventListener.java:33-38(仅变化时上报,见警告 3) |
|
| 存储界面按配置动态判断左/右键倒液或存桶 | ✅ | StorageScreen.java:1896-1918, 2456-2464 |
| 服务端按翻转状态+按键决定行为 | ✅ | StorageServerStub.shouldPourFluid:191 + 6 处调用点 |
| 重构 RPC 新增按键参数传递 | ✅ | StorageClientStub 4 个方法 ↔ 服务端签名一致 |
| 玩家退出时清理翻转状态 | ✅ | PlayerEventListener.java:72 → StorageServerStub.java:177-179 |
| 更新多语言资源与提示文字 | en_us/en_ud ✅;zh_cn 缺失(见警告 5) | |
| (未声称)tooltip 重构 + denylist 改 ID | ❌ | commit 2,含关键 bug 1,且超出 PR 范围 |
🧪 测试建议
| 被测目标 | 推荐场景 | 优先级 |
|---|---|---|
ModelSelectionDenylist.reload() |
名单含未知 ID 时应保留其余条目(或让 CI/单测校验所有 ID 可解析),当前是整文件失效 | 🔴 |
shouldPourFluid × 4 入口(interact/quickMoveToStorage/moveSameToStorage/deposit) |
翻转 on/off × 左/右键 2×2 全矩阵,断言"倒液 vs 存物品"结果 | 🔴 |
| 客户端同步链路 | 开配置 → 退世界 → 重进,断言服务端仍按翻转处理(当前失败) | 🟡 |
| 配置项 lang | 断言每个 AnvilCraftClientConfig 字段在 en_us 与 zh_cn 都有键(防止再漏) |
🟡 |
结论: REQUEST_CHANGES — 主体功能(翻转逻辑、RPC 按键传递、默认行为等价性、en_ud 生成)实现质量很好,但同 PR 内 commit 2 引入的 stamping_table 无效 ID 会让整份 model_selection_denylist 失效(关键,必须修);另建议修掉跨世界同步失效与无 validator 两点,并补齐 zh_cn、把 commit 2 拆出去。
关于 PR 标题:gh auth status 显示 token 无效(The token in /opt/data/home/.config/gh/hosts.yml is invalid),按流程不导出凭据、未自动修改标题。当前标题格式合规但英文表述略含糊,建议改为:
Add client config to swap fluid port bucket pour/store mouse actions 增加流体端口桶操作左右键翻转功能
(若采纳 commit 2 拆分,则本 PR 标题即可按上面这条定稿。)
由 Hermes Agent 审查
- 将拒绝列表中的 "stamping_table" 更正为 "stamping_platform" - 修复模型匹配错误,避免加载错误模型 - 保持模型资源的一致性和正确性
|
💾 Self-improvement review: Patched SKILL.md in skill 'cube-selection-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-lang-pipeline-review' (1 replacement). · Patched SKILL.md in skill 'network-packet-pr-review' (1 replacement). |
代码审查摘要 — PR #4940操作: edited(head 刚更新到 PR 实际包含两个 commit:
✅ 默认配置下的行为等价性(逐路径核对,全部通过)
🔴 关键1. 重新登录后客户端/服务端翻转状态失步( 客户端只在「配置值发生变化」时上报( 复现:
这正是 建议修(任一):
|
| PR 描述声称 | 状态 | 对应实现 |
|---|---|---|
新增客户端配置 invertFluidPortBucketAction |
✅ | AnvilCraftClientConfig.java:44 + en_us/en_ud |
| 客户端事件监听同步配置至服务端 | InvertedActionEventListener.java:33-38(重登录失步,见 🔴1) |
|
| 界面按配置动态判断左右键 | ✅ | StorageScreen.java:1900-1910, 2456-2458 |
| 服务端按翻转状态+按键决定倒液/存桶 | ✅ | shouldPourFluid 用于 interact:325,359、quickMoveToStorage:515、moveSameToStorage:554、deposit |
| 重构多处 RPC 新增按键参数 | ✅ | StorageClientStub 4 个方法 + 服务端签名同步 |
| 玩家退出时清理翻转状态 | ✅ | PlayerEventListener.java:72 |
| (未声称)装备 tooltip 重构 + denylist 新增 | 6b95997a58,超出范围且描述未提,见 |
|
| (未声称)zh_cn 翻译 | ❌ | 两个新键缺失,见 |
🧪 测试建议
| 被测目标 | 推荐场景 | 优先级 |
|---|---|---|
StorageServerStub.shouldPourFluid |
{button 0,1} × {inverted true,false} 四组矩阵断言 |
🔴 |
interact / deposit / moveSameToStorage / quickMoveToStorage |
默认配置下与改动前逐一等价(用 pour 参数化断言,锁住向后兼容) |
🔴 |
| 状态同步(集成) | 开启配置 → 进世界 → 登出 → 重进 → 断言服务端翻转状态仍为 true(本 PR 的回归点) | 🔴 |
TooltipUtil.addTranslatedLines |
含 \n 的键拆成多行、缺键回退为键名、带 %s 参数替换 |
🟡 |
EquipmentArmorItem.appendHoverText |
四类装备 × weatherproof 的 tooltip 行数与颜色 | 🟡 |
结论: REQUEST_CHANGES — 核心设计(把倒液/存桶的判定下沉到服务端、默认配置零回归)是站得住的,takeFluidBucket 与流体格守卫处理得很细;但 🔴1 的重登录失步会造成「想存桶却被倒液」的实际错配,建议连同
gh 未认证(The token ... is invalid),故未修改 PR 标题;标题本身准确描述了功能,无需改动 —— 需要处理的是「把无关 commit 拆出去」而非改标题。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/client-config-state-sync-review.md in skill 'network-packet-pr-review' (1 replacement). · Patched references/pr-class-routing.md in skill 'github-webhook-pr-review' (1 replacement). · Patched SKILL.md in skill 'network-packet-pr-review' (1 replacement). |
|
Diff re-verified (md5 stable, IDs cross-checked by grep) — all findings confirmed against the target branch source. Here is the review. 代码审查摘要 — PR #4940操作: edited(标题/描述变更,按 synchronize 级完整审查) 核心改动理解: 流体端口桶操作(倒液 ↔ 存桶)原本硬编码在左键(
|
| 场景 | 默认 | 开翻转 |
|---|---|---|
| 存桶键(流体格上把满桶当物品存入) | 右键,存 1 个 | 左键,存 整叠 |
| 倒液键倒不进去时的回退存入 | 左键,存 整叠 | 右键,存 1 个 |
也就是说「翻转」不只是换键,还把两键的整叠/单个分配一起换掉了(对同一动作而言并非纯交换)。注释“也不改变各键的数量语义”按物理键读是对的,但用户看到的配置描述是 swap them。请确认是否有意为之;若只想换键,amount 应改为按 pour(动作)取值,或在注释/描述里写明数量也随键对调。
💡 建议
3. StorageScreen.mouseClicked() — 守卫条件与注释不符
注释写「手持流体桶时才可能涉及倒液还是存桶」,代码却是 this.carried.isEmpty() ? 0 : bucketActionButton()——手持空桶(或任意物品)也会切到翻转键。开翻转后,手持空桶左键点流体格会走进物品分支,把空桶当物品存进仓储(默认不翻转时左键是「装一桶」)。建议守卫改为「手持能容纳该流体的容器」判定,或明确写入手册。
4. 新增的 button 管线实际恒为 0
quickMoveButton 只在 else if (this.carried.isEmpty()) 分支赋值,而 if (button == 1) 在前短路(Shift+右键走 interact(..., QUICK_MOVE_TO_STORAGE)),外层又限定 button == 0 || button == 1,所以 button 恒为 0。quickMoveToStorage 的第三个参数、以及 deposit(..., 0|1)、moveSameToStorage(target, 0) 里的魔数都属于多余的显式传参,建议改用具名常量(如 MOUSE_LEFT/MOUSE_RIGHT)以对齐语义;若本意是将来支持右键拖拽,建议在注释里写明当前不可达。
5. TooltipUtil.addTranslatedLines() — 请说明与语言文件现状的关系
装备 tooltip 确实含 \n(breathing/buffer_boots/pockets/recharge),"修正换行" 的说法有依据。但两点想确认:
- 新实现用
Component.literal(line)取代了可翻译组件,丢掉了翻译组件身份与参数样式(本例参数是 int,暂时无影响),后续若有带样式/事件的参数会静默降级; - 语言文件里仍有约 70 条含
\n的 tooltip 键走原路径(如tooltip.anvilcraft.item.stamping_platform.shift、tooltip.anvilcraft.item.amulet_box.shift)。若「换行会失效」的判断成立,这些同样受影响,本 PR 只是局部修复;若原版本就会处理\n,则此处属等价重构,建议在描述里说明原因以省去后续疑惑。
6. updateInvertedBucketAction 缺少 validator,静态表以客户端上报的 UUID 为键
BundleLikeServerStub.updateInverted 同样如此(属既有先例),但该表无界、只在退出时清理,未校验的客户端可写入任意 UUID 使静态表增长。建议加一个轻量 validator,或直接以连接对应的玩家为准而非信任报文里的 UUID。
🟢 看起来不错
- 默认(不翻转)路径行为等价:
shouldPourFluid(id, 0) == (button == 0)与旧逻辑逐点核对一致;deposit/moveSameToStorage/quickMoveToStorage/interact的默认分支均与 base 一致;takeFluidBucket去掉button参数、改传carried.getCount()也等价(旧代码只有 0 键能进该方法,amount恒为整叠)。 StorageInput.FLUID_BUCKET的validButtons == null→ 接受任意键,翻转后的右键不会撞isValid(button)校验 ✅- 状态清理与登录期安全:
PlayerEventListener.loggedOut清理 ✅;新 RPC 只写静态表、不做玩家实体查找,登录早期到达也不会 NPE ✅ - 四个加工台的精确拾取黑名单 ID 全部存在:
stamping_platform(不是stamping_table)、crushing_table、sifting_table、unpacking_table,与block.anvilcraft.*语言键一致。⚠️ 这点尤其重要:ModelSelectionDenylist.readBlocks()对未知 ID 是BuiltInRegistries.BLOCK.getOptional(id).orElseThrow(...),异常被reload()的catch (IOException | RuntimeException)吞掉后rules会退回EMPTY——即一个错 ID 会让整份 denylist(含所有炼药锅、管道、红石线等)静默失效。本 PR 的 ID 是对的,但建议给该加载器加一个单测/启动断言,避免以后手滑。 - lang 一致性:
en_us/en_ud各新增 2 个键、字符数完全相等(1:1 翻转+反转变换)、无其它键被修改;@Comment拼接结果与生成的.tooltip值逐字一致 ✅ EquipmentArmorItem的@Getter取代手写isWeatherproof()签名不变,调用方无需改动 ✅- 没有其它调用方受影响:
StorageClientStub.deposit/moveSameToStorage/quickMoveToStorage全仓库仅StorageScreen调用(StoragePortHammerGestureListener、TerminalKeyMappingEventListener、StorageMenu、StorageTerminalClientStub均无调用),RPC 签名变更范围可控 ✅
📋 声称验证表
| 声称 | 状态 | 证据 |
|---|---|---|
新增客户端配置 invertFluidPortBucketAction |
✅ | AnvilCraftClientConfig + 两个生成 lang(键名/注释一致) |
| 流体端口桶操作左右键互换 | ✅ / |
shouldPourFluid + 客户端上报;默认路径等价,但重连后不再上报(问题 1) |
| 修正 tooltip 换行问题 | ✅ | 4 条装备 tooltip 确含 \n;addTranslatedLines 逐行拆分(见建议 5) |
| 给四个加工台添加精确拾取黑名单 | ✅ | 4 个 ID 均存在于 ModBlocks,且写入 disable_precise_picking 数组 |
结论: COMMENT — 主逻辑(默认路径等价、翻转语义、lang/黑名单数据)核对无误,可合并;但建议合并前修掉问题 1(重连丢配置会导致客户端与服务端键位对调),问题 2/3 请确认是否有意为之。PR 描述只提了配置项,建议补一句「顺带修正装备 tooltip 换行 + 加工台精确拾取黑名单」,方便回查。
关于 PR 标题: gh auth status 显示 token 失效(The token in .../hosts.yml is invalid),按约定不导出凭据、未自动改标题。现标题「Add client config to swap fluid port bucket pour/store mouse actions 增加流体端口桶操作左右键翻转功能」中英双语且准确,可保留。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
StorageServerStub.shouldPourFluid |
未上报(map 无记录)/ 上报 true / 上报 false × button 0、1、非法值(如 2) | 🔴 |
| 重连一致性 | 开翻转 → 进世界 → 退出 → 再进世界,验证键位仍与配置一致(当前会失败) | 🔴 |
interact × deposit × moveSameToStorage × quickMoveToStorage |
button×配置 2×2 组合矩阵:满桶/空桶/空手 × 流体格/物品格/背包格 | 🟡 |
ModelSelectionDenylist.reload |
未知 ID / 非 anvilcraft 命名空间 / 缺字段时是否整份丢弃(建议断言而非仅 warn) | 🟡 |
TooltipUtil.addTranslatedLines |
单行 / 多行 / 带 %s 参数 / 翻译键缺失 |
🟢 |
由 Hermes Agent 审查
Reason: Security scan — [CRITICAL] Mass file deletion in a short window: 5 non-build files were deleted within 20s. A burst of deletions can be destructive (ransomware-like or an accidental recursive wipe). Reply |
代码审查摘要 — PR #4940操作: edited
📋 声称验证表
🔴 关键
|
| 被测目标 | 推荐场景 | 优先级 |
|---|---|---|
shouldPourFluid |
未上报 / 上报 false / 上报 true × button 0/1 四种组合 | 🔴 |
interact(流体格, 存桶键) |
翻转开启时流体格 PICKUP 分支不得倒液(FLUID_SLOT_BASE 守卫回归测试) |
🔴 |
takeFluidBucket |
翻转后(button=1)倒液仍为整叠,不退回 1 个 | 🟡 |
TooltipUtil.addTranslatedLines |
含 \n、无 \n、带 %s 参数、含空行 |
🟡 |
ModelSelectionDenylist.readBlocks |
未知方块 ID 时应整体失败(记录当前语义)而非静默半残 | 🟡 |
StorageServerStub#clearInvertedBucketAction |
玩家退出后表内条目被移除 | 🟢 |
结论: COMMENT — 功能实现正确、两端判定自洽,无阻塞问题。建议至少处理 ⚠️ 1(补 tooltip 说明或改数量语义)与 ⚠️ 3(补身份校验),其余为可选改进。
标题建议(未自动修改)
gh auth status 显示 /opt/data/home/.config/gh/hosts.yml 中 token 已失效(未按约定导出凭据),因此未自动执行 gh pr edit。当前标题语法略有瑕疵("added four processing table to denylist"),建议改为:
Add fluid port bucket action inversion config, fix armor tooltip line breaks, and add four processing tables to the denylist 新增流体端口桶操作翻转配置,修正护甲 tooltip 换行,并将四个加工台加入精确拾取黑名单
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'client-server-side-separation-review' (1 replacement). · Patched SKILL.md in skill 'pr-fix-claim-verification' (1 replacement). |
|
💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-lang-pipeline-review' (1 replacement). · Patched SKILL.md in skill 'pr-diff-scope-reconciliation' (1 replacement). |
代码审查摘要 — PR #4940操作: synchronize ✅ 关键结论(已逐项核实)1. 默认行为完全向后兼容 —— 三处"硬编码键位"改写均等价
2. 最容易踩的坑已排除 —— 3. 键位矩阵客户端/服务端自洽
4. 黑名单(重点核对) 5. 生成资源一致性
|
| 场景 | 期望 |
|---|---|
| 默认 · 流体格 手持桶 左键 / 右键 | 倒液整叠 / 桶作为物品入库 |
| 默认 · 流体格 空手 左键 | 装出一桶 |
| 翻转 · 流体格 手持桶 右键 / 左键 | 倒液整叠 / 桶作为物品入库 |
| 翻转 · 流体格 空手 | 键位不变(左键装桶,右键无动作) |
| 翻转 · ALT 点击 / Shift+右键 / 存入按钮左右键 | 倒液键=右键,另一键存桶 |
| 翻转 · 退出重进世界 |
🟢 看起来不错
- "倒液还是存桶"的判定统一收敛到
shouldPourFluid,客户端注释与服务端 javadoc 互相引用,从设计上封住了"界面走存桶、服务端按倒液处理"的错配 —— 方向正确。 - 流体格分支显式用
slot < FLUID_SLOT_BASE守卫,避免翻转把"存入"又变回倒液。 INVERTED_BUCKET_ACTION静态表在PlayerEventListener.loggedOut有清理,未引入静态 UUID 表泄漏。- 生成语言文件与 datagen 产物一致,en_ud 反向映射零误差。
- 无调试残留、无 TODO/FIXME、无硬编码凭据。
📋 声称验证表
| 声称 | 状态 | 证据 |
|---|---|---|
新增客户端配置 invertFluidPortBucketAction 控制流体端口桶操作左右键互换 |
✅ | AnvilCraftClientConfig + 字段;en_us/en_ud + 2 键(与 @Comment 逐字符一致);StorageScreen.bucketActionButton() ↔ StorageServerStub.shouldPourFluid() 同一判据;默认值 false 与旧行为等价 |
| 修正了 tooltip 换行问题 | TooltipUtil.addTranslatedLines 新增,EquipmentArmorItem 6 处改用;tooltip.anvilcraft.equipment.* 4 个含 \n 键全覆盖;其余含 \n 的 item tooltip 原本已由 ItemTooltipManager 拆行。建议合并两套实现(建议 1);screen.* 多行文本未处理(建议 5) |
|
| 把四个加工台放入精确拾取黑名单 | ✅ | 仅 disable_precise_picking +4 条;4 个 id 与 ModBlocks 注册逐一核对存在(否则整份名单会被 readBlocks 抛异常丢弃);disable_model_outline/disable_ber_selection 未被误动 |
结论: COMMENT —— 主体实现正确、默认行为向后兼容、生成资源与黑名单均已交叉核对无误;建议先处理 W1(重连重发,改动很小)或至少注释为已知限制,并按需采纳 W2 / 建议 1、3、4。
PR 标题建议(未自动修改):
gh auth status显示 token 失效(HTTP 401: Bad credentials),故未执行gh pr edit。当前标题 "…and added four processing table to denylist" 语法有误(应为 tables / add),建议改为:
"Add client config to invert fluid port bucket actions, fix tooltip line wrapping, and denylist four processing tables 新增流体端口桶操作左右键翻转配置、修正 tooltip 换行、四个加工台加入精确拾取黑名单"
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'cube-selection-pr-review' (1 replacement). · Patched SKILL.md in skill 'minecraft-lang-pipeline-review' (1 replacement). · Patched SKILL.md in skill 'menu-widget-interaction-pr-review' (1 replacement). |
- 在模型选择拒绝列表中添加了 fish_tank 模型 - 确保 unpacking_table 项目后有正确的逗号分隔符 - 维护 JSON 格式的正确性与一致性
代码审查摘要 — PR #4940操作: synchronize(Reopen/新提交,分支 ✅ 已核对通过的点(先说结论)
🔴 关键1. 变更检测用的是客户端静态字段,服务端状态却在退出时被清掉,两者生命周期不一致:
复现路径:开启 建议修法(改动很小):在客户端 @SubscribeEvent
public static void onLogout(ClientPlayerNetworkEvent.LoggingOut event) {
// 配置为 true 时,下一 tick 会因不等而重新上报;为 false 时服务端默认值本就一致
InvertedActionEventListener.lastInverted = false;
InvertedActionEventListener.lastBucketInverted = false;
}注:既有的
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
新增客户端配置项 invertFluidPortBucketAction,控制流体端口桶操作左右键互换 |
✅ | AnvilCraftClientConfig:42、AnvilCraftClient、InvertedActionEventListener、StorageScreen、StorageClientStub、StorageServerStub(缺 zh_cn 译文,见 |
| 修正了 tooltip 的换行问题 | ✅ | TooltipUtil.addTranslatedLines、EquipmentArmorItem(另含移除手写 getter 改 @Getter 的小重构) |
| 给四个加工台添加精确拾取黑名单 | model_selection_denylist.json:4 个加工台 ✅,但多出一条重复的 fish_tank(见 |
|
| (标题未提及的伴随改动) | ✅ | PlayerEventListener 退出清理、StorageServerStub 倒液整叠修复、denylist 语义守卫 |
结论: REQUEST_CHANGES — 主体设计正确、迁移完整、注释质量高,是一份干净的 PR;但 🔴1 会让新功能在「重连后」静默失效并与界面相反,属功能性缺陷,建议按上面的 LoggingOut 复位方案修掉;
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
InvertedActionEventListener.onClientTick + StorageServerStub.shouldPourFluid |
开启配置 → 上报 → 模拟 LoggingOut(服务端清表)→ 重新进入,断言客户端会重发且服务端 shouldPourFluid(0) 仍为 false |
🔴 |
TooltipUtil.addTranslatedLines |
含 \n / 不含 \n / 多条连续 \n / 带 %s 参数的键,断言行数与顺序、且不丢参数渲染 |
🟡 |
ModelSelectionDenylist.reload |
对 model_selection_denylist.json 全量断言「无重复项」且每个 ID 可解析为已注册方块(现有实现会在未知 ID 时抛异常,重复项则静默) |
🟡 |
StorageServerStub.interact(FLUID_BUCKET) |
翻转开启下 button=1 时仍应 isValid 通过并整叠倒入(回归 account 由 button 取值的旧逻辑) |
🟡 |
由 Hermes Agent 审查
📌 PR 标题未自动修改:gh auth status 显示 The token in /opt/data/home/.config/gh/hosts.yml is invalid(Active account: Gugle2308),按流程不导出 GITHUB_TOKEN,故跳过自动改标题。建议标题(当前标题语法有误 four processing table,并且缺中文):
Add client config to swap fluid port bucket pour/store mouse actions, fix tooltips, and add four processing tables to denylist 增加流体端口桶操作左右键翻转配置,修正 tooltip 换行,把四个加工台加入精确拾取黑名单
|
💾 Self-improvement review: Patched references/client-config-state-sync-review.md in skill 'network-packet-pr-review' (1 replacement). · Patched references/pr-class-routing.md in skill 'github-webhook-pr-review' (1 replacement). · Patched SKILL.md in skill 'network-packet-pr-review' (1 replacement). |
- 移除模型选择黑名单中多余的 "fish_tank" 条目 - 保持 "unpacking_table" 条目在黑名单中不变
代码审查摘要 — PR #4940操作: synchronize 📋 声称验证表
🔴 关键问题1. 翻转状态的服务端快照在「重登后」失效 → 同一功能两条路径行为不一致
修复建议(任选):① 在登录/进入世界时复位快照并重发( 2.
@RemoteCallable // ← 其余 49 处均为 @RemoteCallable(validator = …)
public static void updateInvertedBucketAction(UUID playerId, boolean inverted) {
StorageServerStub.INVERTED_BUCKET_ACTION.put(playerId, inverted);
}
|
| 场景 | 期望 |
|---|---|
| 开启配置 → 进世界 → 退存档 → 重进,Alt+点击/Shift+点击/存入按钮 | 倒液键仍为右键(当前会退回左键 → 本条会失败) |
| 开启配置,流体格空手左键 / 右键 | 左键装出,右键不动作(键位固定) |
| 开启配置,流体格持桶左键 / 右键 | 左键存桶(整叠),右键倒液(整叠) |
| 默认配置,流体格持桶左键 / 右键 | 左键倒液,右键存 1 个桶 |
| 多客户端同服,各自不同配置 | 互不影响 |
结论: REQUEST_CHANGES — 建议先修 #1(重登后配置失效且两条路径行为不一致,会影响所有开启该选项的玩家)与 #2(validator 缺失),#3 视 zh_cn 流程决定;其余为可选优化。
建议标题(本次 gh 未认证,未自动修改):
Add client config to swap fluid port bucket pour/store actions, fix multiline item tooltips, and add four processing tables to the precise-picking denylist 增加流体端口桶操作左右键翻转、修正 tooltip 换行、四个加工台加入精确拾取黑名单
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/pr-class-routing.md in skill 'github-webhook-pr-review' (1 replacement). · Patched SKILL.md in skill 'network-packet-pr-review' (1 replacement). · Patched references/mc-bytecode-semantics-probe.md in skill 'github-webhook-pr-review' (1 replacement). |
- 将 TooltipUtil.addTranslatedLines 替换为返回列表后批量添加,简化代码结构 - TooltipUtil.translatedLines 方法改为返回拆分并着色的文本列表 - ItemTooltipManager 内添加翻译文本方法改为用 TooltipUtil 返回的列表插入 - InvertedActionEventListener 监听客户端连接变化,确保状态更新准确 - 解决不同连接之间配置状态未正确重置的问题 - 移除不再使用的 I18n 导入,改用 TooltipUtil 处理国际化文本
Reason: script execution via -e/-c flag Reply |
|
审查完成。以下是直接输出到 PR 评论区的审查意见(未执行任何 代码审查摘要 — PR #4940操作: synchronize | 审查基准: head 三个主题:① 客户端配置 🔴 关键
📋 声称验证表
|
| 被测目标 | 推荐场景 | 优先级 |
|---|---|---|
shouldPourFluid × deposit/moveSameToStorage/quickMoveToStorage/interact |
配置 false/true × 左/右键 × 手持流体桶/空桶/空手,断言「倒液 ↔ 存桶」与默认配置逐条等价 | 🔴 |
InvertedActionEventListener#onClientTick |
配置 true → 进世界 → 退出 → 重进同一世界,断言服务端仍收到 true(哨兵复位) | 🔴 |
ModelSelectionDenylist.reload |
注入 1 个非法 id,断言整份名单退化为 EMPTY(回归守卫,防止未来 id 错名静默失效) | 🟡 |
TooltipUtil.translatedLines |
含 \n 的多行键、含 %s 参数键(pockets 12/6)、缺失键(回退为键名) |
🟡 |
StorageScreen 流体格键位 |
翻转为 true 时:手持流体桶右键=倒液、左键=存桶;空手左键=装出一桶、右键无操作 | 🟡 |
由 Hermes Agent 审查 · 基准 head 7f3b41210e
|
💾 Self-improvement review: Patched SKILL.md in skill 'cube-selection-pr-review' (1 replacement). · Patched SKILL.md in skill 'client-server-side-separation-review' (1 replacement). · Patched references/client-config-server-sync-review.md in skill 'client-server-side-separation-review' (1 replacement). · Patched scripts/check_model_selection_blacklist_coverage.py in skill 'cube-selection-pr-review' (1 replacement). |
|
PR #4940 状态为 closed,按 webhook 审查规则(closed/labeled → 停止),本次不进行审查、不输出审查意见。 |
Uh oh!
There was an error while loading. Please reload this page.