EmakiAttribute 总览
EmakiAttribute 是 Emaki Series 的 RPG 属性与战斗模块。它处理三系伤害计算(物理、射击、法术)、资源管理(生命值、法力值等)、PDC 属性读写,以及战斗反馈。
基本信息
| 属性 | 值 |
|---|---|
| 版本 | 3.3.0 |
| 主类 | emaki.jiuwu.craft.attribute.EmakiAttributePlugin |
| 根命令 | /emakiattribute |
| 别名 | /eattribute、/ea |
| 强依赖 | EmakiCoreLib |
| 软依赖 | MythicMobs、PlaceholderAPI、MMOItems |
这个模块做什么
简单来说,EmakiAttribute 负责以下几件事:
- 定义和管理所有 RPG 属性(攻击力、防御力、暴击率等),以及生命值、法力值这类资源
- 从装备物品上读取属性(通过 PDC 或 Lore 解析),汇总成玩家的属性快照
- 管理临时属性——通过
TemporaryAttributeService给玩家附加带过期时间的属性加成或覆盖,过期后自动移除 - 在战斗发生时,根据伤害类型定义走阶段式计算流程——基础伤害、暴击判定、防御减免,一步步算出最终伤害
- 把属性同步回 Bukkit 原版系统(比如最大生命值),让原版 HUD 也能正确显示
- 对接 MythicMobs、MMOItems、PlaceholderAPI,不需要额外配置就能和这些插件协作
整个系统的设计思路是数据驱动:属性、伤害类型、计算阶段都通过 YAML 配置定义,不需要改代码就能调整战斗数值和公式。
config.yml 完整格式
yaml
# 配置文件版本号,请勿手动修改
config_version: 1
# 语言文件标识,对应 lang/ 目录下的文件名
language: zh_CN
# 是否启用硬锁伤害模式
# 开启后,只有 allowed_damage_causes 中列出的伤害原因才会触发属性伤害计算
hard_lock_damage: true
# 默认伤害类型 ID,当无法确定伤害类型时使用
default_damage_type: physical
# 资源自然回复的间隔(单位:tick,20 tick = 1 秒)
regen_interval_ticks: 20
# 属性同步延迟(单位:tick),用于装备变更后延迟同步原版属性
sync_delay_ticks: 1
# 默认属性档案 —— 所有玩家共享的基线属性与资源上限
default_profile:
id: default
priority: 1000000
description: "所有玩家共享的默认基础属性与资源上限。"
# 资源定义
resources:
health:
display_name: "生命值"
default_max: 20.0 # 默认最大值
min_max: 1.0 # 最大值下限
max_max: 2048.0 # 最大值上限
sync_to_bukkit: true # 是否同步到 Bukkit 原版生命值
full_on_init: true # 初始化时是否填满
mana:
display_name: "法力值"
default_max: 100.0
min_max: 0.0
max_max: 99999.0
sync_to_bukkit: false
full_on_init: true
# 属性默认值
attributes:
physical_attack: 0.0
physical_defense: 0.0
physical_damage_bonus: 0.0
physical_crit_rate: 0.0
physical_crit_damage: 0.0
projectile_attack: 0.0
projectile_damage_bonus: 0.0
projectile_crit_rate: 0.0
projectile_crit_damage: 0.0
projectile_defense: 0.0
spell_attack: 0.0
spell_damage_bonus: 0.0
spell_crit_rate: 0.0
spell_crit_damage: 0.0
spell_defense: 0.0
health_regen: 0.0
mana_regen: 0.0
# 合成伤害反馈配置
synthetic_hit_feedback:
knockback: true # 是否产生击退效果
knockback_strength: 0.4 # 击退强度
hurt_sound: true # 是否播放受伤音效
# 允许的伤害原因列表
# 每个条目可以是简单字符串或完整对象
allowed_damage_causes:
- cause: entity_attack
damage_type: physical
enabled: true
- cause: projectile
damage_type: projectile
- cause: entity_sweep_attack
damage_type: physical
- cause: entity_explosion
damage_type: physical关于 default_profile
default_profile 是所有玩家的属性基线。如果你需要为不同职业或场景设置不同的基础属性,可以在 profiles/ 目录下创建额外的档案文件。多个档案会按 priority 排序后依次叠加——数值越大优先级越高。
关于 hard_lock_damage
hard_lock_damage: true 意味着只有 allowed_damage_causes 里明确列出的伤害原因才会走属性伤害计算。没列出的(比如摔落伤害、岩浆伤害)会保持原版行为,不经过 EmakiAttribute 处理。这样做是为了避免所有伤害都被属性系统接管,导致一些原版机制失效。
目录结构
| 文件/目录 | 说明 |
|---|---|
attributes/ | 属性定义文件,每个 YAML 定义一个或多个属性 |
conditions/ | PDC 读取条件,控制物品属性何时生效 |
damage_types/ | 伤害类型定义,包含计算阶段配置 |
lore_formats/ | Lore 格式模板,控制属性在物品描述中的显示和解析 |
profiles/ | 属性档案,定义不同场景下的基线属性 |
config.yml | 主配置文件 |
attribute_balance.yml | 战力计算的属性分数配置 |
lang/ | 语言文件 |
默认内容统计
| 内容类型 | 数量 |
|---|---|
| 属性定义 | 42 |
| 条件定义 | 4 |
| 伤害类型定义 | 3 |
42 个默认属性分类概览
- 资源类(4):health、mana、health_regen、mana_regen
- 物理系(8):physical_attack、physical_damage_bonus、physical_defense、physical_armor_penetration、physical_crit_rate、physical_crit_damage、physical_crit_evasion、physical_crit_multiplier_resistance
- 射击系(8):projectile_attack、projectile_damage_bonus、projectile_defense、projectile_armor_penetration、projectile_crit_rate、projectile_crit_damage、projectile_crit_evasion、projectile_crit_multiplier_resistance
- 法术系(8):spell_attack、spell_damage_bonus、spell_defense、spell_armor_penetration、spell_crit_rate、spell_crit_damage、spell_crit_evasion、spell_crit_multiplier_resistance
- 移动/工具(6):speed、movement_speed、attack_speed、entity_scale、entity_interaction_range、block_interaction_range
- 特殊(6):real_damage、lifesteal、percentage_lifesteal、lifesteal_resistance、dodge_chance、attribute_power
- 原版映射(2):attack_speed_vanilla、max_health_vanilla