跳到主要内容

为什么用云宠物

别人真的伤不到你的宠物​

宠物受到伤害时,云宠物会先找出真正的来源:箭和三叉戟算射手的、药水云算丢药水的人的、TNT 算点燃的人的、驯服的狼算狼主人的,再决定要不要放行。所以下面这些方式,其他玩家一律伤不到你的宠物:

攻击方式结果
近战(空手、武器、横扫)无效
弓箭、弩、三叉戟、雪球、鸡蛋、钓钩直接穿过宠物,不会卡在宠物身上
喷溅药水、滞留药水、药水云对宠物无效
TNT、爆炸无效
自己驯服的狼、别人的宠物无效
MythicMobs 技能、其他插件加的药水效果无效
钓竿拉扯钓不走
荆棘反伤无效

只有在 protection.player-damage 开启、而且那个世界开着 PVP 时,其他玩家才打得到宠物。

别人拿不走、骑不上​

原版对动物能做的互动,在宠物身上全部被挡下:

  • 不能拴绳拉走、不能用命名牌改名、不能剪毛、不能用桶装走。
  • 不能骑上去、不能喂食繁殖、不能驯服、不能交易。
  • 宠物自己也不会被塞进船或矿车。

别人右键你的宠物,只会在快捷栏上方看到「这是谁的宠物」(interact.show-owner-to-others)。

宠物自己不会出意外​

情况云宠物的处理
被闪电劈到变身、苦力怕充能不会变身
白天被太阳烧(僵尸、骷髅、幻翼)不会燃烧
溺水、窒息、摔落、仙人掌、岩浆、冰冻环境伤害全部无效
掉进虚空直接传回主人身边
穿过传送门、末影人瞬移不会穿过去、不会乱瞬移
捡地上的东西、下蛋、掉东西不会
破坏或改变方块、踩压力板 / 绊线 / 耕地不会
苦力怕爆炸、史莱姆分裂不会

另外宠物不会推人、也不会被人推走(protection.no-collision),不会卡在门口挡路。

宠物背包不能拿来刷物品​

宠物背包是最容易被拿来复制物品的地方。云宠物的做法:

  1. 打开时拿租约:同一时间只有一个子服、一个人能打开同一只宠物的背包。
  2. 每次改动都是一笔交易:只有数据库里还是「第 N 版」才会写入新内容,写不进去就不会生效。
  3. 日志写在玩家数据里:改动前先把这一笔写进玩家自己的数据,和玩家背包一起存档。服务器在两步之间崩溃时,玩家下次上线会把日志补写进去。

结果是不会出现「物品拿出来了、背包里也还在」(复制),也不会出现「放进去了、背包里却没有」(吞物品)。背包格数变少时,看不到的格子原样保留在数据库,格数恢复就回来。详细见 宠物背包。

宠物蛋只能孵化一次​

每颗宠物蛋都对应数据库里的一只宠物(唯一编号)。孵化时先从手上拿走那颗蛋,数据库确认这只宠物还没被孵化过才给你;复制出来的蛋孵化时会提示已作废。宠物蛋不能放置、不能用发射器射出、不能丢出去。详细见 宠物蛋。

换子服不会读到旧数据​

多个子服共用 MySQL 时,每位玩家的数据同一时间只由一台子服写入(跨服租约):

  • 玩家换服时,新子服会等旧子服把宠物数据存完、放开租约才读取(最多约 8 秒)。
  • 旧子服崩溃没放开时,新子服等待后会自动接手。
  • 宠物被打包成蛋、送人、被管理员收回后,旧子服再也写不进去,不会把宠物「写回来」。

详细见 数据库。

宠物会自己恢复​

  • 被清怪插件移除、区块卸载:宠物身体不见了,下一秒在主人身边重新出现。30 秒内被移除超过 5 次时停止自动叫回并提示主人(避免和清怪插件无限循环)。
  • 服务器崩溃留下的旧身体:宠物身体从不存进世界,而且带有 PDC 记号;区块加载时看到「带记号却没人管」的身体会直接清掉,开服时也会扫一次。
  • 主人在空中(鞘翅、创造飞行、正在往下跳):自动叫回的宠物会等主人站稳才出现,不会凭空掉下去。
  • 上线、换服、换世界、复活、昏倒冷却结束:离开前召唤着的宠物自动回来(pets.resummon)。

不拖慢服务器​

  • 所有数据库读写都在独立线程;PlaceholderAPI 变量只读内存(排行榜每分钟更新一次)。
  • 宠物的原版 AI 全部拿掉,跟随与战斗由插件自己控制,不会乱跑、不会攻击主人。
  • 授权在后台验证,不会拖慢开服。