外观
八份业务配置逐字段参考
本页内容直接取自 SealAttributes 1.0.12 候选源码的默认资源。若你使用正式交付 1.0.8,应以该 JAR 首次启动生成的文件为准,不要把候选字段复制进旧版。
安全修改流程
- 正常停服,备份
plugins/SealAttributes/与数据库。 - 一次只改一个文件;保留
config-version,不要把插件版本写进去。 - 启动或执行
/sa reload,从第一条校验错误开始修复。 - 执行
/sa doctor、/sa health,再用/sa stats、/sa sources和真实战斗验收。 - 数据库、扩展和启动期组件变化应完整重启,不使用 Bukkit
/reload。
config.yml
yaml
# SealAttributes 主配置
# 可编辑项修改后执行 /sa reload;校验失败时旧配置继续生效。
# 配置格式版本,请勿修改。
config-version: 1
# 当前仅支持简体中文,请勿修改。
language: zh_CN
# 由 SealAttributes 统一计算实体之间的 RPG 伤害。
# 当前版本固定为 AUTHORITATIVE,请勿修改。
combat-mode: AUTHORITATIVE
# 选择玩家和怪物使用的裸装属性模板。
# 模板内容在 attributes.yml 顶部;一般只需要改那里的数值。
base-profile:
player: player-default
entity: entity-default
diagnostics:
# 是否在控制台输出配置、兼容和属性来源相关的诊断信息。
# 遇到问题时建议保持开启。
enabled: true
# 相同诊断信息的汇总间隔,单位:秒。可填 10~3600。
summary-seconds: 60attributes.yml
yaml
# 属性设置
# 配置格式版本,请勿修改。
config-version: 1
# 下面先列出全部内置属性。扩展注册的属性会在启动时自动补到本文件末尾。
# 自动补齐只新增缺失块,不会覆盖已有配置;暂时移除扩展也不会删除对应配置。
# 修改后执行 /sa reload,也可以删除不需要覆盖的内置属性块。
# 删除的属性块会自动使用插件默认值,旧版完整配置也可以继续使用。
# enabled:是否启用。关闭后只保留安全默认值,配置和装备加成都暂不生效,也不会显示。
# base-value:没有装备和其他加成时的基础值。
# PERCENT 属性的 base-value 使用小数:0.25 表示 25%,1.5 表示 150%。
# name:游戏内显示的名称;内置属性在 LORE 模式也会用它自动识别属性。
# 扩展属性如需兼容旧 Lore,请在 sources.yml 的 lore.templates 中写明确规则。
# category:GUI 分类;unit:NUMBER 普通数字、PERCENT 百分比、RATING 等级数值。
# category 和 unit 只影响 GUI 分类和显示,不会改变属性的真实类型或计算公式。
# description:GUI 中显示的说明
# order:同一分类内的顺序,可填 0~10000,数字越小越靠前。
# 玩家和怪物想使用不同的裸装数值时,只在这里写不一样的属性。
# 没写到的属性继续使用下面 attributes 里的 base-value。
# 模板中的 PERCENT 属性同样使用小数。
# 例如把 entity-default 的 max_health 改成 20,普通怪物的基础生命就是 20。
base-profiles:
player-default:
max_health: 100.0
entity-default:
max_health: 100.0
attributes:
physical_attack:
enabled: true
base-value: 10.0
name: "物理攻击力"
category: ATTACK
unit: NUMBER
description: "提高普通攻击和物理技能的伤害。"
order: 10
spell_attack:
enabled: true
base-value: 0.0
name: "法术攻击力"
category: ATTACK
unit: NUMBER
description: "提高法术技能的伤害。"
order: 20
attack_speed_bonus:
enabled: true
base-value: 0.0
name: "攻击速度加成"
category: ATTACK
unit: PERCENT
description: "提高近战攻击速度。"
order: 30
true_damage:
enabled: true
base-value: 0.0
name: "真实伤害"
category: ATTACK
unit: NUMBER
description: "造成不受物理和法术防御减免的伤害。"
order: 40
physical_defense:
enabled: true
base-value: 0.0
name: "物理防御力"
category: DEFENSE
unit: NUMBER
description: "降低受到的物理伤害。"
order: 10
spell_defense:
enabled: true
base-value: 0.0
name: "法术防御力"
category: DEFENSE
unit: NUMBER
description: "降低受到的法术伤害。"
order: 20
physical_penetration_rate:
enabled: true
base-value: 0.0
name: "物理穿透率"
category: ATTACK
unit: PERCENT
description: "攻击时忽略目标的一部分物理防御。"
order: 50
spell_penetration_rate:
enabled: true
base-value: 0.0
name: "法术穿透率"
category: ATTACK
unit: PERCENT
description: "攻击时忽略目标的一部分法术防御。"
order: 60
accuracy_rating:
enabled: true
base-value: 100.0
name: "命中等级"
category: ACCURACY_CRITICAL
unit: RATING
description: "降低攻击被目标闪避的概率。"
order: 10
evasion_rating:
enabled: true
base-value: 0.0
name: "闪避等级"
category: ACCURACY_CRITICAL
unit: RATING
description: "提高闪避攻击的概率。"
order: 20
critical_chance:
enabled: true
base-value: 0.0
name: "暴击率"
category: ACCURACY_CRITICAL
unit: PERCENT
description: "提高物理和法术攻击触发暴击的概率。"
order: 30
critical_damage:
enabled: true
base-value: 1.5
name: "暴击伤害"
category: ACCURACY_CRITICAL
unit: PERCENT
description: "决定暴击时造成的伤害倍率。"
order: 40
critical_resistance:
enabled: true
base-value: 0.0
name: "暴击抗性"
category: ACCURACY_CRITICAL
unit: PERCENT
description: "降低敌人对自己造成暴击的概率。"
order: 50
lifesteal_rating:
enabled: true
base-value: 0.0
name: "生命偷取强度"
category: SUSTAIN
unit: RATING
description: "根据实际造成的伤害恢复生命。"
order: 10
reflection_rating:
enabled: true
base-value: 0.0
name: "反伤强度"
category: DEFENSE
unit: RATING
description: "受到攻击时向攻击者返还部分伤害。"
order: 30
healing_power:
enabled: true
base-value: 0.0
name: "治疗强度"
category: SUSTAIN
unit: PERCENT
description: "提高自己发出的主动治疗效果。"
order: 20
received_healing_bonus:
enabled: true
base-value: 0.0
name: "受到治疗加成"
category: SUSTAIN
unit: PERCENT
description: "提高自己受到的主动治疗效果。"
order: 30
max_health:
enabled: true
base-value: 100.0
name: "最大生命值"
category: SURVIVAL
unit: NUMBER
description: "提高实体的最大生命值。"
order: 10
flat_health_regeneration:
enabled: true
base-value: 0.0
name: "固定生命恢复"
category: SUSTAIN
unit: NUMBER
description: "每秒恢复固定数量的生命值。"
order: 40
percent_health_regeneration:
enabled: true
base-value: 0.0
name: "百分比生命恢复"
category: SUSTAIN
unit: PERCENT
description: "每秒按最大生命值的一定比例恢复生命。"
order: 50
movement_speed_bonus:
enabled: true
base-value: 0.0
name: "移动速度加成"
category: UTILITY
unit: PERCENT
description: "提高移动速度。"
order: 10
block_strength:
enabled: true
base-value: 0.0
name: "格挡强度"
category: DEFENSE
unit: PERCENT
description: "提高主动正面格挡时的减伤比例。"
order: 40sources.yml
yaml
# 装备属性读取设置
# item-mode 和 Lore 规则修改后可执行 /sa reload。
# 配置格式版本,请勿修改。
config-version: 1
# 是否由 SealAttributes 自动读取主手、副手和四件护甲。
# 默认开启。以后使用 SealItems 管理全部装备槽时,可以改为 false。
# 关闭后,SealAttributes 只聚合和计算其他插件通过 API 提交的属性,不再自动读取这六个槽位。
# SealItems 已绑定时不能热切换;请正常停服后修改,再完整启动服务器。
built-in-equipment-reader:
enabled: true
# 装备属性读取方式:
# STRUCTURED:读取 PDC 和 MythicMobs 物品中的 SealAttributes,推荐新服务器使用
# LORE:从 Lore 文字中读取属性,适合兼容旧装备
item-mode: STRUCTURED
# 自动读取的原版装备槽。当前版本必须保持此列表和顺序不变。
# 戒指、项链等自定义槽位需要由对应插件通过 API 接入。
equipment-slots:
- MAIN_HAND
- OFF_HAND
- HEAD
- CHEST
- LEGS
- FEET
structured:
# 结构化物品格式版本,请勿修改。
schema-version: 1
# 保存结构化装备属性的 PDC 键,请勿修改。
pdc-key: sealattributes:item_attributes
lore:
# Lore 识别格式。{name} 是属性名,{value} 是带正负号的数值。
# 例如:物理攻击力 +100、暴击率: +10%、+50 最大生命值。
# 百分比请填写人类百分数:10 或 10% 都表示 10%,不要填写 0.1。
formats:
number: ["{name} {value}", "{name}: {value}", "{name}:{value}", "{value} {name}"]
percent: ["{name} {value}", "{name} {value}%", "{name}: {value}%", "{name}:{value}%", "{value}% {name}"]
# 属性简称。每个属性最多 4 个,不能与其他属性名称或简称重复。
# 只填写需要简称的属性,其他属性不用配置。
# 示例:physical_attack: ["物理攻击", "物攻"]
aliases: {}
# 旧版、扩展属性或特殊 Lore 的高级规则,最多 64 条;attribute 填完整 namespace:path。
# TOTAL_PERCENT 只适用于普通数值属性。
# 一般保持为空即可,详细格式见管理员指南。
templates: []combat.yml
yaml
# 战斗数值设置
# 修改后执行 /sa reload;整份配置会先校验再一次性生效。
# 配置格式版本,请勿修改。
config-version: 1
hit:
# INDEPENDENT 保持传统独立随机;PRD 会降低连续脸黑,但不持久化连败状态。
random-model:
critical: INDEPENDENT
evasion: INDEPENDENT
# 闪避率上限,单位:%。可填 0~95。
maximum-evasion-percent: 90.0
block:
# 格挡最多减免多少伤害,单位:%。可填 0~100。
maximum-reduction-percent: 90.0
# 可以正面格挡的角度,可填 0~360。120 表示角色左右各 60 度。
front-arc-degrees: 120.0
attack-speed:
# 没有攻速加成时,两次普通近战攻击的间隔,可填 1~1200。20 tick 约等于 1 秒。
base-interval-ticks: 10.0
# 攻速再高也不能低于这个攻击间隔,可填 1~1200,且不能超过基础间隔。
minimum-interval-ticks: 2.0
rating:
# 命中、闪避、吸血和反伤的成长参考值。
# 数值越大,同样的属性点带来的效果越弱,可填 1~1000000。
reference: 100.0
reflection:
# 反伤后至少为攻击者保留多少生命,可填 0~1000000。填 1 表示反伤不能直接击杀。
minimum-remaining-health: 1.0
regeneration:
# 生命恢复结算间隔,单位:tick,可填 1~1200。默认每秒一次。
interval-ticks: 20
time:
# Minecraft 每秒 tick 数,当前版本固定为 20,请勿修改。
ticks-per-second: 20
capacity:
# 最多同时记录多少个正在战斗的玩家或实体。
# 这不是服务器人数上限,可填 1~65536,一般无需修改。
maximum-tracked-subjects: 4096database.yml
yaml
# 数据库设置
# 除下面明确标注“需要重启”或“下次启动”的字段外,其余字段可用 /sa reload 应用。
# 配置格式版本,请勿修改。
config-version: 1
# 可填 SQLITE 或 MYSQL。默认 SQLITE,单服可直接使用。
# 修改数据库类型后必须重启,插件不会自动迁移两种数据库之间的数据。
type: SQLITE
sqlite:
# 数据库文件相对于 plugins/SealAttributes/ 的位置。
file: storage/sealattributes.db
mysql:
# 仅在 type: MYSQL 时使用。修改后需要重启。
host: 127.0.0.1
port: 3306
database: sealattributes
username: sealattributes
# 密码含 #、: 或首尾空格时请用引号包裹;不要提交或分享正式服的真实配置。
password: change-me
# 公网数据库建议开启 SSL;可信内网可按实际情况设置。
use-ssl: false
# 只有 MySQL 认证明确要求时才开启。
allow-public-key-retrieval: false
# 数据库连接池。minimum-idle 可填 0~16,maximum-pool-size 可填 1~16,前者不能超过后者。
# SQLite 的 maximum-pool-size 必须为 1。
# MySQL 小型服务器一般设置 2~4 个连接即可。修改后需要重启。
pool:
minimum-idle: 1
maximum-pool-size: 1
# 等待数据库连接的最长时间,单位:毫秒,可填 1000~30000。
connection-timeout-ms: 5000
# 检查连接是否可用的最长时间,单位:毫秒,可填 250~connection-timeout-ms。
validation-timeout-ms: 2000
# 空闲连接回收时间,单位:毫秒。填 0 表示不回收,其他值至少为 10000。
idle-timeout-ms: 600000
# 单个连接的最长使用时间,单位:毫秒。填 0 表示不限制,其他值至少为 30000。
maximum-lifetime-ms: 1800000
queue:
# 本组修改后需要重启。存储线程数可填 1~8;SQLite 必须为 1。
storage-threads: 1
# 等待处理的数据库任务上限,可填 128~16384。一般无需修改。
capacity: 2048
timeouts:
# 单条查询最长等待时间,单位:秒,可填 1~30。
query-seconds: 5
# 下次启动时连接数据库和检查表结构的最长时间,单位:秒,可填 2~60。
startup-seconds: 15
# 玩家登录时加载数据的最长时间,单位:秒,可填 1~60。
preload-seconds: 15
# 停服时等待数据保存完成的最长时间,单位:秒,可填 1~30。
shutdown-seconds: 5
health-checkpoint:
# 在线玩家生命值和当前资源的定时保存间隔,单位:秒。
# 填 0 表示只在玩家退出和服务器关闭时保存;可填 0 或 10~600。
interval-seconds: 60
reconnect:
# 数据库断开后的重试间隔,单位:秒。可填 5~300。
interval-seconds: 15
migration:
# 旧版 MySQL 数据升级前,请先手动备份数据库,再临时改为 true。
# 新安装保持 false;升级成功后也改回 false。本字段在下次完整启动时使用。
mysql-backup-confirmed: falsemessages.yml
yaml
# 插件消息
# 修改后执行 /sa reload;请保留 messages 下全部现有键名,只修改冒号后的文本。
# 配置格式版本,请勿修改。
config-version: 1
# 支持 & 颜色代码。除 prefix 外,所有消息都可以使用 {prefix}。
# 每条消息可以使用的其他变量写在上方注释中,花括号变量不要改名。
messages:
# 无其他变量。
prefix: "&8[&6SealAttributes&8] &r"
# {permission}
no-permission: "{prefix}&c你没有权限:&f{permission}"
player-only: "{prefix}&c该命令只能由在线玩家执行。"
# {player}
player-not-found: "{prefix}&c找不到在线玩家 &f{player}&c,请检查名称后重试。"
# {player}、{reason}
subject-not-ready: "{prefix}&e{player} 的属性尚未就绪:&f{reason}&e,请稍后重试。"
# {usage}
invalid-usage: "{prefix}&c参数不正确。用法:&f{usage}"
reload-started: "{prefix}&e正在读取并校验八份候选配置……"
# {revision}、{pending}
reload-success: "{prefix}&a原子重载成功,配置修订 &f{revision}&a,待完成重建 &f{pending}&a。"
# {error}
reload-failed: "{prefix}&c重载失败,旧完整配置仍在使用:&f{error}"
gui-disabled: "{prefix}&e属性 GUI 当前已关闭,请使用 &f/sa inspect <玩家>&e。"
source-write-started: "{prefix}&e正在写入持久来源,成功前不会改变在线属性……"
# {player}、{source}
source-write-success: "{prefix}&a已更新 &f{player}&a 的持久来源 &f{source}&a。"
# {error}
source-write-failed: "{prefix}&c持久来源写入失败,在线属性未改变:&f{error}"
# {player}、{health}、{maximum}
health-repair-success: "{prefix}&a已修复 &f{player}&a 的 SealAttributes 投影:&f{health}/{maximum}&a。"
# {player}、{error}
health-repair-failed: "{prefix}&c无法修复 &f{player}&c:&f{error}"
database-flush-started: "{prefix}&e正在后台排空存储队列……"
# {drained}、{failed}
database-flush-complete: "{prefix}&a存储排空结束:成功 &f{drained}&a,失败 &f{failed}&a。"gui.yml
yaml
# 属性 GUI 设置
# 修改后执行 /sa reload;校验失败时旧 GUI 配置继续生效。
# 配置格式版本,请勿修改。
config-version: 1
# 是否允许玩家使用 /sa stats 打开属性 GUI。
enabled: true
# 总览页标题。支持 & 颜色代码和 {player}。
title: "&8✦ &6SealAttributes &8· &f{player}"
# 分类页标题。必须保留 {category},也可以使用 {player}。
category-title: "&8✦ &6{category} &8· &f{player}"
# GUI 使用的物品材质,填写目标 1.21.x 中存在的 Bukkit Material 名称。
materials:
filler: BLACK_STAINED_GLASS_PANE
border: GRAY_STAINED_GLASS_PANE
attribute: PAPER
back: ARROW
# 返回按钮名称,支持 & 颜色代码。
back-name: "&6← 返回属性总览"
capacity:
# 最多允许多少个玩家同时打开属性 GUI,可填 1~500。一般无需修改。
maximum-open-views: 100
# 属性分类按钮:
# 下面七个分类块必须全部保留,不能删除、增加或改名。
# slot 是 GUI 格子位置,可填 0~53,不同分类不能重复。
# material 是按钮材质;name 和 lore 支持 & 颜色代码及 {count}。
groups:
attack:
slot: 20
material: NETHERITE_SWORD
name: "&6&l攻击属性"
lore:
- "&8物理 · 法术 · 真实"
- "&7共 &f{count} &7项,点击查看"
defense:
slot: 21
material: SHIELD
name: "&b&l防御属性"
lore:
- "&8减伤 · 穿透对抗 · 格挡"
- "&7共 &f{count} &7项,点击查看"
accuracy_critical:
slot: 22
material: TARGET
name: "&e&l命中与暴击"
lore:
- "&8命中 · 闪避 · 暴击"
- "&7共 &f{count} &7项,点击查看"
sustain:
slot: 23
material: GLISTERING_MELON_SLICE
name: "&a&l续航与治疗"
lore:
- "&8吸血 · 治疗 · 恢复"
- "&7共 &f{count} &7项,点击查看"
survival:
slot: 24
material: TOTEM_OF_UNDYING
name: "&c&l生存属性"
lore:
- "&8生命 · 当前状态"
- "&7共 &f{count} &7项,点击查看"
utility:
slot: 31
material: FEATHER
name: "&f&l功能属性"
lore:
- "&8移动与通用扩展"
- "&7共 &f{count} &7项,点击查看"
custom:
slot: 32
material: ENCHANTED_BOOK
name: "&d&l自定义属性"
lore:
- "&8第三方插件启动期注册"
- "&7共 &f{count} &7项,点击查看"display.yml
yaml
# 生命显示、数字格式和战斗效果
# 修改后执行 /sa reload;整份配置会先校验再一次性生效。
# 配置格式版本,请勿修改。
config-version: 1
health-bar:
# 客户端红心显示方式:
# SCALED 固定红心数量;VANILLA 使用原版显示;UNCHANGED 不修改红心显示。
mode: SCALED
# SCALED 模式显示的生命刻度,可填 2~40。它不是最大生命上限。
scale: 40.0
movement-projection:
# 是否把“移动速度加成”应用到实体。
# OWNED_MODIFIER 应用且不会覆盖其他插件的加成;UNCHANGED 不修改。
mode: OWNED_MODIFIER
respawn-health:
# 复活后的生命:FULL 满血;PERCENT 按下面比例;UNCHANGED 保持服务端结果。
mode: FULL
# PERCENT 模式使用的复活生命比例,可填 1~100。
# 这里填写人类百分数:30 表示 30%,不是 0.30。
percentage: 30.0
number-format:
# 数字格式:COMPACT_CN 显示 1.25万,COMPACT_EN 显示 12.5K,PLAIN 显示 12,500。
mode: COMPACT_CN
# 最多保留几位小数,可填 0~4。
decimal-places: 2
# 是否去掉末尾多余的 0,例如把 1.20万 显示成 1.2万。
trim-trailing-zeros: true
# PLAIN 模式是否显示千位分隔符。
use-grouping-separator: true
hologram:
# 是否启用 DecentHolograms 伤害数字。
enabled: true
# enabled 为 true 时,required=true 会在缺少 DecentHolograms 时拒绝启动。
# required=false 时只关闭伤害数字,不影响插件其他功能。
required: false
# TOTAL 只显示总伤害;BREAKDOWN 分别显示物理、法术和真实伤害。
mode: BREAKDOWN
# 谁能看见伤害数字:ATTACKER、TARGET、PARTICIPANTS、NEARBY;可组合,至少保留一项。
viewers:
- PARTICIPANTS
# 同一目标的多段伤害在多少 tick 内合并,可填 0~100。填 0 表示不合并。
merge-window-ticks: 6
# 伤害数字显示多久,单位:tick,可填 1~200。
lifetime-ticks: 24
# 合并伤害数字的刷新间隔,单位:tick,可填 1~20。
update-interval-ticks: 2
# 伤害数字相对目标眼睛的高度,单位:方块,可填 -5~10。
vertical-offset: 0.6
nearby:
# viewers 包含 NEARBY 时生效;radius 可填 1~64,maximum-viewers 可填 1~128。
radius: 16.0
maximum-viewers: 16
capacity:
# 全服最多同时显示多少个伤害数字,可填 1~2048。
maximum-active: 128
# 每 tick 最多新建多少个伤害数字,可填 1~256。
maximum-creates-per-tick: 32
lines:
# TOTAL 模式必须保留 {total}。
total: "&c&l-{total}"
# BREAKDOWN 模式必须保留 {physical}、{spell}、{true}。
breakdown: "&c物理 {physical} &d法术 {spell} &f真实 {true}"
combat-effects:
# 原版受伤动画。
hurt-animation: true
# 受伤声音。
hurt-sound: true
# 攻击击退。
knockback: true
# 受伤粒子。
particles: true
# 每 tick 最多播放多少次粒子效果,可填 0~256;填 0 可完全关闭。
maximum-particle-bursts-per-tick: 64