宠物背包
宠物可以帮主人背东西。宠物文件写 backpack(列数,0 = 没有背包,最多 6 列):
backpack: 1 # 固定 1 列(9 格)
backpack: 'min(6, 1 + floor(level / 8))' # 随等级变大:1 级 1 列、8 级 2 列……最多 6 列
backpack: [1, 1, 1, 2, 2, 3] # 每级一个值
怎么打开
- 宠物菜单的「背包」按钮。
/cp backpack [宠物](不写宠物 = 召唤中的第一只)。
需要权限 cloudpet.backpack(默认所有人都有),而且 config.yml 的 backpack.enabled: true。宠物不用召唤出来也能打开。
不能放的物品
config.yml
backpack:
enabled: true
blacklist: [SHULKER_BOX, WHITE_SHULKER_BOX, ..., BUNDLE]
默认挡下所有颜色的潜影盒与收纳袋,避免把东西层层塞进宠物背包。想挡宠物蛋,把 eggs.item 用的材质(默认 EGG)加进去。
跨服与同时打开
- 背包存在数据库,宠物在哪个子服,背包就在哪里(多个子服共用 MySQL 时)。
- 同一时间只有一个地方能打开同一个背包:另一个子服或另一个窗口正开着时,会提示「这个背包正在别的地方打开」。
- 背包开着时不能把宠物打包成宠物蛋或放生。
为什么不会复制或吞物品
| 步骤 | 做了什么 |
|---|---|
| 打开 | 向数据库取得这个背包的租约(每 20 秒续约),拿不到就不打开 |
| 每次改动 | 先把「这一笔要把背包从第 N 版改成什么」的日志写进玩家自己的数据,再到数据库做「版本号还是 N 才写入」的交易 |
| 鼠标上拿着东西 | 先不写;放下之后才写这一笔(避免物品「不在任何地方」时存档) |
| 关闭 | 写最后一笔并放开租约 |
| 崩服后上线 | 玩家数据里的日志还在、数据库还停在第 N 版 → 把日志补写进去 |
所以不会出现「拿出来了、背包里也还在」(复制),也不会出现「放进去了、背包里却没有」(吞物品)。
格数变少时
宠物降级、改了 backpack 设置让格数变少时,看不到的格子原样保留在数据库,打开时会提示「有 N 格物品暂时看不到(没有消失)」,格数恢复后就回来。
宠物蛋、进化与放生
- 打包成宠物蛋:背包内容跟着蛋走,孵化后的新主人打开就是原本的东西。
- 进化:背包不变(列数照新宠物的
backpack计算)。 - 放生:背包里还有东西时不能放生 ,要先拿出来。
管理员
/cp admin backpack <玩家> <宠物|宠物编号>
唯读查看一位玩家的宠物背包(不能拿也不能放)。离线玩家写完整的宠物编号(/cp admin list <玩家> 查看)。
MythicMobs 机制 cloudpet-dropbackpack(或 DropPetInventory)可以把宠物背包的东西全部丢在宠物脚下:数据库先清空成功才丢出,主人正开着背包时不会执行。