Fixed the sliding gesture for the storage system, and rebuilt the JEI item transfer logic. 修复了存储系统的滑动操作,重构了JEI物品转移逻辑 - #4680
Conversation
- 新增快速从存储区移动物品到背包的RPC调用及处理逻辑 - 添加快速移动撤销接口,实现物品移动的回退功能 - 在客户端存储界面支持通过Shift+拖拽物品触发快速移动 - 记录快速移动过程中每个槽位物品移动数量,便于撤销操作 - 优化快速移动队列处理,区分存储区槽位和背包槽位 - 增加快速移动完成后撤销的调用,保证操作的一致性 - 扩展合成物品取出接口,支持Shift键快速放置产物 - 调整存储服务端合成逻辑,处理带Shift状态的取物请求 - 修正合成结果放置顺序,增强用户交互体验
- 修改物品转移函数以累积移动数量,支持超过单个堆叠限制的转移 - 合并背包和存储提取逻辑,避免重复判断和不必要的返回 - 修正空槽时从背包提取所有同种物品,尊重最大数量限制 - 确保存储提取时按剩余空间和数量动态减少提取量 - 删除冗余的复制和增长代码,简化ItemStack对象操作 - 增强代码可读性和逻辑连贯性,防止错误提前返回
- 修正Gunpowder Block拼写错误,统一为GUNPOWDER_BLOCK - 更新相关标签、物品标签及工具提示中gunpowder_block的命名 - 修正数据生成器中gunpowderBlock配方方法名称 - 在StorageClientStub和StorageServerStub中支持多槽物品按份数精准转移 - 集成JEI配方分配算法,计算各合成槽所需物品数量 - 细化服务端材料转移流程,支持按请求数量精确提取材料 - 添加材料不足时的回滚机制,保证多槽分配一致性和物品均分 - 新增虚拟槽支持,提高配方转移兼容性及准确度 - 提升JEI转移时的缺料检测与用户反馈能力
- 调整import语句顺序使其更规范 - 删除transfer失败处理后的多余空行 - 保持代码格式整洁,提高可读性
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 |
- 合并玩家背包与当前存储站内同类物品数量计算,包含切石机输入与合成九宫格 - 新增 addAvailable 方法,将超出单槽上限的物品拆分为多个虚拟槽,确保正确分配数量 - StorageScreen 新增获取当前合成数据接口 getCrafting - StorageServerStub 实现清空合成格功能,物品先回背包,背包满时回存储站 - 优化还原物品到背包逻辑,返回未放入的剩余数量 - JEI 配方输入转移时先清空合成格,保证材料正确更新和填充
- 用@Getter注解替代手动编写的getCrafting方法 - 添加字段crafting的注释说明合成数据的组成部分 - 保持代码结构整洁,提高代码可维护性
Reason: script execution via -e/-c flag Reply |
|
gh token 无效——不能修改标题(避免失败),且无需修改(标题已较准确)。直接输出审查。 代码审查摘要 — PR #4680操作: edited 🔴 关键(需修复后合并)
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| #4672 仓储系列操作优化(滑动操作) | StorageScreen.mouseDragged/mouseReleased、StorageServerStub.quickMoveFromStorage/quickMoveUndo — 功能实现但 slot 映射 bug(见关键 1/2/3) | |
| #4674 优化仓储GUI内合成操作 | ✅ | StorageJeiSupport.computeRequestedCounts、StorageServerStub.craftingTransfer/hasEnoughMaterial/transferMaterialExact |
| #4671 板条箱合成内 JEI 适配 bug | StorageJeiSupport 重构 + craftingTransfer — 分配更精确,但切石机配方选中回归(见关键 5) | |
| gunpowder 拼写统一 | ✅ | 6 个文件同步改名,无残留 |
结论: REQUEST_CHANGES — storage→inventory 滑动方向的 slot 映射(关键 1)是必须修复的功能性 bug(会导致物品错乱/串位),undo 不对称与记录全量问题(关键 2/3)影响可靠性;其余为行为回归与建议项。建议修复关键 1~3 后合入。
由 Hermes Agent 审查(gh token 无效,未修改 PR 标题;标题描述基本准确)
|
所有分析完成。输出最终审查报告。 代码审查摘要 — PR #4680操作: ready_for_review 🔴 关键问题(需修复)1. int key = -1 - storageSlot;
if (!this.quickMoveSlots.add(key)) { // key 已存在 = 取消选中
this.quickMoveSlots.remove(key);
this.storageQuickMoveSlots.remove(storageSlot);
this.pendingQuickMoveSlots.remove(storageSlot); // ❌ 见 #2
}
this.queueQuickMove(key); // ❌ 取消后再次 add(key) → 立即反转,槽位又被选中取消分支执行 2. this.pendingQuickMoveSlots.remove(storageSlot); // storageSlot 是存储索引,却从背包槽集合移除存储槽索引(≥0)与背包槽索引域重叠。若滑动中同时选中了背包槽 X 与存储槽 Y=X,取消存储槽 Y 会误删背包槽 X 的选中状态。应改为 3. // mouseReleased:
this.recordQuickMoveMovedFromSelection(); // 记录 pendingQuickMoveSlots 各槽移动前数量
this.quickMoveSlots.clear();
this.flushQuickMoves(); // ← 内部第一行 clear() 把记录清空!
4. 5. if (!hasEnoughMaterial(...)) break; // 只检查"总需求 vs 总可用"
// 逐槽 transferMaterialExact:前槽取走共享材料后,后槽可能失败
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| fixed #4672(滑动操作) | StorageScreen.mouseDragged/queueQuickMove/flushQuickMoves — 存储槽滑动已支持,但 toggle 取消失效(#1/#2)、undo 链路失效(#3/#4) | |
| resolved #4674 | StorageServerStub.craftingTransfer — 重构了转移逻辑,但 maxTransfer 多轮部分组问题(#5) | |
| fixed #4671 | ✅ | StorageJeiSupport.computeRequestedCounts + StorageServerStub — JEI 转移用 RecipeTransferUtil 原生分配算法,份数精确控制 |
结论: REQUEST_CHANGES — 滑动操作的 toggle 取消逻辑(#1/#2)与 undo 数据流(#3/#4)存在确定性功能缺陷,JEI 转移的多轮部分组问题(#5)与 requireCompleteSets 语义矛盾。建议修复后重新审查。标题已符合 <英文> <中文> 格式,无需修改。
由 Hermes Agent 审查
|
但注意 但有个问题: 另一个问题:多轮循环中 但** 关键正确性检查: 不过这是 JEI 转移的固有竞态(原版 JEI 转移也非原子)。标记为 💡 建议即可。 现在整理最终审查。核心发现: 🔴 关键问题
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 修复 #4672 存储滑动操作 | ✅ 部分 | StorageScreen(storageQuickMoveSlots + quickMoveMovedBySlot 拖拽追踪)、StorageServerStub(quickMoveFromStorage/quickMoveUndo 新 RPC) |
| 重建 #4674 JEI 物品转移 | StorageJeiSupport(computeRequestedCounts)、StorageServerStub(craftingTransfer 重写 + transferMaterialExact)—— 切石机 selected 回归 + shift 取结果不消耗输入 | |
| GUNPOWDER 重命名 | ✅ | 6 个 Java 文件 |
结论: REQUEST_CHANGES — Shift 取结果不消耗输入是物品复制级漏洞,必须修复;切石机 JEI 转移丢失配方选中是明显功能回归;其余为边界/健壮性问题。修复后建议重点回归测试:shift 拖拽滑动(双向、部分移动、存储满)、JEI 转移(合成 9 格均分、切石机选中、maxTransfer 多轮)、shift 点击结果槽连续合成。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
StorageServerStub.craftingTakeResult(shift=true) |
输入消耗正确性:合成/切石机各取一次后材料 -1;背包满/指针异种时产物不丢失不复制 | 🔴 |
StorageServerStub.craftingTransfer stonecutter |
转移后 stonecutterSelected 指向 JEI 产物对应配方 |
🔴 |
StorageScreen.mouseDragged 存储槽拖拽 |
空存储位 + carried 非空拖拽不取消背包槽 0;存储槽与背包槽同索引同时拖拽 | 🟡 |
StorageServerStub.quickMoveUndo |
部分移动(存储满)后行为:无重复插入、无物品丢失 | 🟡 |
StorageJeiSupport.computeRequestedCounts |
多槽同种材料均分;存储 >64 拆分;材料不足返回 null | 🟡 |
giveBackToInventory 回滚 |
背包满 + 材料不足一组:物品不丢失 | 🟡 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'anvilcraft-storage-system-review' (1 replacement). |
1 similar comment
|
💾 Self-improvement review: Patched SKILL.md in skill 'anvilcraft-storage-system-review' (1 replacement). |
|
💾 Self-improvement review: Patched SKILL.md in skill 'anvilcraft-storage-system-review' (1 replacement). · Patched references/pr4680-sliding-jei-transfer.md in skill 'anvilcraft-storage-system-review' (1 replacement). |
|
分析完成。整理审查结论。 代码审查摘要 — PR #4680操作: synchronize 📋 声称验证表
🔴 关键
|
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
quickMoveFromStorage + quickMoveUndo |
拖拽 storage 槽 → 松开右键(undo RPC 触发)→ 目标切换(REMOTE_STORAGES 清空)→ 确认无 NPE;多槽拖拽 undo 幂等性 | 🔴 |
craftingTransfer(stonecutter) |
旧输入与新输入不同时 selected 索引是否正确;inputs 空/首元素空 | 🔴 |
craftingTransfer(crafting + maxTransfer) |
多槽同种材料 + 材料只够 1 组 → 确认不多轮空转、不回滚已放槽 | 🟡 |
computeRequestedCounts |
存储条目 ≥ 1000 时的虚拟槽索引冲突;stack size > 64 的 modded 物品 | 🟡 |
clearCrafting |
背包满 + 存储满时旧输入物品的去向(不回滚、不丢失) | 🟡 |
结论: REQUEST_CHANGES — 核心滑动修复(#4672/#4674)与 JEI 转移重构(#4671)方向正确、实现完整,但 quickMoveUndo 的 NPE 风险(getView 先于 getServerPlayer + 无异常防护)和 storage 槽滑动无法撤销是本次改动的核心路径缺陷,需修复后合并。建议同时确认 stonecutter 转移的配方选中逻辑(重构删除后未恢复)。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/pr4680-sliding-jei-transfer.md in skill 'anvilcraft-storage-system-review' (1 replacement). |
|
I have everything needed for a thorough review. Compiling the final report now. 代码审查摘要 — PR #4680操作: synchronize( 📋 声称验证表
🔴 关键1.
2. 3.
|
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
| Shift+左键拖拽 背包→存储,再按 Z 撤销 | 多槽混拖(含同种物品多槽)、存储满/背包满、部分移动;重点验证撤销后无物品复制 | 🔴 |
| Shift+拖拽 存储→背包 | 部分空间不足、存储槽被 toggle 取消、撤销后存储数量正确 | 🔴 |
craftingTransfer maxTransfer(JEI "+") |
材料恰好一组/多组/不足一组;合成格已有部分材料(#4 口径) | 🟡 |
craftingTakeResult shift 连续合成 |
背包满/指针异种/存储满(PlaceResult.PARTIAL 丢物品截断路径)、不消耗型输入配方(防死循环) |
🟡 |
| JEI 转移多槽同种材料 | 均分正确性、computeRequestedCounts 与 hasEnoughMaterial 结果一致 |
🟡 |
| GUNPOWDER 重命名 | 编译通过 + 工具提示/配方/标签数据生成一致 | 🟢 |
由 Hermes Agent 审查
补充说明(PR 标题): 标题已同时含英文与中文,语义准确,无需修改。gh 认证 token 当前无效(gh auth status 失败),未执行任何写操作。
|
💾 Self-improvement review: Patched SKILL.md in skill 'github-webhook-pr-review' (1 replacement). · Patched references/pr4680-sliding-jei-transfer.md in skill 'anvilcraft-storage-system-review' (1 replacement). |
|
PR #4680 状态为 closed(且已 merged),根据 webhook 审查约束第 1 条:操作是 "closed" 时 stop here,不发布评论。 本次不输出审查意见,不调用任何 gh 评论/发表命令。 |
Uh oh!
There was an error while loading. Please reload this page.