Configuration Directory
EmakiAttribute configuration consists of the main config, attribute definitions, damage types, conditions, lore formats, and attribute balance data. Define a stable attribute naming convention before expanding damage types and equipment sources.
Default directory structure
plugins/EmakiAttribute/
├── config.yml
├── attribute_balance.yml
├── attributes/
├── damage_types/
├── conditions/
├── lore_formats/
├── presets/
├── gui/
├── lang/
└── data/| Path | Purpose |
|---|---|
config.yml | Main config: default resources, damage interception, regeneration, scaling curves, and vanilla damage mappings. |
attribute_balance.yml | Attribute score and balance semantics parameters. |
attributes/ | Individual attribute definitions. |
damage_types/ | Damage pipelines, such as physical, projectile, and spell. |
conditions/ | Attribute read conditions (PDC read rules). |
lore_formats/ | Attribute display format templates. |
presets/ | Attribute preset definitions. |
gui/ | Attribute points GUI configuration (attribute_points.yml). |
lang/ | Language files; bundled zh_CN.yml and en_US.yml. |
data/ | Runtime data, for example data/parent_attributes/<UUID>.yml; usually not edited manually. |
Main config fields
| Field | Description |
|---|---|
version | Config version maintained by default resource sync. |
language | Language file id. |
release_default_data | Whether bundled sample attributes, damage types, read rules, lore formats, balance data, and example scripts are released. Enabled by default. |
attribute_sources.read_lore_attributes | Whether item attributes are parsed from Lore. Enabled by default. |
attribute_sources.read_pdc_attributes | Whether item attributes are read from PDC. Enabled by default. |
attribute_sources.require_lore_pdc_match | Whether Lore and PDC must match per attribute ID. Disabled by default. |
hard_lock_damage | Whether unmapped vanilla damage is intercepted. |
default_damage_type | Fallback damage type. |
projectile_damage_type | Default damage type used when cached projectile hits are resolved. Defaults to projectile, but can point to another loaded damage type such as physical. |
vanilla_event_damage | Vanilla event damage takeover settings. When enabled, vanilla side effects are preserved and the final damage is replaced; when disabled, compatibility synthetic damage mode is used. |
same_signature_ignores_invulnerability | Whether multi-hit attacks from the same attacker under the same attribute snapshot signature and damage type bypass the vanilla invulnerability window. window_ms is the batch window, default 500 ms. |
attack_speed.scope | Attack speed cooldown scope. global (default) lets EmakiAttribute manage every attack, deriving the cooldown from the current vanilla ATTACK_SPEED for items without an EmakiAttribute attack speed value. attribute_only intercepts only items that declare an EmakiAttribute attack speed value and leaves every other item to vanilla. |
regen_interval_ticks | Resource regeneration interval. |
sync_delay_ticks | Delay before syncing attributes to Bukkit. |
health_display_scaling | Client health bar display compression. It changes only client-side display, not real max health, current health, or damage calculation. |
default_profile | Default resources and attributes. |
synthetic_hit_feedback | Knockback and hurt sound feedback after vanilla damage interception. |
scaling_curves | Rules for diminishing returns after thresholds. |
allowed_damage_causes | Bukkit DamageCause to attribute damage mappings. |
Item attribute source policy
attribute_sources controls whether item attributes are read from Lore, PDC, or both, and whether both sources must validate each other:
attribute_sources:
read_lore_attributes: true
read_pdc_attributes: true
require_lore_pdc_match: falseThe default preserves the legacy behavior: all enabled Lore and PDC sources contribute to the item snapshot. When require_lore_pdc_match is enabled, values are compared per attribute ID:
- Present in both sources with equal values: count the attribute once.
- Present in both sources with different values: reject the attribute.
- Present in only one source: reject the attribute.
- Fixed and spread/range values use the same matching rule.
Match mode requires both read switches. Precheck emits a warning when either source is disabled. If both sources are disabled, default, temporary, and other entity-level sources remain available, but equipped items contribute no Lore/PDC attributes.
Vanilla damage mapping
allowed_damage_causes decides which Bukkit DamageCause values enter attribute resolution:
allowed_damage_causes:
- cause: FALL
damage_type: physical
enabled: true
- cause: LAVA
damage_type: physical
enabled: true| Field | Description |
|---|---|
cause | Bukkit DamageCause name. |
damage_type | Damage type id from damage_types/*.yml. |
enabled | Whether this mapping is active. |
damage | Optional base damage before the attribute pipeline. When omitted, the vanilla damage value already computed by the server is used, which suits fall, explosion, burning, drowning, and other height- or state-dependent sources. |
When hard_lock_damage is true, unmapped vanilla damage falls back to default_damage_type. When it is false, unmapped damage keeps vanilla behavior.
Suggested edit order
- Define attribute ids and display formats in
attributes/. - Add default values to
default_profile. - Configure damage pipelines in
damage_types/. - Tune score weights in
attribute_balance.yml. - Write attributes from equipment, gems, strengthening, forging, or item modules.
- Use
/ea lintto check configuration. - Use
/ea previewor/ea dumpto verify final player attributes.