简体中文
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 |
典型工作流
- 在
attributes/中定义属性 - 在
lore_formats/中定义展示格式 - 在
damage_types/中定义伤害类型如何计算 - 让 Item / Forge / Strengthen / Gem 等模块写入属性 payload
- 玩家装备变化或执行同步后, Attribute 汇总属性
- 战斗发生时, 根据伤害类型, 攻击方属性, 防御方属性计算结果
- 通过消息, 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 与参数 |
| API | EmakiAttributeApi, PdcAttributeAccess 与接入规则 |
| 事件 API | 对外公开的 Bukkit 事件 |
| 伤害事件 API | EmakiAttributeDamageEvent 详解 |
建议配置顺序
- 先使用默认属性启动服务器, 确认模块正常加载
- 添加或修改一个属性文件, 执行 reload / lint 检查
- 让一个测试物品写入该属性
- 使用 preview / dump 命令确认属性被读取
- 再接入伤害类型和战斗测试
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'