Skip to content

容量与缩容

本页说明 EmakiStorage 的容量领域模型:config.ymlcapacity 段、四来源容量、三级 stackLimit,以及容量调小时的缩容与溢出处理。

capacity

yaml
capacity:
  base_slots: 45
  max_slots: 1000
  warn_entry_count: 5000
  default_stack_limit: 100
字段类型默认说明
base_slotsint45默认开放槽位数(45 = 5 × 9,与 gui.storage_rows 默认值一致)。
max_slotsint1000槽位总量硬上限,0 表示无限。
warn_entry_countint5000条目数超过此值时向控制台记 warning,0 表示不提醒。
default_stack_limitlong100配置级单槽堆叠上限。此层的 0 表示不限制。

四来源容量

effectiveSlots 由四个独立持久化的来源相加后钳制:

text
effective = clamp(base_slots + 权限档位 + grantedSlots + purchasedSlots, 0, max_slots)

max_slots0 时跳过上限钳制。四个来源分开存储,所以调小 base_slots 不会吃掉玩家已授予或已购买的槽位。

来源来自可否为负
baseSlotscapacity.base_slots否(负值按 0 处理)
permissionSlotsemakistorage.slots.<n> 的最大档位
grantedSlots/estorage slot grant、API grantSlots、Action storage-grant-slot
purchasedSlotsGUI 付费扩容、Action storage-unlock-slot

页数由槽位数推导,不可反向配置:

text
totalPages     = max(1, ceil(effectiveSlots / 每页格数))
reachablePages = max(1, ceil(usedSlots / 每页格数))

第 1 页始终可达(空仓库也要能打开并接收第一件物品);完全没有条目的页无法翻入。

max_slots 设为 0(无限)前请确认内存充足。配置注释给出的量级是单玩家 10 万条目约占 100–200MB 堆内存,这是推算值,未实测。

三级 stackLimit

单槽上限按「最具体优先」解析,三层:

层级存储位置设置方式0 的含义
条目级meta.yml 对应条目/estorage stacklimit slot、API setSlotStackLimit、Action storage-set-stacklimitslot继承玩家级
玩家级meta.ymldefaultStackLimit/estorage stacklimit player、API setStackLimit、Action storage-set-stacklimit 不带 slot继承配置级
配置级config.ymlcapacity.default_stack_limit配置文件不限制(等价 Long.MAX_VALUE

同一个 0 在不同层级语义不同:条目级与玩家级的 0 表示「继承上一级」,配置级的 0 表示「无限制」。解析顺序是条目级 > 0 → 玩家级 > 0 → 配置级,配置级 <= 0 时返回 Long.MAX_VALUE

另有 emakistorage.stacklimit.<n> 权限档位可提供玩家级上限,同样取最大值、不支持通配。

缩容与溢出

容量调小导致占用超出边界时,按 unlock.overflow_policy 处理。该键本身在配置详解unlock 段。

四种 overflow_policy

取值行为
lock_readonly超出容量边界的条目只读:可取出、不可存入,取空后自动释放。推荐。
compact超出条目前滚填补空位。条目本身已存储在无空洞的紧凑列表中,因此「前滚」就是列表的自然状态;仍然装不下的部分退化为 lock_readonly
return_inventory尝试把超出条目退回玩家背包,装不下的退化为 lock_readonly。玩家离线时不退还,直接锁定。
reject_change直接拒绝本次缩容。

四种策略全部零丢失,不提供 dropdelete:不可逆数据丢失不应由调整配置隐式触发。

溢出状态不持久化。它由容量与占用推导,在登录、重载、权限变化、命令授予等容量变化时机重新计算,因此不会出现存储标记与事实不同步的情况。

相关页面