玩家伤害反馈

玩家伤害反馈

查看你所受的伤害,以及你对其他玩家造成的伤害。

玩家伤害反馈

查看你所受的伤害,以及你对其他玩家造成的伤害。 每当玩家受伤时,一个数字就会弹出——受害者始终能看到它,如果伤害来自另一个玩家,该玩家也能看到。设计上适配多人游戏:服务器会精确告诉每个客户端它可以看什么。


这个模组是做什么的?

伤害数字,仅针对玩家

大多数伤害数字模组会在所有受伤的目标上显示浮动数字——僵尸、牛、物品展示框等等。这个模组只做一件事:玩家。当玩家受到伤害时,一个数字会出现在他们上方。

两种视角,两种颜色

  • 受害者 始终看到自己受到的伤害(默认为红色)。
  • 攻击者,如果伤害来自另一位玩家,可以看到自己造成的伤害(默认为白色)——这样 PvP 终于有了一个数字来反应,而不是通过一个你甚至看不到的生命值条来猜测。

两种颜色都可配置,如果只希望玩家看到自己的伤害,攻击者的视角可以完全关闭。

真正多人游戏安全

服务器监视真实的伤害事件——在护甲、附魔和吸收效果全部生效之后——并向有权看到结果的客户端发送一个微小的数据包。没有基于生命值条变化的客户端猜测,所以你看到的数字永远是实际发生的数字,而没有安装模组的玩家则不会收到任何额外信息。


配置

config/player_damage_feedback-client.toml(客户端侧,不影响平衡性)

# 总开关
enabled = true

当你击中敌人时,也在其上方显示数字

showToAttacker = true

大小:

# 不是像素。伤害数字是直接渲染在世界中的 3D 文字公告板(类似名牌),
# 因此这是世界空间缩放倍率。
# 1.0 = 近距离下正常可读大小。
# 0.5 = 一半大小,2.0 = 两倍大小。
size = 1.0

时机和运动:

# 数字在屏幕上停留的时间,以游戏刻为单位(20 刻 = 1 秒)
lifetimeTicks = 40

初始上升速度(格/刻),之后受重力拉回

riseSpeed = 0.09

随机水平偏移(格),使连续打击不会完全重叠

horizontalSpread = 0.3

颜色(十六进制 RGB):

# 当你受到伤害时数字的颜色
colorTaken = "#FF5555"

当你造成伤害时,敌人上方数字的颜色

colorDealt = "#FFFFFF"


它的工作原理

  1. 玩家受到伤害。Forge 在服务器上触发 LivingDamageEvent,在所有减伤效果结算之后。
  2. 服务器将最终数值发送给受害者的客户端。
  3. 如果伤害来源是另一位玩家,服务器也会将其发送给攻击者的客户端。
  4. 每个客户端检查自己的配置,如果允许,则在受害者上方生成一个浮动数字——渲染为始终面向摄像机的公告板,在轻微重力作用下上升和下落,并在其生命周期内淡出。

没有 Mixin,不使用原版粒子注册表,也没有客户端侦测技巧——只需要一个事件、一种数据包类型,并在世界的粒子渲染阶段直接绘制。


要求

在客户端和服务器上都安装本模组才能获得完整体验——原版客户端连接到运行此模组的服务器时不会收到额外数据包,而装有模组的客户端连接到原版服务器时则没有东西可接收。


致谢

  • 灵感来自 Lua (foxgirl.dev) 的 damagenumbers——一个适用于普通生物伤害数字的优秀模组。本模组覆盖了纯客户端模组无法做到的一件事:告诉攻击玩家他们对另一名玩家造成了多少伤害。