Skip to content

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

Released under the GPL-3.0 License