Default Config Files
Last updated Sep 21, 2026
Default Config Files
Shipped defaults from SoapsTraits 1.1.5.
On first run, missing files are copied to plugins/SoapsTraits/.
Edit the server copies. Reload does not reset existing files to these defaults.
plugin.yml is not listed here (commands and permissions live on Commands and Permissions).
Schema and key explanations: Traits Configuration. Full dumps below.
config.yml
# SoapsTraits Configuration
# ============================================================
#
# gui.enabled — suite master GUI kill-switch (SoapsCommon).
#
# Fallback trait for players who don't have a class-bound trait.
# If a trait has 'class: WARRIOR' in traits.yml and the player picks
# the Warrior class, that trait is assigned automatically.
# This default is only used when no class match is found.
default-trait: human
settings:
# Print debug info to console (trigger/condition/action logs)
debug-mode: false
# If true, invalid actions/conditions cause that effect to be skipped.
strict-config-validation: true
# Keep the active trait aligned with the player's MMOCore class binding
# on join (class change always reassigns when a binding exists).
class-sync: true
# When true, /sts set (manual assign) is preserved across relogs instead of
# being overwritten by class-sync. Class changes still update the trait.
respect-manual-assign: true
# How often passive (tick) effects run, in ticks. (20 = 1 second)
tick-interval: 20
# Auto-save player data interval in ticks. (6000 = 5 minutes)
save-interval: 6000
# Hard safety cap for effect cooldown values.
max-cooldown-ticks: 72000
# Debounce GUI clicks to avoid spam-triggering actions.
gui-click-debounce-ms: 150
gui:
enabled: true
traits.yml
# ============================================================
# SoapsTraits - Trait Configuration
# ============================================================
#
# Each trait can optionally be linked to an MMOCore class.
# When a player picks that class, the trait is auto-assigned
# (see settings.class-sync in config.yml).
#
# - class: WARRIOR <-- binds this trait to the Warrior class
#
# If no class is set, the trait can only be assigned manually
# via /sts set <player> <trait>.
#
# ---- TRIGGERS ----
# attack Player hits something
# damaged Player takes damage
# kill Player kills an entity
# crit MythicLib weapon/skill crit (vanilla crit fallback)
# skill_cast Player casts an MMOCore skill
# tick Runs every X ticks (see config.yml)
# death Player dies
# respawn Player respawns
# crouch Player toggles sneak
#
# ---- CONDITIONS ----
# health_below: 30% HP percentage check
# health_above: 70%
# health_between: 30-60% Inclusive HP window
# chance: 25% Random roll
# biome: plains
# time: NIGHT / DAY
# distance_to_target: 5 Within this many blocks
# distance_above: 10 At least this many blocks away
# behind_target: true Backstab check
# has_stat: attack_damage Non-zero stat check
# is_sprinting: true
# is_sneaking: true
# is_blocking: true Shield blocking
# is_in_combat: true MMOCore combat tag (false = out of combat)
# has_potion_effect: SPEED
# target_type: ZOMBIE
# has_target: true Context currently has a target
# target_is_player: true Target must be a player
# target_health_below: 35% Target HP percentage check
# world: world_nether
# mana_above: 50%
# mana_below: 20%
# level_above: 10 MMOCore level at least 10
# weather: CLEAR / RAIN / THUNDER
#
# ---- ACTIONS ----
# damage_bonus: 25% Flat or % outgoing damage
# reduce_damage: 30% Flat or % incoming reduction
# heal: 4 Heal HP
# give_mana: 10 Restore mana
# cancel_event: true Cancel the event (dodge)
# send_message: "&aHello!"
# play_sound: ENTITY_PLAYER_LEVELUP
# set_on_fire: 60 Ticks (60 = 3 seconds)
# remove_potion_effect: SLOWNESS
# feed: 6 Restore hunger points
# knockback_target: 1.2 Push current target back
# teleport_forward: 4 Blink forward by distance
# clear_negative_effects: true Remove common debuffs
#
# add_stat: Temporary stat buff
# defense: 15
# duration: 100 Ticks (100 = 5 seconds)
#
# apply_potion_effect:
# type: SPEED
# duration: 60 Ticks (60 = 3 seconds)
# level: 1 Potion level (1 = Speed I, 2 = Speed II)
# target: true Optional — apply to current target instead of self
#
# spawn_particle:
# type: FLAME Any Bukkit particle name
# amount: 15
# spread: 0.3 Spread on all axes (shorthand)
# spread_x: 0.3 Or set each axis individually
# spread_y: 0.5
# spread_z: 0.3
# speed: 0.05 Particle velocity
#
# ---- COOLDOWNS ----
# Add 'cooldown' to any effect to limit how often it fires.
# Value is always in ticks (20 ticks = 1 second).
#
# ---- DURATIONS ----
# All duration values are always in ticks.
# 20 ticks = 1 second.
#
# ---- STATS ----
# attack_damage, crit_chance, crit_damage, defense,
# max_health, speed, health_regen, mana, mana_regen,
# cooldown_reduction
#
# ============================================================
traits:
# ---------------------------------------------------------
# Balance goals (MMOCore companion layer)
# ---------------------------------------------------------
# Traits should feel like class identity — not a second skill tree.
# - Passive stats: small, always-on flavor (~1 role axis)
# - Procs: situational windows with clear tradeoffs
# - chance: usually 10–30%
# - damage_bonus: usually 12–28%
# - reduce_damage: keep under 40%
# - teleport_forward: 2–5 blocks
# - knockback_target: 0.5–1.2
# - tick trigger: always pair with cooldown
# - Use is_in_combat / level_above sparingly for progression feel
#
# ---------------------------------------------------------
# HUMAN - Reliable sustain and recovery
# ---------------------------------------------------------
human:
class: HUMAN
stats:
max_health: 4
health_regen: 0.5
mana_regen: 0.5
effects:
# Second wind while fighting in the danger band
- trigger: damaged
cooldown: 180
conditions:
- is_in_combat: true
- health_between: 20-45%
- chance: 28%
actions:
- heal: 3
- clear_negative_effects: true
- send_message: "&eYou steady yourself."
# Out-of-combat recovery pulse (travel / downtime)
- trigger: tick
cooldown: 140
conditions:
- is_in_combat: false
- health_below: 75%
actions:
- heal: 1
- feed:
food: 1
saturation: 0.5
# ---------------------------------------------------------
# WARRIOR - Frontline pressure and shield control
# ---------------------------------------------------------
warrior:
class: WARRIOR
stats:
max_health: 8
defense: 6
attack_damage: 3
effects:
# Finish pressure on weakened targets
- trigger: attack
cooldown: 90
conditions:
- has_target: true
- target_health_below: 35%
- is_in_combat: true
actions:
- damage_bonus: 18%
- knockback_target: 0.7
- play_sound: ENTITY_PLAYER_ATTACK_STRONG
# Brace while shield-blocking
- trigger: damaged
cooldown: 100
conditions:
- is_blocking: true
actions:
- reduce_damage: 26%
- clear_negative_effects: true
- spawn_particle:
type: CRIT
amount: 8
spread: 0.35
speed: 0.02
# Momentum after a kill mid-fight
- trigger: kill
cooldown: 120
conditions:
- is_in_combat: true
- health_below: 80%
actions:
- heal: 2
- add_stat:
defense: 6
duration: 60
# ---------------------------------------------------------
# MAGE - Mana economy and escape tools
# ---------------------------------------------------------
mage:
class: MAGE
stats:
mana: 28
mana_regen: 2.2
cooldown_reduction: 5
effects:
# Mana surge when casting on empty reserves
- trigger: skill_cast
cooldown: 100
conditions:
- mana_below: 40%
- chance: 32%
actions:
- give_mana: 16
- spawn_particle:
type: ENCHANT
amount: 14
spread: 0.5
speed: 0.08
# Stronger surge once past early levels
- trigger: skill_cast
cooldown: 160
conditions:
- level_above: 12
- mana_below: 30%
- chance: 22%
actions:
- give_mana: 22
- clear_negative_effects: true
- send_message: "&bArcane reserves flood back."
# Arcane blink under pressure
- trigger: damaged
cooldown: 200
conditions:
- health_between: 20-55%
- chance: 20%
actions:
- teleport_forward: 4
- send_message: "&bArcane blink!"
- play_sound: ENTITY_ENDERMAN_TELEPORT
# ---------------------------------------------------------
# ROGUE - Positional burst and evasive tempo
# ---------------------------------------------------------
rogue:
class: ROGUE
stats:
crit_chance: 10
crit_damage: 8
speed: 0.03
effects:
# Backstab opener (works in PvE and PvP)
- trigger: attack
cooldown: 70
conditions:
- has_target: true
- behind_target: true
actions:
- damage_bonus: 24%
- spawn_particle:
type: SMOKE
amount: 10
spread: 0.25
speed: 0.01
# Sprint dodge under pressure
- trigger: damaged
cooldown: 160
conditions:
- is_sprinting: true
- chance: 12%
actions:
- cancel_event: true
- teleport_forward: 3
- play_sound: ENTITY_PHANTOM_FLAP
# Crit finisher — tracks MythicLib critical strikes
- trigger: crit
cooldown: 100
conditions:
- has_target: true
- target_health_below: 30%
actions:
- knockback_target: 0.9
- feed:
food: 2
saturation: 1
# ---------------------------------------------------------
# PALADIN - Guarded anchor with cleanse windows
# ---------------------------------------------------------
paladin:
class: PALADIN
stats:
max_health: 7
defense: 8
health_regen: 1.0
effects:
# Guarded mitigation
- trigger: damaged
cooldown: 80
conditions:
- is_blocking: true
actions:
- reduce_damage: 32%
- spawn_particle:
type: END_ROD
amount: 8
spread: 0.4
speed: 0.02
# Divine recovery when injured in combat
- trigger: damaged
cooldown: 200
conditions:
- is_in_combat: true
- health_below: 35%
actions:
- heal: 4
- clear_negative_effects: true
- play_sound: BLOCK_AMETHYST_BLOCK_CHIME
# Judgement strike on weakened foes
- trigger: attack
cooldown: 120
conditions:
- has_target: true
- target_health_below: 35%
actions:
- damage_bonus: 14%
- set_on_fire: 40
# ---------------------------------------------------------
# ARCHER - Range control and kiting tempo
# ---------------------------------------------------------
archer:
class: ARCHER
stats:
attack_damage: 3
crit_chance: 7
speed: 0.025
effects:
# True long-range precision (rewards spacing)
- trigger: attack
cooldown: 70
conditions:
- has_target: true
- distance_above: 10
- chance: 35%
actions:
- damage_bonus: 20%
- play_sound: ENTITY_ARROW_HIT_PLAYER
# Disengage when focused (PvE + PvP)
- trigger: damaged
cooldown: 180
conditions:
- has_target: true
- is_in_combat: true
- chance: 28%
actions:
- knockback_target: 1.0
- apply_potion_effect:
type: SPEED
duration: 50
level: 2
# Finisher mark on MythicLib crits — glow the target
- trigger: crit
cooldown: 120
conditions:
- has_target: true
- target_health_below: 40%
actions:
- apply_potion_effect:
type: GLOWING
duration: 80
level: 1
target: true
# ---------------------------------------------------------
# BERSERKER - Aggressive low-health momentum
# ---------------------------------------------------------
berserker:
class: BERSERKER
stats:
attack_damage: 6
max_health: 2
health_regen: 0.3
effects:
# Rage breakpoint burst
- trigger: attack
cooldown: 70
conditions:
- health_below: 40%
- is_in_combat: true
actions:
- damage_bonus: 26%
- spawn_particle:
type: DAMAGE_INDICATOR
amount: 6
spread: 0.25
speed: 0.02
# Last stand conversion
- trigger: damaged
cooldown: 180
conditions:
- health_between: 10-30%
actions:
- add_stat:
defense: 12
duration: 80
- feed:
food: 2
saturation: 1
- send_message: "&4Rage hardens your resolve!"
# Kill chain sustain
- trigger: kill
cooldown: 100
conditions:
- health_below: 55%
actions:
- heal: 3
- clear_negative_effects: true
- play_sound: ENTITY_ENDER_DRAGON_GROWL
# ---------------------------------------------------------
# SHOWCASE TRAITS (no class binding)
# Manual assign only — useful for events or testing.
# ---------------------------------------------------------
shadowstep_showcase:
stats:
speed: 0.02
effects:
- trigger: crouch
cooldown: 160
conditions:
- time: NIGHT
- health_between: 30-90%
actions:
- teleport_forward: 5
- apply_potion_effect:
type: INVISIBILITY
duration: 60
level: 1
- play_sound: ENTITY_ENDERMAN_TELEPORT
executioner_showcase:
stats:
attack_damage: 2
effects:
- trigger: attack
cooldown: 100
conditions:
- has_target: true
- target_health_below: 25%
actions:
- damage_bonus: 30%
- knockback_target: 1.1
- send_message: "&cExecution window!"
guardian_showcase:
stats:
defense: 3
effects:
- trigger: damaged
cooldown: 140
conditions:
- health_between: 20-55%
- chance: 40%
actions:
- clear_negative_effects: true
- reduce_damage: 18%
- heal: 2
- spawn_particle:
type: TOTEM_OF_UNDYING
amount: 5
spread: 0.3
speed: 0.01
messages.yml
# SoapsTraits Messages
# Gradient system (consistent by meaning, no bold formatting):
# - Success: #22c55e -> #14b8a6
# - Error/Danger: #ef4444 -> #f97316
# - Warning: #f59e0b -> #f97316
# - Info/Neutral: #60a5fa -> #a78bfa
# - Headers/Titles: #fbbf24 -> #a78bfa
# - Navigation/Clickable: #38bdf8 -> #22d3ee
# - Debug: #e879f9 -> #60a5fa
#
# Legacy & and § codes are accepted alongside MiniMessage (parsed via suite SoapsText where wired).
prefix: "<gradient:#fbbf24:#a78bfa>[SoapsTraits] </gradient>"
# === Trait Assignment ===
trait-assigned: "<gradient:#22c55e:#14b8a6>Assigned trait {trait}.</gradient>"
trait-changed: "<gradient:#60a5fa:#a78bfa>Your active trait is now {trait}.</gradient>"
trait-default-assigned: "<gradient:#60a5fa:#a78bfa>You were assigned the default trait: {trait}.</gradient>"
trait-class-synced: "<gradient:#60a5fa:#a78bfa>Class {class} awakened trait {trait}.</gradient>"
# === Permissions ===
no-permission: "<gradient:#ef4444:#f97316>You do not have permission to use this command.</gradient>"
# === Errors ===
trait-not-found: "<gradient:#ef4444:#f97316>Trait {trait} not found.</gradient>"
player-not-found: "<gradient:#ef4444:#f97316>Player {player} not found.</gradient>"
player-no-trait: "<gradient:#ef4444:#f97316>{player} has no trait assigned.</gradient>"
# === Info Command ===
trait-info-header: "<gradient:#fbbf24:#a78bfa>---------- Trait Info ----------</gradient>"
trait-info-trait: "<gradient:#60a5fa:#a78bfa>Active trait: {trait}</gradient>"
trait-info-status: "<gradient:#60a5fa:#a78bfa>Effects: {status}</gradient>"
trait-info-status-on: "enabled"
trait-info-status-off: "disabled (/sts toggle)"
trait-info-class-binding: "<gradient:#60a5fa:#a78bfa>Bound class: {class}</gradient>"
trait-info-mmocore-class: "<gradient:#60a5fa:#a78bfa>MMOCore class: {class}</gradient>"
trait-info-no-class: "none"
trait-info-stats-header: "<gradient:#60a5fa:#a78bfa>Stat modifiers:</gradient>"
trait-info-stat-entry: "<gradient:#60a5fa:#a78bfa> - {stat}: +{value}</gradient>"
trait-info-no-stats: "<gradient:#f59e0b:#f97316> None</gradient>"
trait-info-effects: "<gradient:#60a5fa:#a78bfa>Configured effects: {count}</gradient>"
trait-info-none: "<gradient:#f59e0b:#f97316>You do not currently have a trait assigned.</gradient>"
# === Admin Commands ===
trait-set-success: "<gradient:#22c55e:#14b8a6>Set {player}'s trait to {trait}.</gradient>"
trait-remove-success: "<gradient:#22c55e:#14b8a6>Removed {player}'s trait. Assigned default trait {default}.</gradient>"
reload-success: "<gradient:#22c55e:#14b8a6>SoapsTraits reloaded successfully.</gradient>"
reload-merge-none: "<gradient:#60a5fa:#a78bfa>No new default keys needed merging.</gradient>"
reload-merge-file: "<gradient:#60a5fa:#a78bfa>Merged {count} new default key(s) into {file}.</gradient>"
# === List Command ===
trait-list-header: "<gradient:#fbbf24:#a78bfa>---------- Available Traits ----------</gradient>"
trait-list-entry: "<gradient:#60a5fa:#a78bfa> - {trait}</gradient>"
# === Debug Command ===
debug-toggle-on: "<gradient:#22c55e:#14b8a6>Debug monitoring enabled for {player}.</gradient>"
debug-toggle-off: "<gradient:#ef4444:#f97316>Debug monitoring disabled for {player}.</gradient>"
debug-header: "<gradient:#e879f9:#60a5fa>---------- Debug: {player} ----------</gradient>"
debug-trait: "<gradient:#e879f9:#60a5fa>Active trait: {trait}</gradient>"
debug-stats: "<gradient:#e879f9:#60a5fa>Base stats: {stats}</gradient>"
debug-effects: "<gradient:#e879f9:#60a5fa>Configured effects: {count}</gradient>"
debug-chat-prefix: "<gradient:#e879f9:#60a5fa>[Debug] </gradient>"
debug-value-true: "true"
debug-value-false: "false"
debug-line-trigger: "<gradient:#e879f9:#60a5fa>[Trigger] {trigger} fired</gradient>"
debug-line-condition: "<gradient:#e879f9:#60a5fa>[Condition] {description} -> {result}</gradient>"
debug-line-action: "<gradient:#e879f9:#60a5fa>[Action] {description} executed</gradient>"
debug-line-stat-duration: "<gradient:#e879f9:#60a5fa> for {duration}</gradient>"
debug-line-stat: "<gradient:#e879f9:#60a5fa>[Stat] {stat} {value}{duration}</gradient>"
debug-stats-none-value: "none"
# === Help (paginated) ===
help-header: "<gradient:#fbbf24:#a78bfa>---------- SoapsTraits Help ----------</gradient>"
help-page-info: "<gradient:#60a5fa:#a78bfa>Page {page}/{total} · Click a command to insert it</gradient>"
help-divider: "<gradient:#60a5fa:#a78bfa>----------------------------------------</gradient>"
help-entry: "<click:suggest_command:'/sts {command}'><hover:show_text:'<gray>{usage}</gray>'><gradient:#38bdf8:#22d3ee> /sts {command}</gradient> <gradient:#60a5fa:#a78bfa>— {description}</gradient></hover></click>"
help-nav: "{prev}<gradient:#60a5fa:#a78bfa> Page {page}/{total} </gradient>{next}"
help-nav-prev: "<click:run_command:'/sts help {page}'><hover:show_text:'<gray>Go to page {page}</gray>'><gradient:#38bdf8:#22d3ee>« Back</gradient></hover></click>"
help-nav-next: "<click:run_command:'/sts help {page}'><hover:show_text:'<gray>Go to page {page}</gray>'><gradient:#38bdf8:#22d3ee>Next »</gradient></hover></click>"
help-nav-prev-empty: "<dark_gray>« Back</dark_gray>"
help-nav-next-empty: "<dark_gray>Next »</dark_gray>"
help-empty: "<gradient:#f59e0b:#f97316>No commands available for your permissions.</gradient>"
help-console-header: "---------- SoapsTraits Help (page {page}/{total}) ----------"
help-console-entry: " /sts {command} — {description}"
help-console-footer: "Use /sts help <page> for more pages."
# Kept for older configs that still reference this key
command-usage: "<gradient:#60a5fa:#a78bfa>Use /sts help for commands.</gradient>"
# === New Command Messages ===
player-reset-success: "<gradient:#22c55e:#14b8a6>Reset trait data for {player}.</gradient>"
trait-toggle-on: "<gradient:#22c55e:#14b8a6>Trait {trait} is now enabled.</gradient>"
trait-toggle-off: "<gradient:#f59e0b:#f97316>Trait {trait} is now disabled.</gradient>"
stats-header: "<gradient:#fbbf24:#a78bfa>---------- Stats for {player} ----------</gradient>"
stats-trait: "<gradient:#60a5fa:#a78bfa>Trait: {trait}</gradient>"
stats-enabled: "<gradient:#60a5fa:#a78bfa>Effects: {status}</gradient>"
stats-live-header: "<gradient:#60a5fa:#a78bfa>Live MythicLib stats:</gradient>"
stats-live-entry: "<gradient:#60a5fa:#a78bfa> - {stat}: +{bonus} (live {live})</gradient>"
stats-entry: "<gradient:#60a5fa:#a78bfa> - {stat}: {value}</gradient>"
stats-cooldowns-header: "<gradient:#60a5fa:#a78bfa>Active cooldowns:</gradient>"
stats-global-cooldown: "<gradient:#f59e0b:#f97316> - Trait lock: {seconds}s</gradient>"
stats-effect-cooldown: "<gradient:#60a5fa:#a78bfa> - Effect #{index} ({trigger}): {seconds}s</gradient>"
stats-cooldowns-none: "<gradient:#22c55e:#14b8a6> None — all effects ready</gradient>"
migrate-success: "<gradient:#22c55e:#14b8a6>Migrated {count} players from {old} to {new}.</gradient>"
cooldown-set: "<gradient:#22c55e:#14b8a6>Set cooldown for trait {trait} to {ticks} ticks for {player}.</gradient>"
plugin-version: "<gradient:#60a5fa:#a78bfa>SoapsTraits version: {version}</gradient>"
trait-test-success: "<gradient:#22c55e:#14b8a6>Tested trait {trait} on {player}.</gradient>"
import-success: "<gradient:#22c55e:#14b8a6>Imported {count} traits from {file}.</gradient>"
export-success: "<gradient:#22c55e:#14b8a6>Exported {count} traits to {file}.</gradient>"
import-failed: "<gradient:#ef4444:#f97316>Failed to import traits from {file}.</gradient>"
export-failed: "<gradient:#ef4444:#f97316>Failed to export traits to {file}.</gradient>"
player-only-command: "<gradient:#ef4444:#f97316>This command can only be used by players.</gradient>"
invalid-number: "<gradient:#ef4444:#f97316>Please enter a valid number.</gradient>"
gui-disabled: "<gradient:#ef4444:#f97316>The GUI editor is disabled in config.yml.</gradient>"
# ============================================================
# GUI EDITOR TEXT
# ============================================================
# --- Trait List GUI ---
gui-title-trait-list: "<gradient:#fbbf24:#a78bfa>Trait Editor (Page {page})</gradient>"
gui-create-new-trait: "<gradient:#22c55e:#14b8a6>Create Trait</gradient>"
gui-create-new-trait-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Start a brand-new trait profile.</gradient>"
- "<gradient:#60a5fa:#a78bfa>You can configure stats and effects next.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to create a new trait</gradient>"
gui-previous-page: "<gradient:#38bdf8:#22d3ee><- Previous Page</gradient>"
gui-previous-page-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Go to page {page}.</gradient>"
gui-next-page: "<gradient:#38bdf8:#22d3ee>Next Page -></gradient>"
gui-next-page-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Go to page {page}.</gradient>"
gui-trait-class: "<gradient:#60a5fa:#a78bfa>Bound class: {class}</gradient>"
gui-trait-effects: "<gradient:#60a5fa:#a78bfa>Effects: {count}</gradient>"
gui-trait-stats: "<gradient:#60a5fa:#a78bfa>Stats: {count}</gradient>"
gui-trait-stats-header: "<gradient:#60a5fa:#a78bfa>Active stats:</gradient>"
gui-trait-stat-entry: "<gradient:#60a5fa:#a78bfa> {stat}: {value}</gradient>"
gui-click-to-edit: "<gradient:#38bdf8:#22d3ee>▶ Left-click to edit this trait</gradient>"
gui-trait-item-title: "<gradient:#fbbf24:#a78bfa>{trait}</gradient>"
gui-default-new-trait-name: "new_trait"
gui-unbound-class-value: "Unbound"
gui-empty-value: "empty"
# --- Trait Editor GUI ---
gui-title-trait-editor: "<gradient:#fbbf24:#a78bfa>Editing Trait: {trait}</gradient>"
gui-info-title: "<gradient:#fbbf24:#a78bfa>{trait}</gradient>"
gui-info-trait-name: "<gradient:#60a5fa:#a78bfa>Name: {name}</gradient>"
gui-info-trait-class: "<gradient:#60a5fa:#a78bfa>Class: {class}</gradient>"
gui-info-trait-stats: "<gradient:#60a5fa:#a78bfa>Stats: {count}</gradient>"
gui-info-trait-effects: "<gradient:#60a5fa:#a78bfa>Effects: {count}</gradient>"
gui-info-status-new: "<gradient:#22c55e:#14b8a6>New trait - not saved yet</gradient>"
gui-info-status-editing: "<gradient:#60a5fa:#a78bfa>Editing existing trait</gradient>"
gui-back-to-list: "<gradient:#38bdf8:#22d3ee>← Back to List</gradient>"
gui-back-to-list-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Return to the trait list.</gradient>"
- ""
- "<gradient:#f59e0b:#f97316>Warning: Unsaved edits will be lost.</gradient>"
gui-delete-trait: "<gradient:#ef4444:#f97316>Delete Trait</gradient>"
gui-delete-trait-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Permanently remove this trait from config.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Players using it lose access immediately.</gradient>"
- ""
- "<gradient:#ef4444:#f97316>This action cannot be undone.</gradient>"
gui-delete-disabled: "<gradient:#f59e0b:#f97316>Delete (unavailable)</gradient>"
gui-delete-disabled-lore: "<gradient:#f59e0b:#f97316>Save this trait before deleting.</gradient>"
gui-save-changes: "<gradient:#22c55e:#14b8a6>Save Changes</gradient>"
gui-save-changes-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Save this trait to traits.yml.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Changes persist through reloads and restarts.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to save changes</gradient>"
gui-edit-name: "<gradient:#38bdf8:#22d3ee>Rename Trait</gradient>"
gui-edit-name-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Current: {name}</gradient>"
- ""
- "<gradient:#60a5fa:#a78bfa>Rename this trait through chat input.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Its command identifier updates too.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to rename trait</gradient>"
gui-edit-class: "<gradient:#38bdf8:#22d3ee>Class Binding</gradient>"
gui-edit-class-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Current: {class}</gradient>"
- ""
- "<gradient:#60a5fa:#a78bfa>Bind this trait to an MMOCore class.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Players on that class can be</gradient>"
- "<gradient:#60a5fa:#a78bfa>auto-assigned this trait.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to edit class binding</gradient>"
gui-edit-stats: "<gradient:#38bdf8:#22d3ee>Edit Stats</gradient>"
gui-edit-stats-current: "<gradient:#60a5fa:#a78bfa>Current Stats:</gradient>"
gui-edit-stats-none: "<gradient:#f59e0b:#f97316> None configured</gradient>"
gui-edit-stats-entry: "<gradient:#60a5fa:#a78bfa> • {stat}: {value}</gradient>"
gui-edit-stats-lore:
- "<gradient:#60a5fa:#a78bfa>Add, edit, or remove stat modifiers.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Examples: attack_damage, defense,</gradient>"
- "<gradient:#60a5fa:#a78bfa>max_health, mana, and more.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to open stats editor</gradient>"
gui-edit-effects: "<gradient:#38bdf8:#22d3ee>Edit Effects</gradient>"
gui-edit-effects-count: "<gradient:#60a5fa:#a78bfa>Current effects: {count}</gradient>"
gui-edit-effects-lore:
- "<gradient:#60a5fa:#a78bfa>Add and configure trigger-based effects.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Each effect can define conditions,</gradient>"
- "<gradient:#60a5fa:#a78bfa>actions, and a cooldown.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to open effect editor</gradient>"
gui-undo: "<gradient:#38bdf8:#22d3ee>Undo</gradient>"
gui-undo-disabled: "<gradient:#f59e0b:#f97316>Undo</gradient>"
gui-undo-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Revert your latest unsaved edit.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to undo</gradient>"
gui-undo-none: "<gradient:#f59e0b:#f97316>Nothing to undo</gradient>"
gui-redo: "<gradient:#38bdf8:#22d3ee>Redo</gradient>"
gui-redo-disabled: "<gradient:#f59e0b:#f97316>Redo</gradient>"
gui-redo-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Re-apply your last undone edit.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to redo</gradient>"
gui-redo-none: "<gradient:#f59e0b:#f97316>Nothing to redo</gradient>"
# --- Stats Editor GUI ---
gui-title-stats-editor: "<gradient:#fbbf24:#a78bfa>Edit Stats: {trait}</gradient>"
gui-back: "<gradient:#38bdf8:#22d3ee>← Back</gradient>"
gui-back-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Return to the previous editor view.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Your unsaved edits are kept.</gradient>"
gui-add-stat: "<gradient:#22c55e:#14b8a6>+ Add Stat</gradient>"
gui-add-stat-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Add a stat modifier through chat input.</gradient>"
- ""
- "<gradient:#60a5fa:#a78bfa>Format: <name> <value></gradient>"
- "<gradient:#60a5fa:#a78bfa>Example: attack_damage 3</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to add stat</gradient>"
gui-stat-value: "<gradient:#60a5fa:#a78bfa>Value: {value}</gradient>"
gui-stat-edit: "<gradient:#38bdf8:#22d3ee>▶ Left-click to change value</gradient>"
gui-stat-delete: "<gradient:#ef4444:#f97316>▶ Right-click to remove</gradient>"
gui-stat-item-title: "<gradient:#fbbf24:#a78bfa>{stat}</gradient>"
# --- Effect Editor GUI ---
gui-title-effect-editor: "<gradient:#fbbf24:#a78bfa>Edit Effects: {trait}</gradient>"
gui-title-effect-detail: "<gradient:#fbbf24:#a78bfa>Edit Effect #{index}: {trait}</gradient>"
gui-add-effect: "<gradient:#22c55e:#14b8a6>+ Add Effect</gradient>"
gui-add-effect-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Create a new effect with a trigger,</gradient>"
- "<gradient:#60a5fa:#a78bfa>conditions, actions, and cooldown.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to add effect</gradient>"
gui-effect-trigger: "<gradient:#60a5fa:#a78bfa>Trigger: {trigger}</gradient>"
gui-effect-conditions: "<gradient:#60a5fa:#a78bfa>Conditions: {count}</gradient>"
gui-effect-actions: "<gradient:#60a5fa:#a78bfa>Actions: {count}</gradient>"
gui-effect-cooldown: "<gradient:#60a5fa:#a78bfa>Cooldown: {ticks} ticks</gradient>"
gui-effect-edit: "<gradient:#38bdf8:#22d3ee>▶ Left-click to configure</gradient>"
gui-effect-delete: "<gradient:#ef4444:#f97316>▶ Right-click to remove</gradient>"
gui-effect-detail-title: "<gradient:#fbbf24:#a78bfa>Effect #{index}</gradient>"
gui-effect-detail-trigger: "<gradient:#38bdf8:#22d3ee>Edit Trigger</gradient>"
gui-effect-detail-trigger-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Current: {trigger}</gradient>"
- ""
- "<gradient:#60a5fa:#a78bfa>Choose which event activates this effect.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Examples: ATTACK, KILL, TICK</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to edit trigger</gradient>"
gui-effect-detail-cooldown: "<gradient:#38bdf8:#22d3ee>Edit Cooldown</gradient>"
gui-effect-detail-cooldown-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Current: {ticks} ticks</gradient>"
- ""
- "<gradient:#60a5fa:#a78bfa>Set the delay between activations.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Use 0 for no cooldown.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to edit cooldown</gradient>"
gui-effect-detail-conditions: "<gradient:#38bdf8:#22d3ee>Edit Conditions</gradient>"
gui-effect-detail-conditions-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Current count: {count}</gradient>"
- ""
- "<gradient:#60a5fa:#a78bfa>Manage all condition checks.</gradient>"
- "<gradient:#60a5fa:#a78bfa>All conditions must pass.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to open condition editor</gradient>"
gui-effect-detail-actions: "<gradient:#38bdf8:#22d3ee>Edit Actions</gradient>"
gui-effect-detail-actions-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Current count: {count}</gradient>"
- ""
- "<gradient:#60a5fa:#a78bfa>Manage actions executed</gradient>"
- "<gradient:#60a5fa:#a78bfa>when this effect activates.</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to open action editor</gradient>"
gui-effect-item-title: "<gradient:#fbbf24:#a78bfa>Effect #{index}</gradient>"
gui-condition-item-title: "<gradient:#fbbf24:#a78bfa>{type}</gradient>"
gui-action-item-title: "<gradient:#fbbf24:#a78bfa>{type}</gradient>"
gui-effect-trigger-unset: "Unset"
gui-title-condition-type-picker: "<gradient:#fbbf24:#a78bfa>Select Condition Type</gradient>"
gui-title-action-type-picker: "<gradient:#fbbf24:#a78bfa>Select Action Type</gradient>"
gui-type-picker-item-title: "<gradient:#fbbf24:#a78bfa>{type}</gradient>"
gui-default-trigger: "ATTACK"
gui-type-picker-select-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Type: {type}</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to select this type</gradient>"
# --- Condition Editor GUI ---
gui-title-condition-editor: "<gradient:#fbbf24:#a78bfa>Edit Conditions: {trait} # {index}</gradient>"
gui-add-condition: "<gradient:#22c55e:#14b8a6>+ Add Condition</gradient>"
gui-add-condition-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Select a condition type first,</gradient>"
- "<gradient:#60a5fa:#a78bfa>then enter its value in chat.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Map format: key=value,key2=value2</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to add a condition</gradient>"
gui-condition-value: "<gradient:#60a5fa:#a78bfa>Value: {value}</gradient>"
gui-condition-edit: "<gradient:#38bdf8:#22d3ee>▶ Left-click to edit value</gradient>"
gui-condition-delete: "<gradient:#ef4444:#f97316>▶ Right-click to remove</gradient>"
# --- Action Editor GUI ---
gui-title-action-editor: "<gradient:#fbbf24:#a78bfa>Edit Actions: {trait} # {index}</gradient>"
gui-add-action: "<gradient:#22c55e:#14b8a6>+ Add Action</gradient>"
gui-add-action-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Select an action type first,</gradient>"
- "<gradient:#60a5fa:#a78bfa>then enter its value in chat.</gradient>"
- "<gradient:#60a5fa:#a78bfa>Example scalar: 3</gradient>"
- "<gradient:#60a5fa:#a78bfa>Example map: type=SPEED,duration=60,level=2</gradient>"
- ""
- "<gradient:#38bdf8:#22d3ee>Click to add an action</gradient>"
gui-action-value: "<gradient:#60a5fa:#a78bfa>Value: {value}</gradient>"
gui-action-edit: "<gradient:#38bdf8:#22d3ee>▶ Left-click to edit value</gradient>"
gui-action-delete: "<gradient:#ef4444:#f97316>▶ Right-click to remove</gradient>"
# --- Confirmation Dialog ---
gui-title-confirm: "<gradient:#f59e0b:#f97316>Confirm Action</gradient>"
gui-confirm-delete: "<gradient:#ef4444:#f97316>Delete: {trait}</gradient>"
gui-confirm-save: "<gradient:#22c55e:#14b8a6>Save: {trait}</gradient>"
gui-confirm-irreversible: "<gradient:#ef4444:#f97316>This action cannot be undone.</gradient>"
gui-confirm: "<gradient:#22c55e:#14b8a6>✔ Confirm</gradient>"
gui-confirm-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Proceed with this action.</gradient>"
gui-cancel: "<gradient:#f59e0b:#f97316>✘ Cancel</gradient>"
gui-cancel-lore:
- ""
- "<gradient:#60a5fa:#a78bfa>Cancel and return to the editor.</gradient>"
# --- Chat Input Prompts ---
gui-prompt-trait-name: "<gradient:#38bdf8:#22d3ee>Enter a new trait name in chat, or type cancel.</gradient>"
gui-prompt-class-name: "<gradient:#38bdf8:#22d3ee>Enter a class name to bind (or none to clear), or type cancel.</gradient>"
gui-prompt-add-stat: "<gradient:#38bdf8:#22d3ee>Enter stat and value: <name> <value> (example: attack_damage 3), or type cancel.</gradient>"
gui-prompt-edit-stat: "<gradient:#38bdf8:#22d3ee>Enter a new value for {stat}, or type cancel.</gradient>"
gui-prompt-edit-effect-trigger: "<gradient:#38bdf8:#22d3ee>Enter a trigger: ATTACK, DAMAGED, KILL, CRIT, SKILL_CAST, TICK, DEATH, RESPAWN, CROUCH, or type cancel.</gradient>"
gui-prompt-edit-effect-cooldown: "<gradient:#38bdf8:#22d3ee>Enter cooldown in ticks (example: 60), or type cancel.</gradient>"
gui-prompt-add-condition-value: "<gradient:#38bdf8:#22d3ee>Condition {type} selected. Enter its value now, or type cancel.</gradient>"
gui-prompt-edit-condition: "<gradient:#38bdf8:#22d3ee>Editing {type} (current: {value}). Enter a new value, or type cancel.</gradient>"
gui-prompt-add-action-value: "<gradient:#38bdf8:#22d3ee>Action {type} selected. Enter its value now, or type cancel.</gradient>"
gui-prompt-edit-action: "<gradient:#38bdf8:#22d3ee>Editing {type} (current: {value}). Enter a new value, or type cancel.</gradient>"
gui-chat-cancel-keyword: "cancel"
gui-chat-none-keyword: "none"
gui-chat-cancelled: "<gradient:#f59e0b:#f97316>Input cancelled.</gradient>"
gui-chat-invalid-format: "<gradient:#ef4444:#f97316>Invalid format. Use: <name> <value>.</gradient>"
gui-chat-invalid-stat-key: "<gradient:#ef4444:#f97316>Invalid stat key. Use lowercase letters, numbers, underscore, dot, or dash.</gradient>"
gui-chat-invalid-number: "<gradient:#ef4444:#f97316>Invalid number.</gradient>"
gui-chat-cooldown-clamped: "<gradient:#f59e0b:#f97316>Cooldown exceeds max value. Clamped to {max} ticks.</gradient>"
gui-chat-invalid-trigger: "<gradient:#ef4444:#f97316>Invalid trigger. Use: ATTACK, DAMAGED, KILL, CRIT, SKILL_CAST, TICK, DEATH, RESPAWN, CROUCH.</gradient>"
gui-chat-invalid-value: "<gradient:#ef4444:#f97316>Invalid value for that type.</gradient>"
gui-chat-invalid-trait-name: "<gradient:#ef4444:#f97316>Invalid trait name. Use 3-32 chars: lowercase letters, numbers, _ or -.</gradient>"
gui-chat-trait-name-taken: "<gradient:#ef4444:#f97316>A trait named {trait} already exists.</gradient>"
gui-chat-error: "<gradient:#ef4444:#f97316>Error: {message}</gradient>"
gui-editor-capacity-warning: "<gradient:#f59e0b:#f97316>Too many entries ({count}). Showing first {limit}.</gradient>"
# --- Action Messages ---
gui-trait-saved: "<gradient:#22c55e:#14b8a6>Trait '{trait}' saved.</gradient>"
gui-trait-deleted: "<gradient:#ef4444:#f97316>Trait '{trait}' deleted.</gradient>"
Data (runtime)
| File | Notes |
|---|---|
playerdata.yml |
Created at runtime. Do not hand-edit unless you know the format. |
Example shape:
<uuid>:
trait: warrior
enabled: true
manual-override: false
cooldowns: {}
runtime-stats: {}
| Field | Meaning |
|---|---|
trait |
Active trait id |
enabled |
Effect procs on (/sts toggle) |
manual-override |
Set by /sts set; protects against join class-sync when configured |
cooldowns |
Admin trait-wide lock timestamps |
runtime-stats |
Reserved / legacy map |