Skip to content

EmakiAttribute ​

先看四件事: EmakiAttribute 负责什么, 配置放在哪里, 怎么和其他模块配合, 以及第一次上手按什么顺序配置

EmakiAttribute 负责真实属性, 资源和战斗结算. 你用它定义 RPG 属性, 伤害类型和条件, 它也为其他模块提供 PDC 属性 API (PDC 即插件自定义数据, 是物品身上由插件写入的隐藏字段). 记住一点: 装备属性要写进 Attribute payload, 只写在 Lore 里不算

基本信息 ​

项目值
模块版本4.8.7
主命令/emakiattribute
别名/eattribute, /ea
硬依赖EmakiCoreLib
软依赖MythicMobs, PlaceholderAPI, MMOItems, BetterHUD
默认权限emakiattribute.use, emakiattribute.points 默认 true; 其余管理权限默认 op

它解决什么问题 ​

当原版属性不够表达 RPG 战斗时, 你可以用 EmakiAttribute 定义自己的属性和伤害逻辑, 例如:

  • 物理攻击, 法术攻击, 投射物攻击
  • 物理防御, 法术防御, 投射物防御
  • 暴击率, 暴击伤害, 暴击抵抗
  • 护甲穿透, 法术穿透, 真实伤害
  • 生命, 法力, 生命恢复, 法力恢复
  • 闪避, 吸血, 攻速, 移动速度, 原版属性映射

这些属性来自 Item, Forge, Strengthen, Gem, Skills 或其他模块写进 PDC 的数据. Attribute 负责统一汇总和计算, 你不用再让每个插件各写一套数值系统

默认配置目录 ​

text
plugins/EmakiAttribute/
├── config.yml
├── attribute_balance.yml
├── attributes/
├── conditions/
├── damage_types/
├── lore_formats/
├── presets/
├── gui/
├── lang/
└── data/

目录说明:

目录 / 文件作用
attributes/每个属性一个文件, 里面写这个属性怎么识别, 怎么限制, 怎么展示
damage_types/伤害类型的定义, 例如 physical, projectile, spell
conditions/属性读取条件 (也就是 PDC 读取规则) 的定义
lore_formats/属性在 Lore 里怎么展示
attribute_balance.yml属性平衡的含义与战力权重配置
presets/属性预设的定义
gui/属性点 GUI 的配置 (attribute_points.yml)
lang/语言文件 (内置 zh_CN.yml, en_US.yml)
data/运行时数据, 例如 data/parent_attributes/<UUID>.yml

典型工作流 ​

  1. 在 attributes/ 中定义属性
  2. 在 lore_formats/ 中定义展示格式
  3. 在 damage_types/ 中定义伤害类型如何计算
  4. 让 Item / Forge / Strengthen / Gem 等模块写入属性 payload
  5. 玩家装备变化或执行同步后, Attribute 汇总属性
  6. 战斗发生时, 根据伤害类型, 攻击方属性, 防御方属性计算结果
  7. 通过消息, ActionBar, PAPI 或 debug 输出结果

与其他模块的关系 ​

模块协作方式
EmakiItem自定义物品可以带基础属性和套装属性
EmakiForge锻造结果可以写入额外属性
EmakiStrengthen强化星级可以加属性
EmakiGem宝石可以提供属性
EmakiSkills技能释放时可以读取或消耗 Attribute 资源, 也可以检查属性门槛
MythicMobs可以作为技能或怪物战斗的一部分
PlaceholderAPI对外展示玩家属性, 资源或战斗数据

功能页面 ​

页面内容
配置目录主配置, 属性目录, 伤害目录, 条件目录和排查顺序
属性定义属性字段, 展示格式和属性 ID 设计
属性衰减曲线高数值属性的阈值, 曲线和调参办法
伤害系统多阶段伤害管线, hard lock, 命中反馈和恢复配置
条件系统装备条件, 属性条件与跨模块条件
Lore 格式Lore 展示模板与读取正则
命令与权限/ea 命令, lint, preview, dump, source, trace 和调试
占位符PlaceholderAPI 输出与伤害消息模板变量
MythicMobs 集成属性伤害 mechanic, 临时属性 mechanic 与属性条件
CoreLib 动作Attribute 注册的 Action ID 与参数
APIEmakiAttributeApi, PdcAttributeAccess 与接入规则
事件 API对外公开的 Bukkit 事件
伤害事件 APIEmakiAttributeDamageEvent 详解

建议配置顺序 ​

  1. 先使用默认属性启动服务器, 确认模块正常加载
  2. 添加或修改一个属性文件, 执行 reload / lint 检查
  3. 让一个测试物品写入该属性
  4. 使用 preview / dump 命令确认属性被读取
  5. 再接入伤害类型和战斗测试

config.yml ​

主配置的完整字段清单, 发货默认值和可复制示例都在配置目录. 下面这些常用小节各管什么:

  • default_profile: 玩家默认资源与属性基础值
  • attribute_sources: 物品属性是否从 Lore / PDC 读取, 以及是否要求双来源一致
  • vanilla_event_damage: 原版伤害是完美接管还是兼容重施
  • shield: 盾牌格挡由原版还是 EA 结算
  • allowed_damage_causes: 原版 DamageCause 到属性伤害类型的映射白名单
  • scaling_curves: 属性超过阈值后的衰减规则, 默认为空

Attribute 注册的动作 ​

EmakiAttribute 会向 CoreLib 动作系统注册属性伤害, 临时属性, 资源, 标签和同步动作. 完整的 Action ID (动作代号), 参数和示例都放在 CoreLib 动作

常用示例:

yaml
actions:
  - 'attribute_damage amount=50 type=physical'
  - 'attribute_add effect_id=forge_buff attribute=physical_attack value=20 duration_ticks=10s'
  - 'attribute_resource_consume resource=mana amount=20'
  - 'attribute_sync all=false'