Fix item splitter stack limits 修复物品分配器掉落物堆叠上限 - #5136
Conversation
WhereisFff
commented
Oct 2, 2026
- 按物品实际堆叠上限拆分每个目标位置的掉落物。
- 保留均分份额、余数、零动量和默认拾取延迟。
- fixed [Bug] 物品分配器被铁砧砸吐出超出堆叠上限的物品实体 #5135
按物品实际堆叠上限拆分每个目标位置的掉落物,保留均分份额、余数、零动量和拾取延迟。 修复 Anvil-Dev#5135
代码审查摘要 — PR #5136操作: 变更概要private void dropAt(BlockPos target, ItemStack stack) {
if (this.level == null) return;
Vec3 center = target.getCenter();
while (!stack.isEmpty()) {
ItemEntity itemEntity = new ItemEntity(
this.level, center.x, center.y, center.z,
stack.split(stack.getMaxStackSize()), // ← 按实际上限切分
0, 0, 0);
itemEntity.setDefaultPickUpDelay();
this.level.addFreshEntity(itemEntity);
}
}📋 声称验证表
🔴 关键问题无。
|
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
ItemSplitterBlockEntity.dropAt() |
16 槽装满 1024 个可堆叠物 + 铁砧落下(share > 上限):期望每目标格生成 ceil(share/64) 个 64 堆叠实体,实体计数之和 == 原数量 |
🔴 |
| 同上 | 不可堆叠物(16 把不同/相同剑):期望 16 个 1 堆叠实体,无合并成超限实体 | 🟡 |
| 同上 | share 非上限整数倍 + 除不尽余数:余数仍留在分配器内部 |
🟡 |
| 实体交互 | 多实体完全重叠时:玩家拾取、漏斗抽取均正常,地面上不残留 count > 上限 的实体 | 🟢 |
结论: APPROVE — 修复点选得准(切分放在抛出处而非截断 share),split() 的截断语义保证不丢不超,PR 描述的四项保留全部成立,最小改动且与 issue #5135 完全对应。仅建议补 dropAt 的"消耗入参"文档 + 一行防御性 max 下界。
PR 标题 Fix item splitter stack limits 修复物品分配器掉落物堆叠上限 已准确(英文+中文),无需修改(本机 gh token 已失效,未做标题编辑)。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'anvilcraft-anvil-impact-review' (1 replacement). · Patched references/shell-only-diff-navigation.md in skill 'github-webhook-pr-review' (1 replacement). · Patched references/pr-class-routing.md in skill 'github-webhook-pr-review' (1 replacement). |
代码审查摘要 — PR #5136标题: Fix item splitter stack limits 修复物品分配器掉落物堆叠上限(标题准确,无需修改)
🔍 变更核实- ItemStack stack 原样塞进 ItemEntity // 单实体,count 可 > maxStackSize
+ while (!stack.isEmpty()) {
+ stack.split(stack.getMaxStackSize()), 0, 0, 0 // 按实际上限切分,逐个生成
+ }追踪了唯一调用链
另一个正向点: 同位置零动量的多个实体在后续 tick 会走 💡 建议(非阻塞)
🟢 结论APPROVE — 最小改动、行为等价、无副作用外溢。修复精准命中 #5135( 🧪 测试建议
由 Hermes Agent 审查 |
|
💾 Self-improvement review: Patched SKILL.md in skill 'anvilcraft-anvil-impact-review' (1 replacement). · Patched references/item-drop-stack-limit-split-review.md in skill 'anvilcraft-anvil-impact-review' (1 replacement). |
|
PR #5136 状态为 closed,按 webhook 审查约束第 1 条(closed/labeled → 停止),不再进行审查,也不会发布任何评论。 未执行任何 diff 下载或评论操作。如需对已关闭/已合并的 PR 做事后审查,请显式告知,我再单独处理。 |
…修复到26.1 (#5143) * The text regarding celestial death has been corrected, and some progress has been made. 修正了天体死亡文本,增加了一些进度 (#5129) * feat(advancement): 添加天体进化挑战成就及触发器 - 新增 CelestialEvolutionTrigger 用于天体质量进化判定 - 在触发 util 中添加 celestialEvolution 方法,触发成就判定 - 在加速器逻辑中调用触发方法进行成就检测 - 添加无残留(no_remnant)挑战成就,要求64质量铁砧的天体进化至终局 - 将成就文本翻译添加至英文语言文件和特殊字符文件 - 在成就数据中注册无残留成就及其触发条件 * feat(advancement): 添加行星毁灭成就及触发器支持 - 新增PlanetDetonationTrigger用于行星毁灭事件的判定 - 在ExcavatorHandler中增加触发行星毁灭触发器的逻辑 - 在AdvancementLineHelper中集成planetDetonation方法方便创建该成就 - 在AnvilCraftAdvancement中添加efficiency成就分支,绑定行星毁灭触发器 - 更新语言文件,添加行星毁灭成就的标题与描述 - 注册PlanetDetonationTrigger触发器并完善其触发实现 - 新增efficiency成就JSON配置文件,定义触发条件及显示信息 * feat(advancement): 新增因行星坍缩死亡的成就触发器 - 添加了 PlanetaryCollapseDeathTrigger 触发器类及其数据结构 - 在 ModCriterionTriggers 中注册 planetary_collapse_death 触发器 - 在 AdvancementLineHelper 中新增 planetaryCollapseDeath 方法便于调用 - 在 AnvilCraftAdvancement 中添加 Cannon Fodder 成就,绑定行星坍缩死亡触发器 - 在语言文件中添加 Cannon Fodder 成就标题与描述的多语言支持 - 在 OverworldLikeEventListener 中监听行星坍缩死亡事件并触发相应成就 - 在 TriggerUtil 中实现 planetaryCollapseDeath 方法来触发成就判定 - 新增 Cannon Fodder 成就的 JSON 配置文件,包含父级与图标等信息 - 修改效率成就添加隐藏属性,改善游戏内成就展示体验 * feat(advancement): 新增黑洞和中子星终局星体成就 - TriggerUtil新增支持根据StellarTerminal.Kind触发星体演化成就 - CelestialEvolutionTrigger增加对终局类型的判定和对应触发方法 - AdvancementLineHelper新增celestialEvolution重载方法支持终局类型参数 - AnvilCraftAdvancement中增加黑洞和中子星分支成就定义和保存 - AdvancementLang添加黑洞与中子星成就名称及描述多语言支持 - 语言文件(en_us, en_ud)增加对应成就的描述和标题 - 新增黑洞和中子星成就JSON数据文件,定义触发条件和显示信息 * feat(damage): 新增天体接触伤害类型及独立标签支持 - 添加黑洞接触、恒星接触及行星接触三种新伤害类型 - 天体接触伤害采用独立类型以实现专属死亡提示 - 更新伤害标签,支持新伤害类型绕过护甲、抗性、击退等效果 - 修改重力控制器中伤害来源,替换为对应新天体接触伤害类型 - 保持星体及行星接触伤害原版燃烧和摔落效果表现不变 - 增加对应的语言文本显示新伤害的死亡描述信息 - 修正玩家攻击混入对行星接触伤害的判定,保持原摔落伤害一致性 - 新增相关资源数据文件,完善伤害类型和标签配置 * feat(advancement): 添加“夜晚来访”星接触死亡进度条件 - 新增 StarContactDeathTrigger 实现星接触死亡触发器 - 注册并初始化星接触死亡触发条件 ModCriterionTriggers.STAR_CONTACT_DEATH - AdvancementLineHelper 新增 starContactDeath 方法支持该触发器 - AnvilCraftAdvancement 新增“come_at_night”任务,使用星接触死亡触发器 - AdvancementLang 中添加“come_at_night”进度名称及描述文本 - OverworldLikeEventListener 监听星接触死亡事件触发进度 - TriggerUtil 新增 starContactDeath 方法简化触发调用 * feat(locale): 添加“come_at_night”成就的中英文描述 - 新增“advancements.anvilcraft.come_at_night”标题的本地化文本 - 新增“advancements.anvilcraft.come_at_night”描述的本地化文本 - 中文描述内容为“被星光笼罩” - 英文标题内容为“Showdown at Night”倒转样式 * feat(advancement): 添加“come_at_night”隐藏成就 - 创建新的隐藏成就“come_at_night” - 设置成就触发器为“star_contact_death” - 指定成就图标为“celestial_forging_anvil” - 定义成就的父级为“the_start” - 启用成就的遥测事件发送 --------- Co-authored-by: Pigeon_Nian <adove2005@163.com> * fix(celestial): 修复演化音效衰减与锻造界面恢复 (#5131) (#5132) - 将演化音乐归入唱片音量分类,并以单声道音源实现 64 格原生距离衰减。 - 保持音效与字幕的听距一致。 - 通过实时同步入口恢复锻造状态,避免重开界面时丢失正在锻造的进度。 * fix(building): 修复幻灵铁砧虚影撤销时重复返还物品 (#5134) - 撤销无掉落幻灵铁砧虚影时不再结算基础物品 - 保留实体铁砧与其他下落方块的资源结算 fixed #5133 * fix(item-splitter): 修复物品分配器掉落物超出堆叠上限 (#5136) 按物品实际堆叠上限拆分每个目标位置的掉落物,保留均分份额、余数、零动量和拾取延迟。 修复 #5135 * fix(button): 修复大红按钮遮挡边缘交互与按压动画 (#5141) - 使用实际命中位置进行服务端射线校验,修复按钮可见但底座中心被遮挡时无法按下的问题。 - 按住按钮后等待服务端确认再播放手部动画,并忽略已释放或已切换目标的过期确认。 - fixed #5138 * fix(storage-port): 修复服务端扫描仓储端口时崩溃 (#5140) - 优先使用原版 includeData 标志控制数据复制,避免服务端扫描读取客户端按键状态 - 保留 26.1 服务端中键克隆时的缓存、标记与流体数据 (cherry picked from commit d7c2f74) --------- Co-authored-by: PigeonNian <78527064+PigeonNian@users.noreply.github.com> Co-authored-by: Pigeon_Nian <adove2005@163.com>