共享生命

共享生命

所有玩家共享一条生命。生命值、饥饿值、物品栏、末影箱、经验值和死亡都是共通的,因此一人受伤,全体受伤。每一项共享都有独立开关。仅在服务端运行,原版客户端无需任何额外操作。

生命共享

一条命,由你们所有人共同分担

生命值、饥饿值、物品栏、末影箱、经验值和状态效果在服务器上的所有人之间共享。你们中一人受到的伤害,由所有人共同承受。一人拾取的物品会出现在所有人的物品栏中。而当你们中一人死亡时,其他人也会随之倒下。

一切都在服务端运行。原版客户端无需安装任何东西。 把 jar 放进服务器的 mods 文件夹,所有玩家,无论是否装了模组,都会共享同一条命。

共享的内容

以下每一项都是独立的开关。关掉你不想要的项,模组就完全不会读取或写入玩家的那部分数据。

共享项 默认 含义
shareHealth 开启 一条生命条。伤害、治疗、生命恢复和命令都作用于同一个共享池。
shareAbsorption 关闭 同时共享黄色的伤害吸收心,而不是把它们留作个人缓冲。
shareHunger 开启 一条饥饿条,包含饱和度,以一名玩家的速度消耗,而非整组人的速度。
shareInventory 开启 物品的总开关。下面四项决定哪些部分跟随共享。
shareHotbar 开启 槽位 0 到 8。
shareMainInventory 开启 快捷栏上方的三行,槽位 9 到 35。
shareArmor 开启 头盔、胸甲、护腿、靴子。
shareOffhand 开启 副手槽位。
shareEnderChest 开启 一个末影箱,27 个槽位。
shareExperience 开启 一个经验总量。一名成员拾取的经验球会让所有人升级。
shareEffects 开启 一套状态效果。牛奶会为所有人清除它们。
shareDeath 开启 一名成员死亡会带走其他人。

所以“仅共享快捷栏”就是把 shareMainInventory、shareArmor 和 shareOffhand 关掉。“除盔甲外全部共享”就只是把 shareArmor 关掉。未共享的槽位完全保持个人所有,包括死亡时,只有共享的槽位会被清空。

不共享的:每名玩家当前手持的快捷栏槽位、氧气供应、进度、统计数据,以及箱子里的任何东西。

安装到已有世界会将所有人合并为一条命

添加模组后第一个登录的玩家会为该池播种,随后其他所有人都会接收到他的物品栏、生命值和经验。先决定好这个人应该是谁,或者事后用 /livesshared adopt <player> 来修正。在全新的世界里没有什么会丢失。无论哪种情况都请先备份。

命令

/ls 是 /livesshared 的别名。

命令 权限 作用
/livesshared 或 /livesshared status 所有人 正在共享的内容,以及该池当前的生命值、饥饿值、等级和槽位数量。
/livesshared set <option> <true\|false> op 2 切换任意开关并写入配置。
/livesshared exempt <player> <true\|false> op 2 将某名玩家移出该池,或放回。不带参数会列出谁被排除。
/livesshared reload op 2 重新读取 config/livesshared.json。
/livesshared resync op 2 将该池重新推送给所有人,用于客户端看起来不同步的情况。
/livesshared adopt <player> op 2 以该玩家的状态作为整组的命。恢复工具。

在游戏内将某项共享重新开启时,该池会采用执行该命令者的状态,所以“大家会得到谁的东西”的答案永远是“输入命令的那个人”。

队伍

开启 useScoreboardTeams 后,每个计分板队伍共享各自的命,所有无队伍的人再共享另一条。加入不同的队伍会在下一个 tick 让你获得该队伍的命;你原来的队伍保留他们的命。

配置

config/livesshared.json 会在首次运行时写出,包含每个选项以及一个内置的 #option-guide 解释每一项,因此该文件本身即文档。布尔值可用 /livesshared set 实时编辑;文本和列表选项则编辑文件后再 /livesshared reload。

选项 默认 含义
enabled true 总开关。false 会让所有人恢复各自独立。
damageFeedback true 因他人受击而失去生命值的成员会收到受伤音效和红色闪烁。
announceSharedDeath true 当一组人一同倒下时进行广播。
sharedDeathMessage 见配置 广播文本。{player} 和 {group} 会被填入。
excludeCreative true 创造模式的玩家处于该池之外。
excludeSpectators true 旁观者处于该池之外。
exemptPlayers [] 永不加入任何池的名字或 uuid,用于管理员或管理账号。
effectBlacklist [] 即使开启 shareEffects 也保持个人所有的效果 id。
useScoreboardTeams false 每个计分板队伍一个池,所有无队伍玩家共享另一个。
autosaveMinutes 5 有玩家在线时,两次池保存之间的分钟数。

工作原理

每个 tick,对每个组:成员自上次接收到池以来所改变的任何内容都会被折回池中,然后该池再被推送给所有人。

数值以增量形式折入,并且会累加。两名玩家在同一 tick 各受到三点伤害,整组就会损失六点,两名玩家同时进行生命恢复也都会治疗该池。物品按槽位折入。

饥饿值是例外。 每名玩家都会产生自己的消耗度,因此把它全部相加会让一条饥饿条以你们人数的倍数速度被清空。整组吃的东西仍会累加,因为那些是从共享堆叠中取出的真实物品,但整组消耗的则会在成员之间分摊,所以饥饿条会以相当于一名玩家的速度消耗。单人时,这与原版完全一致。

共享的受击是能感受到的,而不仅仅是看到的。 当该池受到别人招致的伤害时,没有承受该伤害的成员仍会收到红色闪烁、镜头震动以及实际落到身上的伤害类型对应的受伤音效,所以摔落听起来像摔落,灼烧听起来像灼烧。受限于原版自身的受伤冷却时间,并且对承受该伤害的人跳过。

死亡与物品复制。 关闭 keepInventory 时,死亡的玩家会掉落共享物品栏,因此整组的那份就在他们倒下的地方。其他所有人在被击杀前,其共享槽位会被清空,否则他们每个人都会掉落同一批物品的一份副本。你选择不共享的槽位永不被触及,会正常掉落。开启 keepInventory 时,什么都不掉落,也不清空任何东西。

持久化。 该池存储在 <world>/livesshared/<group>.dat,并在登出、关闭以及每 autosaveMinutes 分钟时保存。没有它的话,重启后第一个登录的玩家会以自己的状态为整组播种。

已知特性

  • 图腾无法让你免于同伴的死亡。 共享死亡使用与 /kill 相同的伤害来源,会绕过无敌。
  • 信标可能使共享效果闪烁。 信标只对范围内的玩家刷新其效果;当范围外某名玩家持有的那份效果耗尽时,整组会跟随他们,直到信标下一次脉冲。
  • 生命值是以数值形式共享的。 最大生命条较小的玩家会被限制在自己的上限,而不是显示整组的完整池。
  • 生命恢复会随组规模放大。 生命值双向累加,所以多名玩家同时进行生命恢复会以多倍治疗该池。饥饿值是唯一被分摊的属性。

安装

生命共享是服务端模组。只有服务器需要它,玩家用未修改的客户端即可加入。

Minecraft Fabric NeoForge
26.2 livesshared-1.0.0+mc26.2.jar livesshared-1.0.0+mc26.2-neoforge.jar
26.1.2 livesshared-1.0.0+mc26.1.2.jar livesshared-1.0.0+mc26.1.2-neoforge.jar
  1. 将对应你的加载器和 Minecraft 版本的 jar 放入服务器的 mods 文件夹。在 Fabric 上,还需添加 Fabric API;NeoForge 无需其他东西
  2. 启动服务器。首次运行时会写出 config/livesshared.json
  3. 在将其添加到已有世界之前,请阅读上文关于现有世界的说明

四个构建版本行为完全一致。单人游戏同样可用,且只有一名玩家时,该模组与原版没有区别。