Skip to content

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

text
plugins/EmakiAttribute/
├── config.yml
├── attribute_balance.yml
├── attributes/
├── damage_types/
├── conditions/
├── lore_formats/
├── presets/
├── gui/
├── lang/
└── data/
PathPurpose
config.ymlMain config: default resources, damage interception, regeneration, scaling curves, and vanilla damage mappings.
attribute_balance.ymlAttribute 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

FieldDescription
versionConfig version maintained by default resource sync.
languageLanguage file id.
release_default_dataWhether bundled sample attributes, damage types, read rules, lore formats, balance data, and example scripts are released. Enabled by default.
attribute_sources.read_lore_attributesWhether item attributes are parsed from Lore. Enabled by default.
attribute_sources.read_pdc_attributesWhether item attributes are read from PDC. Enabled by default.
attribute_sources.require_lore_pdc_matchWhether Lore and PDC must match per attribute ID. Disabled by default.
hard_lock_damageWhether unmapped vanilla damage is intercepted.
default_damage_typeFallback damage type.
projectile_damage_typeDefault 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_damageVanilla 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_invulnerabilityWhether 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.scopeAttack 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_ticksResource regeneration interval.
sync_delay_ticksDelay before syncing attributes to Bukkit.
health_display_scalingClient health bar display compression. It changes only client-side display, not real max health, current health, or damage calculation.
default_profileDefault resources and attributes.
synthetic_hit_feedbackKnockback and hurt sound feedback after vanilla damage interception.
scaling_curvesRules for diminishing returns after thresholds.
allowed_damage_causesBukkit 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:

yaml
attribute_sources:
  read_lore_attributes: true
  read_pdc_attributes: true
  require_lore_pdc_match: false

The 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:

yaml
allowed_damage_causes:
  - cause: FALL
    damage_type: physical
    enabled: true
  - cause: LAVA
    damage_type: physical
    enabled: true
FieldDescription
causeBukkit DamageCause name.
damage_typeDamage type id from damage_types/*.yml.
enabledWhether this mapping is active.
damageOptional 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

  1. Define attribute ids and display formats in attributes/.
  2. Add default values to default_profile.
  3. Configure damage pipelines in damage_types/.
  4. Tune score weights in attribute_balance.yml.
  5. Write attributes from equipment, gems, strengthening, forging, or item modules.
  6. Use /ea lint to check configuration.
  7. Use /ea preview or /ea dump to verify final player attributes.