Providing the player with new tools or adjusting the game interface, without fundamentally changing gameplay.
Version: 0.0.47
Date: 2026-07-12
Bugfixes:
- 恢复 player.opened = frame 修复按 Escape 无法关闭 GUI 的问题
- 保留 on_gui_opened 中的 player.opened = nil 先关闭默认GUI,再设置 player.opened = frame
- 顺序: player.opened = nil(关闭默认GUI) → 创建自定义GUI → player.opened = frame(打开自定义GUI)
- 确保自定义GUI能正常响应 Escape 键关闭
Version: 0.0.46
Date: 2026-07-12
Bugfixes:
- 彻底修复多人游戏不同步(desync):移除 open_custom_gui 中的 player.opened = frame
- 在 on_gui_opened 中设置 player.opened = nil 关闭默认GUI,避免默认GUI与自定义GUI冲突
- player.opened = frame 在多人游戏中会导致服务端和客户端的 frame 对象不同
- 服务端广播 player.opened 状态到客户端时,客户端没有服务端的 frame 对象,导致状态不一致
- 自定义GUI现在作为浮动窗口显示,玩家可通过关闭按钮退出
Version: 0.0.45
Date: 2026-07-12
Bugfixes:
- 彻底修复多人游戏不同步(desync):移除 on_tick 定期扫描,消除服务端/客户端代码路径分歧
- on_tick 是确定性事件,服务端和客户端同时运行。has_open 检查导致两端走不同代码路径
- 扫描改为仅在打开GUI或手动刷新时触发,不再依赖 tick 定时器
- 移除 on_load 中的 global_data 重置(模块加载时已初始化,on_load 在客户端加入时也会触发)
- 在 on_init 中清理旧版本 (≤0.0.43) 遗留的 global.urc_data,避免 CRC 哈希不一致
- 移除未使用的 last_scan_tick 字段和 get_scan_interval 函数
Version: 0.0.44
Date: 2026-07-12
Bugfixes:
- 修复多人游戏不同步(desync):on_gui_click/on_gui_opened 是客户端事件,在其中修改 global 会导致不同步
- 将所有客户端数据(item_sources, open_guis, translation_cache等)从 global 移至本地局部表 global_data
- on_load 时重置本地数据,下次扫描或打开GUI时自动刷新
Version: 0.0.43
Date: 2026-07-12
Bugfixes:
- 修复 margin = {right = 8} 导致的 GUI 崩溃:Factorio 2.0 的 margin 不接受命名键
- 改用 right_margin = 8 单独设置边距
Version: 0.0.42
Date: 2026-07-12
Bugfixes:
- 修复字体名 "info" 不存在于 Factorio 2.0 导致的 GUI 崩溃错误
- 将所有 "info" 字体替换为 "default-small" (Factorio 2.0 有效字体)
Version: 0.0.41
Date: 2026-07-12
Changes:
- GUI美化:主界面信息栏使用heading-2字体,搜索栏加粗标签,底部提示使用info字体
- GUI美化:物品按钮添加margin间距,tooltip增加堆叠数和半组数信息,使用分隔线美化
- GUI美化:数量选择对话框重新设计 - 添加物品图标展示区,物品名称和可用数量分层显示
- GUI美化:快捷按钮统一尺寸(56x32),半组按钮蓝色字体,全部按钮金色字体
- GUI美化:确认/取消按钮居中布局,统一高度36px,取消按钮红色字体
- GUI美化:输入框增加最大数量提示,分隔线区分信息区和操作区
- 修复 do_take_item 中 spill_item_stack 使用了无效的 find_entities_filtered{unit_number=...}
- 改用 surface.find_entity(name, position) 查找万能取物箱实体
Version: 0.0.40
Date: 2026-07-12
Changes:
- 修复右键提取失败:find_entities_filtered{unit_number=...} 在 Factorio 2.0 中不是有效的过滤参数
- 改用 surface.find_entity(name, position) 通过实体名称和位置查找源箱子
- 扫描时存储实体位置和名称,提取时精确定位
- 修复左键确认提取时"数量无效":textfield 嵌套在 flow 中无法通过 frame[name] 直接访问
- 给 input flow 添加名称,通过 frame["urc-input-flow"]["urc-amount-input"] 正确访问
- 修复 take_from_sources 中实体未找到时来源被丢弃的 bug,改为保留来源等待下次扫描
- 移除调试飞舞文字,清理代码
Version: 0.0.39
Date: 2026-07-12
Changes:
- 添加调试信息:右键/左键点击物品时显示诊断飞舞文字,帮助定位提取失败原因
- 右键点击物品后显示 "点击: xxx 按钮=N" 和 "右键提取: N 个"
- do_take_item 显示提取过程各阶段的返回值
- 提取失败时显示具体错误信息(物品名为空、未找到来源、无法获取原型、无可用物品)
Version: 0.0.38
Date: 2026-07-12
Changes:
- 修复右键取半组卡死问题:当物品数量很大(如80M)时取一半导致卡死
- 右键取半组严格按照原版堆叠规则:math.ceil(stack_size/2)
- 铁板 stack_size=100 → 取50
- 铁矿 stack_size=50 → 取25
- 若实际数量不足半组,则取全部剩余
- 奇数向上取整:5个取3个,3个取2个
- 优化 take_from_sources 性能:提取到足够数量后立即 break,不再遍历所有源箱子
- "半组"快捷按钮改为与右键逻辑一致:基于 stack_size/2 而非 available/2
Version: 0.0.37
Date: 2026-07-12
Changes:
- 修复 Unknown sprite "item/1" 错误:get_contents() 返回数组而非 map
- 正确提取 ItemWithQualityCount 的 name 字段,添加字符串类型检查
- 跳过非默认品质物品
- 右键取半组改为基于 stack_size/2,避免总数过大时取太多
Version: 0.0.36
Date: 2026-07-12
Changes:
- 取消按原版堆叠分组,每种物品只显示一个按钮(显示总数)
- 左键改为打开数量选择对话框(含输入框+快捷按钮1/10/一半/全部)
- 修复右键取一半的 bug:改为基于实际总数取一半,不再依赖 stack_size
- 提取逻辑抽取为 do_take_item 函数
Version: 0.0.35
Date: 2026-07-12
Changes:
- 修复函数定义顺序错误:request_translations 在 scan_all_chests 之后定义
- 将 request_translations() 调用从 scan_all_chests 内部移到外部调用点
Version: 0.0.34
Date: 2026-07-12
Changes:
- 修复翻译错误:LuaHelpers 没有 translate 方法
- 改用 player.request_translation 异步翻译 API
- 添加 on_string_translated 事件处理,缓存翻译结果
Version: 0.0.33
Date: 2026-07-12
Changes:
- 修复 GUI 排版空缺问题
- 最后一行按钮不足 10 个时用 empty-widget 填充
- 截断/空状态提示移到 table 外部,避免打乱按钮布局
Version: 0.0.32
Date: 2026-07-12
Changes:
- 修复搜索:现在同时匹配物品内部名和本地化名称
- 搜索"木材"能匹配到 wood,搜索"铁板"能匹配到 iron-plate
- 添加翻译缓存,避免重复翻译
Version: 0.0.31
Date: 2026-07-12
Changes:
- 性能优化:箱子/物品过多时不再卡死崩溃
- on_tick 只在有 GUI 打开时才扫描,最小间隔 300 tick(5秒)
- take_from_sources 改用 item_sources 中的 unit_number 精确定位,不再遍历所有箱子
- 提取后不再全量扫描,直接更新 item_sources 并刷新 GUI
- GUI 按钮上限 500 个,超出时提示使用搜索过滤
Version: 0.0.30
Date: 2026-07-12
Changes:
- 修复排序错误:物品名在 Factorio 2.0 中可能是 localised string 导致比较失败
- 使用 tostring() 转换后再排序
Version: 0.0.29
Date: 2026-07-12
Changes:
- 物品按原版堆叠规则分组显示
- 超过 stack_size 的物品分成多个按钮,每个按钮最多显示 stack_size 个
- 例如 200 个铁板(stack_size=100)显示为两个按钮,各 100 个
Version: 0.0.28
Date: 2026-07-12
Changes:
- 右键改为取一半(原为取单个)
- 更新 GUI 提示和 tooltip 说明
Version: 0.0.27
Date: 2026-07-12
Changes:
- 修复飞舞文字显示内部名而非游戏名称的问题
- 使用物品原型的 localised_name 显示本地化名称(如 stone-furnace → 石炉)
Version: 0.0.26
Date: 2026-07-12
Changes:
- 重写 take_from_sources:不再依赖 item_sources 快照
- 实时遍历所有源箱子,直接用 inv.remove 扣除物品
- 添加提取结果飞舞文字反馈(成功/失败均提示)
Version: 0.0.25
Date: 2026-07-12
Changes:
- 重写提取逻辑:使用 LuaInventory.remove() 官方 API 扣除物品
- 简化发放逻辑:直接 player.insert() 放入玩家背包(和箱子取物一致)
- 移除调试代码,保持逻辑清晰
Version: 0.0.24
Date: 2026-07-12
Changes:
- 调试版本:添加点击事件诊断信息
- sprite-button 添加 mouse_button_filter 支持右键点击
- 显示点击元素名、按钮、tags、提取结果、发放结果
Version: 0.0.23
Date: 2026-07-12
Changes:
- 修复无法提取物品的问题
- 修复 remove_item API 在 Factorio 2.0 中不可用,改用 stack.count 赋值和 clear()
- 修复光标被占用时无法提取,改为优先放光标、背包作为后备
- 背包满时洒在地上,避免物品丢失
- 重命名 give_to_cursor 为 give_to_player,更符合实际行为
Version: 0.0.22
Date: 2026-07-12
Changes:
- 修复 on_gui_opened 崩溃:game.item_prototypes 在 Factorio 2.0 中已废弃
- 改用 prototypes.item[item_name] API(Factorio 2.0 原型 API)
- 添加 get_item_prototype 辅助函数,同时兼容新旧版本
Version: 0.0.21
Date: 2026-07-12
Changes:
- 修复 get_contents() 返回值解析错误(attempt to compare number with table)
- Factorio 2.0 中 get_contents() 返回 {[item_name] = {name=, count=, quality=}} 表结构
- 旧版返回 {[item_name] = count} 数字格式
- 同时兼容两种格式,正确提取 count 值
Version: 0.0.20
Date: 2026-07-12
Changes:
- 修复扫描到箱子但读不到物品的问题
- 改用 inv.get_contents() API 读取物品,替代手动遍历槽位
- 不再记录 slot 索引,提取时遍历整个库存扣除,更可靠
- 所有库存操作包裹 pcall,防止异常中断
Version: 0.0.19
Date: 2026-07-12
Changes:
- 修复扫描逻辑:根据实体类型选择正确的库存索引(defines.inventory.chest)
- 修复物品检测:使用 valid_for_read 替代 valid,正确判断槽位是否有物品
- 添加 pcall 错误保护,防止单个实体扫描失败导致整体中断
- 添加诊断信息:GUI 中显示扫描的源箱子数量和错误信息
- 安全化设置读取,防止设置不存在时报错
- 添加 spider-vehicle 库存类型支持(spider_trunk)
Version: 0.0.18
Date: 2026-07-12
Changes:
- 全新自定义 GUI 界面,替代默认箱子界面
- GUI 功能:物品网格显示(图标+数量)、实时搜索过滤、刷新按钮、关闭按钮
- 物品提取:左键取整组,右键取单个,提取后自动扣除源箱子物品
- 严格禁止存入:原型 inventory_size 设为 0,手动/插入器/机器人均无法存入
- 根本修复无法显示物品的问题:自定义 GUI 直接读取扫描数据,不依赖箱子库存
- 提取物品时放置到玩家光标,支持连续提取和堆叠
- 物品按数量降序排序,支持跨场景(箱子/货运列车/载具)统一显示
- 按 E/Esc 或点击关闭按钮可关闭 GUI
Version: 0.0.17
Date: 2026-07-12
Changes:
- 修复万能取物箱无法显示其他箱子物品的严重 Bug
- 根本原因:process_and_refresh 中误把"箱子为空"判断为"玩家拿走全部",导致源箱子被清空
- 引入 state.expected_items 记录上一次显示给玩家的内容,用于正确检测玩家取走/放入操作
- 修复 surface.find_entity(unit_number) API 调用错误,改用 find_entities_filtered{unit_number=...}
- 修复 spill_item_stack 不处理超过 stack_size 的问题,改为循环洒出
- 优化 on_gui_opened:打开时立即初始化显示,避免等待 on_tick 才显示物品
- 提取 refresh_chest_contents 和 spill_item 为独立函数,提升代码可读性
Version: 0.0.16
Date: 2026-07-12
Changes:
- 重写核心逻辑,修复物品获取和存入两个关键缺陷
- 修复 sync_items_from_sources 逻辑反转导致源箱子被清空的问题
- 统一为 process_and_refresh 函数:检测变化→扣除源箱子→洒出存入物品→刷新
- 修复玩家拿走全部物品时无法检测的问题
- 简化 on_tick 为单一处理周期,消除时序冲突
Version: 0.0.15
Date: 2026-07-12
Changes:
- 修复打开箱子时物品未能正确加载的问题,添加 on_gui_opened 即时扫描
- 修复允许存入物品的问题,新增 prevent_insertion 函数检测并洒出多余物品
- 优化物品同步逻辑,分离 sync_items_from_sources 和 prevent_insertion 功能
Version: 0.0.14
Date: 2026-07-12
Changes:
- 移除 on_player_transfered_items 事件监听,改用 on_tick 轮询处理物品转移
Version: 0.0.13
Date: 2026-07-12
Changes:
- 修复事件名拼写错误(on_player_transferred_items → on_player_transfered_items)
Version: 0.0.12
Date: 2026-07-12
Changes:
- 移除自定义 GUI,改用原版箱子标准界面
- 实现容量自适应:自动同步所有箱子物品到万能取物箱
- 提取物品时自动从源箱子扣除对应数量
- 禁止向万能取物箱存入物品(存入的物品会被提取到源箱子)
Version: 0.0.11
Date: 2026-07-12
Changes:
- 修复万能取物箱无法正常打开的问题,在 on_gui_opened 中先关闭默认库存界面再显示自定义界面
Version: 0.0.10
Date: 2026-07-12
Changes:
- 修复 prevent_insertion 中直接调用 get_inventory 的问题,改用 get_entity_inventory 函数
Version: 0.0.9
Date: 2026-07-12
Changes:
- 修复 get_entity_inventory 中 inventory index 为 nil 的问题,改为逐一尝试所有库存类型
Version: 0.0.8
Date: 2026-07-12
Changes:
- 修复 on_init 中 global 为 nil 的问题,添加空值检查
Version: 0.0.7
Date: 2026-07-12
Changes:
- 修复 table.deepcopy 在运行时不可用的问题,改用自定义 deep_copy 函数
Version: 0.0.6
Date: 2026-07-12
Changes:
- 移除自定义阴影层,使用钢箱默认阴影
Version: 0.0.5
Date: 2026-07-12
Changes:
- 修复科技图标尺寸错误(icon_size 128 → 64)
Version: 0.0.4
Date: 2026-07-12
Changes:
- 修复前置科技名称错误(advanced-electronics-1 → electronics)
Version: 0.0.3
Date: 2026-07-12
Changes:
- 修复前置科技名称错误(advanced-electronics → advanced-electronics-1)
Version: 0.0.2
Date: 2026-07-12
Changes:
- 修复 inventory_size 超出范围的问题(99999 → 65535)
- 修正版本号同步问题
Version: 0.0.1
Date: 2026-07-11
Changes:
- 初始版本发布
- 实现从游戏内所有箱子中提取物品的功能
- 禁止向万能取物箱内存放任何物品
- 自动扫描跨场景、跨区域的所有箱子
- 提供自定义 GUI 界面展示物品清单和提取操作
- 支持按物品数量排序和分页浏览
- 可配置扫描间隔、每页显示数量、是否包含载具和列车