伤害统计

伤害统计

一个全面的伤害统计模组

DamageStats

面向 Minecraft 的服务端权威伤害追踪与战斗分析。

DamageStats 记录对 LivingEntity 目标造成的成功伤害,并将其转化为实用的战斗信息:总伤害、DPS、命中次数、伤害类型细分、直接来源分析、战斗历史以及可配置的游戏内叠加层。

该模组专为个人战斗分析和服务端管理而设计。统计数据在服务端收集并验证,而每位玩家只能收到他们被允许浏览的视图。

功能

  • 伤害与 DPS 追踪 - 查看最终伤害、原始伤害、减免伤害、DPS、命中次数、平均命中、最高命中、最低命中、击杀数以及每秒命中次数。
  • 多维度伤害数据 - 按伤害类型、直接来源、责任来源、目标和实体实例细分数据。
  • 责任来源解析 - 弹射物伤害归属于其射击者,已驯服生物等归属实体的伤害归属于其主人,同时直接来源仍可用于更深入的分析。
  • 战斗会话与生命周期总计 - 将当前战斗与生命周期总计进行比较,并查看可配置数量的已结束战斗。
  • 交互式统计 GUI - 选择来源和目标,搜索并翻页浏览实体选项,切换图表维度,更改会话/生命周期范围,过滤图表行,并查看详细指标。
  • 实例下钻 - 查看记录的生命实体实例以及攻击中涉及的直接来源路径。
  • 可拖拽叠加层 - 将选定的战斗指标保持在屏幕上,并可配置其位置、缩放、不透明度、可见字段,以及每个指标使用当前战斗数据还是生命周期数据。
  • 持久化存储 - 世界专属统计数据存储在存档的 damagestats 目录下,包含事件日志、聚合缓存、索引以及面向恢复的维护路径。
  • JSON 与 CSV 导出 - 将当前视图导出为完整的 JSON 快照和表格化 CSV 文件。
  • 可配置伤害类别 - 通过 config/damagestats-damage-types.json 对伤害类型进行分组,包括其他模组添加的自定义伤害类型。
  • 权限感知浏览 - 普通玩家可以查询自己的输出伤害以及被授权的直接来源下钻;管理员可以浏览全局统计数据并管理服务端存储。

安装

  1. 安装特定 DamageStats 版本所支持的 Minecraft 版本和模组加载器。
  2. 使用该 Minecraft 与模组加载器组合所需的 Java 版本。
  3. 将 DamageStats 的 jar 放入 mods 文件夹。
  4. 多人游戏使用时需在客户端和服务端同时安装 DamageStats。客户端与服务端必须使用兼容的模组版本。
  5. 启动游戏或服务端一次以生成配置文件。

游戏内控制

控制 操作
H 打开 DamageStats 界面
J 显示或隐藏叠加层
/damagestats toggle 启用或禁用新伤害追踪(权限等级 2)
/damagestats storage 打开服务端存储概览(权限等级 2)
/damagestats export 将服务端全局统计数据导出到世界存储目录(权限等级 2)
/damagestats reload 重新加载伤害类型类别(权限等级 2)

默认按键可在 Minecraft 的 控制 菜单下的 DamageStats 类别中更改。

使用 GUI

按 H 打开仪表盘。

  • 使用 来源 和 目标 选择器选择要浏览的内容。
  • 选择图表维度,例如 伤害类型、直接来源、责任来源 或 目标。
  • 在 本次战斗 和 总计 之间切换,以比较当前战斗会话与生命周期数据。
  • 点击图表行以应用筛选、清除筛选或查看记录的实体实例。
  • 当希望所选来源和目标驱动实时同步和叠加层时,使用 设置焦点。
  • 在最近的伤害或数据维护后,使用 刷新 请求服务端权威的最新视图。
  • 打开 更多操作 以查看详细指标、战斗历史、叠加层设置和重置操作。

来源、直接来源和目标

DamageStats 为每个事件保留三种有用的关系:

  • 责任来源 - 被记为该伤害来源的实体,例如射出箭的玩家或已驯服生物的主人。
  • 直接来源 - 直接命中目标的实体,例如箭、火球、生物或近战攻击者。
  • 目标 - 受到伤害的 LivingEntity。

例如,一次箭矢命中可以显示为对该伤害负责的玩家,同时仍保留箭矢的直接来源信息。这使得可以从玩家的输出伤害入手,并查看特定攻击所使用的直接来源。

伤害范围

  • 本次战斗 显示当前活跃的战斗会话。会话在超过配置的超时时间且没有新伤害后结束。
  • 总计 显示当前世界的生命周期累计数据。
  • **已结束战斗摘要可根据服务端配置进行保留。

叠加层

叠加层可显示以下值的选择:

  • 来源和目标
  • 最终伤害和原始伤害
  • 伤害减免和减免率
  • 平均 DPS 和实时 DPS
  • 原始伤害 DPS
  • 命中次数和平均命中
  • 最高最终/原始命中
  • 最高伤害类型
  • 最高直接来源
  • 战斗会话状态

每个支持的指标都可以使用当前战斗或生命周期范围。叠加层编辑器允许拖动叠加层并调整其缩放和背景不透明度。叠加层默认禁用,可通过 J 切换。

服务端配置

通用配置存储在 config/damagestats-common.toml。

选项 默认值 描述
trackingEnabled true 是否记录新的伤害事件。禁用追踪时现有数据会保留。
sessionTimeoutTicks 100 当前战斗结束前无新伤害的刻数。20 刻等于一秒。
dpsWindowTicks 100 用于实时 DPS 的窗口。较短的窗口反应更快;较长的窗口更平滑。
instanceDirectoryRetentionHours 72 非活跃实例候选在候选目录中保留的时长。
instanceDirectoryLimit 5000 目录中保留的实例候选最大数量。这不会删除完整的事件历史。
keepFinishedSessions 10 要保留的已结束战斗摘要数量。设置为 0 则不保留历史。
autoSave true 是否按自动保存间隔定期保存聚合统计数据。
autoSaveIntervalTicks 0 自动保存间隔(刻)。0 禁用定期聚合保存;正常关闭时仍会保存数据。
publicStats true 允许普通玩家浏览超出其个人输出伤害之外的统计数据,需经服务端验证。

仅客户端的叠加层设置存储在 config/damagestats-client.toml。

伤害类型类别

DamageStats 生成 config/damagestats-damage-types.json,包含示例类别,如 Physical、Magic、Fire、Explosion 和 Environment。编辑此文件以添加或重新组织伤害类型 ID:

{
  "Physical": [
    "minecraft:player_attack",
    "minecraft:mob_attack",
    "minecraft:arrow"
  ],
  "Magic": [
    "minecraft:magic",
    "minecraft:indirect_magic"
  ],
  "Environment": [
    "minecraft:fall",
    "minecraft:lava",
    "minecraft:drown"
  ]
}

编辑文件后使用 /damagestats reload。未分配到类别的伤害类型仍可通过其注册表 ID 使用。

权限

DamageStats 使用 Minecraft 权限等级:

  • 权限等级 0 - 玩家可以查看自己的输出伤害、选择目标,并使用被授权的直接来源实例下钻。
  • 权限等级 2 - 管理员可以浏览任意记录的来源和目标、查看全局统计数据、使用服务端存储工具、导出世界统计数据、切换追踪以及重新加载伤害类别。

服务端会验证 GUI 请求;按钮和数据包本身不会授予额外权限。

存储与导出

世界统计数据存储在:

<world>/damagestats/

该目录包含聚合统计数据缓存以及用于权威查询和恢复的持久化事件日志。存储概览可显示事件数量、段大小、索引/缓存使用情况、导出、临时文件、备份和总使用量。

有两种导出路径:

  • GUI 导出 - 将当前浏览且经过权限检查的视图导出到客户端游戏目录下的 damagestats/exports/。
  • /damagestats export - 将服务端统计数据导出到世界的 damagestats/exports/ 目录,需要权限等级 2。

两种导出都会创建匹配的 .json 和 .csv 文件。JSON 包含筛选条件、当前战斗数据、生命周期数据、已结束战斗摘要、分组详情和减免信息。CSV 包含适合电子表格或进一步分析的表格化分组详情。

管理员可以使用存储概览清理临时文件和迁移备份、删除服务端导出或清空所有记录。破坏性清理操作需要确认。

重要说明与限制

  • DamageStats 记录最终伤害大于零的成功伤害事件。完全免疫或其他零伤害事件不会被计入。
  • 减免细节的数量取决于目标 Minecraft 版本和模组加载器提供的伤害事件 API。某些版本或伤害来源可能不会单独暴露每个减免组成部分。
  • 伤害追踪是服务端权威的。客户端无法从未安装 DamageStats 的服务端查询统计数据。
  • 统计数据按世界/存档存储。
  • 实例目录是选择索引和保留机制;修剪它不会抹去完整的记录事件历史。
  • 非常大的历史记录可能会使服务端查询开销更高。请使用预期工作负载对长时间运行或高频的服务端进行测试。

兼容性

DamageStats 以特定版本构建的形式分发。请选择与你的 Minecraft 版本和模组加载器匹配的文件。项目包含独立的版本分支,因此不同版本之间可用功能和底层事件细节可能略有差异。

  • 侧: 客户端和服务端
  • 模组 ID: damagestats

链接

  • 源代码与问题追踪: GitHub
  • 许可证: GNU AGPL 3.0

致谢

由 zershyan 创建。

DamageStats 旨在为其支持的 Minecraft 版本补充战斗测试、服务端管理和技术性玩法分析。