插件作用
QyDamageFont 用于把伤害数字显示为 DragonCore 字体图片,并以虚拟全息的方式显示在受伤实体附近。插件支持多套字体方案,玩家可在 DragonCore GUI 中切换自己已拥有的字体。
前置要求
|
前置 |
说明 |
|
DragonCore |
负责 FontConfig 图片字体和 GUI |
|
QySQL |
保存玩家已拥有字体和当前选择 |
|
Spigot/Paper 1.12.2 |
插件运行环境 |
安装步骤
- 将
QyDamageFont-1.0.0.jar放入服务端plugins目录。 - 确认
DragonCore和QySQL已放入plugins并能正常启动。 - 重启服务器生成配置文件。
- 将字体图片放入 DragonCore 客户端资源包对应路径。
- 根据需要调整
plugins/QyDamageFont/config.yml。
字体图片路径
默认配置使用两套字体:
|
字体方案 |
图片路径 |
|
|
|
|
|
|
小数点、逗号和负号当前使用示例路径:
|
符号 |
default |
custom |
|
小数点 |
|
|
|
逗号 |
|
|
|
负号 |
|
|
如果不需要小数点,可把 hologram.number-format 设为 "0"。
FontConfig 注册
插件默认会自动下发 FontConfig:
font-config:
auto-register: true
register-on-gui-open: true
每套字体的 FontConfig 单独放在 plugins/QyDamageFont/fonts/:
|
文件 |
对应字体方案 |
|
|
|
|
|
|
文件内容复刻 DragonCore 原生 FontConfig.yml 格式。也可以把这些文件里的节点复制到 plugins/DragonCore/FontConfig.yml,交给 DragonCore 原生配置管理。
GUI 分类与分页
字体 GUI 现在支持按分类浏览。每个字体方案在 config.yml 里可配置:
fonts:
default:
category: "BASIC"
不填时默认归入 ALL。
GUI 里分类按钮会请求:
方法.发包('QyDamageFont','damage_font','load',分类)
方法.发包('QyDamageFont','damage_font','load',分类,页数,每页数量)
规则如下:
ALL显示全部字体- 只传分类时,显示该分类全部字体
- 同时传页数和每页数量时,按分页截取
- 页数从
1开始
界面变量会同步:
damage_font当前分类damage_font当前页damage_font最大页damage_font每页数量
常用指令
|
指令 |
权限 |
说明 |
|
|
|
打开字体切换界面 |
|
|
|
手动向客户端下发 FontConfig |
|
|
|
重载插件配置,并向在线玩家重新下发 DragonCore GUI 文件 |
|
|
|
给玩家授权字体 |
|
|
|
移除玩家字体 |
|
|
|
设置玩家当前字体 |
AttributePlus 脚本接入
在 plugins/AttributePlus/script.yml 的 scriptTools 下注册:
scriptTools:
"QyDamageFont": "com.qydamagefont.api.QyDamageFontScriptAPI"
JS 属性脚本中调用:
QyDamageFont.show(entity, damage)
QyDamageFont.show(entity, damage, "custom")
## 1. 注册脚本工具类
在 `plugins/AttributePlus/script.yml` 的 `scriptTools` 下加入:
```yaml
scriptTools:
"QyDamageFont": "com.qydamagefont.api.QyDamageFontScriptAPI"
```
如果原来已经有 `scriptTools`,只追加这一行即可,不要覆盖原有内容。
## 2. JS 属性脚本调用
示例:攻击触发时用 QyDamageFont 显示本次脚本伤害。
```javascript
var priority = 103
var combatPower = 5.0
var attributeName = "字体伤害"
var attributeType = "ATTACK"
var placeholder = "qdf_damage"
function onLoad(attr) {
return attr
}
function runAttack(attr, attacker, entity, handle) {
var damage = attr.getRandomValue(attacker, handle)
if (damage <= 0) {
return false
}
attr.addDamage(attacker, damage, handle)
// 使用观察者自己的当前字体。
QyDamageFont.show(entity, damage)
// 或强制使用某个字体方案。
// QyDamageFont.show(entity, damage, "custom")
return true
}
```
## 3. API 方法
| 方法 | 说明 |
| --- | --- |
| `QyDamageFont.show(entity, value)` | 在实体位置显示数值,使用每个观察者当前选择的字体 |
| `QyDamageFont.show(entity, value, fontId)` | 在实体位置显示数值,强制使用指定字体方案 |
| `QyDamageFont.show(entity, valueText, fontId)` | 字符串数值版本,会先转成数字 |
| `QyDamageFont.showAt(location, value, fontId)` | 在指定 Bukkit Location 显示数值 |
## 4. 注意事项
- `entity` 必须是 `LivingEntity`。
- `fontId` 留空或不传时,会按每个观察者自己的字体选择显示。
- `fontId` 指定为 `custom`、`default` 等时,会强制用该字体方案,不检查玩家是否拥有。
- API 内部会自动切回 Bukkit 主线程,AP 脚本不用自己处理线程。
- 如果 AP 脚本已经调用 `attr.addDamage(...)`,QyDamageFont 这里只负责显示,不会再次造成伤害。
字体授权
默认字体 default 是兜底字体,玩家始终可用。
其他字体需要管理员授权:
/qdf give 玩家名 custom
玩家获得字体后,可使用:
/qdf gui
在界面中切换字体。
新增字体方案
在 fonts 下新增一个方案节点,例如:
fonts:
blue:
display: "&9蓝色数字"
description:
- "&7蓝色伤害字体"
permission: ""
fallback: false
color: "&f"
prefix: ""
suffix: ""
font-file: "blue.yml"
format:
0: ""
dot: ""
comma: ""
minus: ""
然后创建 plugins/QyDamageFont/fonts/blue.yml:
:
path: "fonts/blue/0.png"
width: 9
height: 12
xOffset: 0
yOffset: 0
fontWidth: 8
color: false
完整字体至少需要配置 0-9。如果开启小数或千位分隔,还需要配置 dot、comma、minus。插件也兼容旧写法 "."、","、"-",但推荐用英文别名,避免 Bukkit YAML 把 . 当路径分隔符。
全息轨迹设置
hologram.mode 控制全息渲染方式:
|
值 |
说明 |
|
|
使用 DragonCore 世界文本贴图,避免原版名牌灰色背景 |
|
|
使用虚拟 ArmorStand 名牌,兼容稳定但会有客户端自带灰色背景 |
hologram.common 是两种模式共用参数,例如存在时间、出生偏移、随机偏移、数字格式和过滤条件。entity-blacklist 可配置不显示全息的实体类型,类型名使用 Bukkit EntityType,例如 ARMOR_STAND。
hologram.armor-stand.viewer-radius 是原版名牌模式的服务端发包范围。
hologram.armor-stand.motion 只影响原版名牌模式:
|
参数 |
说明 |
|
|
是否启用服务端位移轨迹 |
|
|
位移刷新间隔 |
|
|
上浮速度 |
|
|
横向漂移速度 |
|
|
横向波动幅度 |
hologram.world-text 只影响 DragonCore 世界文本模式:
|
参数 |
说明 |
|
|
世界文本显示尺寸 |
|
|
透明度 |
|
|
是否跟随玩家视角 |
|
|
是否自发光 |
|
|
是否穿透方块 |
|
|
第一人称是否显示 |
|
|
服务端给该范围内玩家发送 DragonCore 世界文本包 |
|
|
DragonCore 客户端世界贴图渲染距离 |
hologram.world-text.animation.translate 是 DragonCore 客户端位移动画参数:
|
参数 |
说明 |
|
|
是否启用客户端动画 |
|
|
方向轴,通常用 |
|
|
位移距离,负数通常是上浮,正数是下沉 |
|
|
动画延迟 |
|
|
动画时长 |
|
|
循环次数 |
|
|
是否固定动画行为 |
|
|
重置时间 |
|
|
是否绑定实体位置 |
hologram.world-text.animation.scale 是 DragonCore 客户端缩放动画参数:
|
参数 |
说明 |
|
|
是否启用缩放动画 |
|
|
起始缩放倍率,例如 |
|
|
结束缩放倍率,例如 |
|
|
动画延迟 |
|
|
动画时长 |
|
|
循环次数 |
|
|
是否固定动画行为 |
|
|
重置时间 |
如果伤害频率很高,建议适当调大 armor-stand.motion.update-interval-ticks,或在 world-text 模式下直接降低 hologram.world-text.distance 和文本尺寸。
回血显示设置
settings.heal-font 控制回血全息使用哪套固定字体,留空表示不显示回血全息。
settings.heal-detect 控制直接血量变化兜底检测:
|
节点 |
说明 |
|
|
是否兼容 |
|
|
检查在线玩家血量变化的间隔,默认 |
自然回血、药水回血等事件型回血会优先走 Bukkit 回血事件;/heal 这类直接改血量的情况才依赖兜底检测。
数据存储
玩家字体数据保存在 QySQL 表 qydamagefont_players 中。表会在插件启动时自动创建。
注意事项
- 修改
config.yml、fonts/*.yml或graphical/damage_font.yml后执行/qdf reload。该指令会重载服务端缓存,并向在线玩家重新下发 DragonCore GUI 文件。 - 新增或替换字体图片后,客户端可能需要重载 DragonCore 资源。
- 字体识别字符建议使用私用区字符,避免和正常聊天文字冲突。
- 如果图片被颜色影响,保持
color: "&f"或在显示文本前重置白色。


