为什么用云宠物
别人真的伤不到你的宠物
宠物受到伤害时,云宠物会先找出真正的来源:箭和三叉戟算射手的、药水云算丢药水的人的、TNT 算点燃的人的、驯服的狼算狼主人的,再决定要不要放行。所以下面这些方式,其他玩家一律伤不到你的宠物:
| 攻击方式 | 结果 |
|---|---|
| 近战(空手、武器、横扫) | 无效 |
| 弓箭、弩、三叉戟、雪球、鸡蛋、钓钩 | 直接穿过宠物,不会卡在宠物身上 |
| 喷溅药水、滞留药水、药水云 | 对宠物无效 |
| TNT、爆炸 | 无效 |
| 自己驯服的狼、别人的宠物 | 无效 |
| MythicMobs 技能、其他插件加的药水效果 | 无效 |
| 钓竿拉扯 | 钓不走 |
| 荆棘反伤 | 无效 |
只有在 protection.player-damage 开启、而且那个世界开着 PVP 时,其他玩家才打得到宠物。
别人拿不走、骑不上
原版对动物能做的互动,在宠物身上全部被挡下:
- 不能拴绳拉走、不能用命名牌改名、不能剪毛、不能用桶装走。
- 不能骑上去、不能喂食繁殖、不能驯服、不能交易。
- 宠物自己也不会被塞进船或矿车。
别人右键你的宠物,只会在快捷栏上方看到「这是谁的宠物」(interact.show-owner-to-others)。
宠物自己不会出意外
| 情况 | 云宠物的处理 |
|---|---|
| 被闪电劈到变身、苦力怕充能 | 不会变身 |
| 白天被太阳烧(僵尸、骷髅、幻翼) | 不会燃烧 |
| 溺水、窒息、摔落、仙人掌、岩浆、冰冻 | 环境伤害全部无效 |
| 掉进虚空 | 直接传回主人身边 |
| 穿过传送门、末影人瞬移 | 不会穿过去、不会乱瞬移 |
| 捡地上的东西、下蛋、掉东西 | 不会 |
| 破坏或改变方块、踩压力板 / 绊线 / 耕地 | 不会 |
| 苦力怕爆炸、史莱姆分裂 | 不会 |
另外宠物不会推人、也不会被人推走(protection.no-collision),不会卡在门口挡路。
宠物背包不能拿来刷物品
宠物背包是最容易被拿来复制物品的地方。云宠物的做法:
- 打开时拿租约:同一时间只有一个子服、一个人能打开同一只宠物的背包。
- 每次改动都是一笔交易:只有数据库里还是「第 N 版」才会写入新内容,写不进去就不会生效。
- 日志写在玩家数据里:改动前先把这一笔写进玩家自己的 数据,和玩家背包一起存档。服务器在两步之间崩溃时,玩家下次上线会把日志补写进去。
结果是不会出现「物品拿出来了、背包里也还在」(复制),也不会出现「放进去了、背包里却没有」(吞物品)。背包格数变少时,看不到的格子原样保留在数据库,格数恢复就回来。详细见 宠物背包。
宠物蛋只能孵化一次
每颗宠物蛋都对应数据库里的一只宠物(唯一编号)。孵化时先从手上拿走那颗蛋,数据库确认这只宠物还没被孵化过才给你;复制出来的蛋孵化时会提示已作废。宠物蛋不能放置、不能用发射器射出、不能丢出去。详细见 宠物蛋。
换子服不会读到旧数据
多个子服共用 MySQL 时,每位玩家的数据同一时间只由一台子服写入(跨服租约):
- 玩家换服时,新子服会等旧子服把宠物数据存完、放开租约才读取(最多约 8 秒)。
- 旧子服崩溃没放开时,新子服等待后会自动接手。
- 宠物被打包成蛋、送人、被管理员收回后,旧子服再也写不进去,不会把宠物「写回来」。
详细见 数据库。