- 版权类型
- 原创
- 插件中文名称
- GT伤害
- 插件英文名称
- GTDamage
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- Folia
- Purpur
- PufferFish
- Leaves
- 其他核心
- 语言支持
- 中文(简体)
- 适配版本(Java)
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
- 1.15
- 1.14
- 1.13
- 1.12
[MD] --- # ⚔ GTDamage 插件介绍与使用教程 > 一个轻量、可扩展的伤害全息显示插件 > 支持主流属性插件自动适配、客户端 / 服务端双渲染 --- ### BUG反馈与需求提出Q群: `985955382` ### 群内可领取福利插件 以及GTDungeonTeam(一款兼容市面上主流UI引擎和副本的组队插件)支持跨服组队 ## 📖 插件简介 **GTDamage** 是为 Minecraft `1.17 ~ 1.21+` 服务器设计的伤害数字显示插件。 在实体受到伤害时,于其头顶飘出一段彩色伤害数字,支持物理、暴击、魔法、真实、技能、远程、治疗等多种伤害类型,**每种类型可独立配置颜色、前缀、后缀与显示倍率**。 ### ✨ 核心特性 | | 特性 | 说明 | | :---: | --- | --- | | 🔌 | 多属性插件自动适配 | CraneAttribute / SX-Attribute / AttributePlus / MMOItems / EcoSkills | | 🎨 | 多套渲染方案 | ArcartX 客户端、PaiUI 客户端、发包、服务端全息字,按优先级互斥选择 | | 🧩 | 伤害类型完全自定义 | 配置文件加一行就有新类型,无需改代码 | | 🅰️ | 字体映射 + 权限分级 | VIP / 自定义字体包,权重自动取最高 | | 🔮 | PlaceholderAPI 扩展 | `%gtdamage_hide_self%` 等占位符 | | ⚡ | 全异步处理 | 性能友好,不卡主线程 | --- ## 🔌 可选依赖 - `CraneAttribute` / `SX-Attribute` / `AttributePlus` / `MMOItems` / `EcoSkills` 任意一个或多个 ### 🎯 可选 - `PlaceholderAPI` ─ 占位符扩展 - `Adyeshach` ─ 调用Adyeshach显示全息字(比实体更流畅) - `ArcartX` 插件 + 客户端 ─ 客户端渲染 - `PaiUI` 插件 + 客户端 ─ 客户端渲染 ### 📝 安装步骤 1. 将插件本体放入 `plugins/` 目录 2. 启动服务器,首次运行自动生成 `plugins/GTDamage/config.yml` 3. 按需修改 `config.yml` 4. 执行 `/gtdamage reload` 重载配置 > 💡 **提示:** 软依赖(`CraneAttribute`、`AttributePlus`、`SX-Attribute`、`PlaceholderAPI`、`ProtocolLib`)插件会自动检测,非必须安装。 --- ## 💬 命令列表 > **主命令:** `/gtdamage`(别名 `/gtd`、`/damagehologram`) | ⚙️ 子命令 | 🔑 权限 | 📋 说明 | | --- | --- | --- | | `/gtdamage help` | — | 📜 显示帮助 | | `/gtdamage info` | `gtdamage.info` | 查看当前适配器、检测到的插件、伤害类型数 | | `/gtdamage reload` | `gtdamage.admin` | 重载配置文件 | | `/gtdamage clear` | `gtdamage.admin` | 清除所有已生成的全息字 | | `/gtdamage hide` | `gtdamage.hide` | 玩家切换是否显示自己受到的伤害数字 | | `/gtdamage debug` | `gtdamage.admin` | 切换调试模式(控制台输出 provider 选择与渲染日志) | | `/gtdamage setting <玩家名>` | `gtdamage.admin` | 查看某玩家是否隐藏了伤害显示 | --- ## 🔮 PlaceholderAPI 变量 > 需安装 PlaceholderAPI,占位符标识符为 `gtdamage` | 占位符 | 返回值 | 📋 说明 | | --- | --- | --- | | `%gtdamage_hide_self%` | `true` / `false` | 👤 玩家是否隐藏了自己受到的伤害 | | `%gtdamage_hide_others%` | `true` / `false` | 👥 玩家是否隐藏看到的他人伤害 | --- ## ⚙️ 配置详解 > 📁 配置文件路径:`plugins/GTDamage/config.yml` ### 伤害类型 > 每种伤害类型独立配置颜色、前缀、后缀、显示倍率。 ```yaml damage-types: physical: color: "§f" prefix: "" suffix: "" scale: 1.0 scale-enabled: false critical: color: "§6" prefix: "§l✦ " suffix: "§r" scale: 1.5 # 原数值× 1.5 显示 scale-enabled: true # 是否启用倍率 magic: color: "§b" prefix: "✦ " suffix: "" scale: 1.0 scale-enabled: false true: color: "§c" prefix: "§l⚔ " suffix: "§r" skill: color: "§d" prefix: "⚡ " suffix: "" ranged: color: "§e" prefix: "➤ " suffix: "" heal: color: "§a" prefix: "❤ " suffix: "" ``` **🧩 添加自定义类型:** 在 `damage-types:` 下加一段即可,名字任意(如 `curse`、`bleed`),适配器可返回该类型名。 --- ### 🪧 全息字设置 ```yaml hologram: display-time: 60 # 显示时长(tick,60=3秒) height-offset: 2.5 # 高度偏移(实体头顶多少格) random-offset: # 随机偏移避免重叠 enabled: true x: 0.5 z: 0.5 animation: #动画效果下个版本更新 enabled: false types: [float] # float=上浮动画 float-speed: 0.02 float-distance: 0.8 ``` --- ### 📐 显示格式与过滤 ```yaml format: decimal-places: 1 # 小数位数(0=整数) thousands-separator: "," # 千位分隔符,留空禁用 decimal-separator: "." # 小数点符号 min-display-value: 0.1 # 最小显示值 range: view-distance: 30 # 多少格外不渲染 only-for-combatants: false # true=只让攻击者/被攻击者看到 filter: ignored-damage-causes: [] # 大写,如 [FALL, DROWNING, FIRE_TICK] ignored-entity-types: [] # 实体类型,如 [CREEPER, ZOMBIE] min-damage: 0.0 # 低于此值的伤害不显示 ignore-self-damage: true # 忽略玩家对自己的伤害 ``` --- ### 🅰️ 字体映射(搭配材质包) ```yaml font-mapping: enabled: false papi-support: false # 启用后会先解析 PAPI 占位符 groups: default: # 默认组(无权限要求) permission: "" weight: 0 mapping: "0": "零" "1": "一" "2": "二" .... vip: # VIP 字体(需权限 gtdamage.font.vip) permission: "gtdamage.font.vip" weight: 10 mapping: "0": "𝟎" "1": "𝟏" .... legend: # 传说字体(需权限 gtdamage.font.legend) permission: "gtdamage.font.legend" weight: 20 mapping: "0": "𝟘" "1": "𝟙" .... ``` > 💡 **机制:** 玩家拥有多个权限组时取权重最高的那一组。 --- ### 🛡️ 兼容模式与性能 ```yaml compatibility: enabled: false # 多个属性插件同时存在时开启 plugin-priority: # 适配器优先级(数字越大越优先) CraneAttribute: 80 SX-Attribute: 60 AttributePlus: 50 LegendAttribute: 40 performance: max-holograms: 100 # 最多同时存在的全息字 cleanup-interval: 100 # 清理检查间隔(tick) async-processing: true # 强烈建议开启 max-events-per-tick: 50 # 每 tick 最多处理多少伤害事件 ``` > 💡 **提示:** 更详细的配置详见 `plugins/GTDamage/config.yml` 配置文件内有更为详细的注释 --- [/MD]
[MD]
---
### 🧰 核心 API:GTDamageAPI
入口类:`gt.plugin.gtdamage.api.GTDamageAPI`(Kotlin object / Java 静态类)
#### 🎯 全息字显示
| 方法 | 用途 | 📋 说明 |
| --- | --- | --- |
| `showDamageHologram(entity, damage, type)` | 单行伤害 | 自动按 `type == "critical"` 判断暴击 |
| `showDamageHologram(entity, damage, type, isCritical)` | 单行伤害(自定义暴击) | 暴击标记完全可控 |
| `showMultipleDamageHolograms(entity, list)` | 多行伤害(Kotlin) | `List<Pair<Double, String>>` |
| `showMultipleDamageHolograms(entity, vararg)` | 多行伤害(Java) | 变长参数 |
| `showHealHologram(entity, amount)` | 治疗数字 | 等同于 `showDamageHologram(.., "heal", false)` |
**Kotlin 调用示例:**
```kotlin
import gt.plugin.gtdamage.api.GTDamageAPI
// 单行
GTDamageAPI.showDamageHologram(victim, 128.0, "critical")
// 多行(技能连击场景)
GTDamageAPI.showMultipleDamageHolograms(victim, listOf(
100.0 to "critical",
50.0 to "fire",
30.0 to "lightning"
))
// 治疗
GTDamageAPI.showHealHologram(player, 45.0)
```
**Java 调用示例:**
```java
import gt.plugin.gtdamage.api.GTDamageAPI;
import org.bukkit.entity.LivingEntity;
GTDamageAPI.showDamageHologram((LivingEntity) victim, 128.0, "critical");
// 多行
GTDamageAPI.showMultipleDamageHolograms(
(LivingEntity) victim,
new Object[]{100.0, "critical"},
new Object[]{50.0, "fire"}
);
```
**Groovy 脚本示例(Denizen / sx-loc 等):**
```groovy
// 单行
GTDamageAPI.showDamageHologram(victim, 256.0, "skill")
// 多行(带变量)
def damages = [
[200.0, "critical"],
[80.0, "fire"],
[30.0, "ice"]
]
GTDamageAPI.showMultipleDamageHolograms(victim, damages)
```
---
#### ⚙️ 配置获取
| 方法 | 返回 | 📋 说明 |
| --- | --- | --- |
| `getTypeWeight(type)` | `Int` | 读取 `crane-attribute.type-weights.xxx`,默认 1 |
| `getTypeConfig(type)` | `DamageTypeConfig?` | 颜色 / 前缀 / 后缀 / 倍率 |
| `getDisplayTypeByAttribute(attrName)` | `String` | 属性名 → 显示类型,未找到返回 `"physical"` |
```kotlin
val cfg = GTDamageAPI.getTypeConfig("critical")
if (cfg != null) {
println("暴击颜色: ${cfg.color}")
println("暴击前缀: ${cfg.prefix}")
println("暴击倍率: ${cfg.scale}")
}
```
---
#### 🔌 CraneAttribute 集成
| 方法 | 返回 | 📋 说明 |
| --- | --- | --- |
| `isCraneAttributeAvailable()` | `Boolean` | CA 是否已安装并启用 |
| `getCraneAttributeAdapter()` | `Any?` | 适配器名("CraneAttribute" / null) |
---
#### 👁️ 玩家可见性控制
| 方法 | 用途 |
| --- | --- |
| `hideDamageForPlayer(player)` | 隐藏该玩家**自己受到的**伤害 |
| `showDamageForPlayer(player)` | 恢复显示 |
| `isDamageHiddenForPlayer(player)` | 查询是否隐藏 |
| `hideOtherDamageForObserver(player)` | 隐藏该玩家**看到的他人**伤害 |
| `showOtherDamageForObserver(player)` | 恢复显示 |
> 💡 **提示:** 这俩方法会立即生效,且**不写入配置**。重启失效——需要持久化请自己处理(重连时再调一次即可)。
---
[/MD]
[MD]
---
### ❓ Q1:开了 ArcartX 之后数字不显示?
检查三点:
✅ 配置文件 `display.arcartx: true`
✅ 服务器已装 ArcartX 插件
✅ 玩家已装 ArcartX 客户端
> 🐛 开 `debug` 看控制台 provider 选择日志。
---
### ❓ Q2:PaiUI 飘字出不来?
PaiUI 必须在 `DamageDisplay.yml` 中启用飘字功能,GTDamage 才能通过反射调用。否则会**静默回退**到原生发包。
---
### ❓ Q3:全息字和原版数字会重复?
GTDamage 通过 `EntityDamageByEntityEvent` 的 **MONITOR** 优先级触发。
关闭其他伤害显示插件的同类功能即可。
---
[/MD]