Skip to content

Commands and Permissions ​

Every EmakiLevel command, the permission each one needs, and the common failure reasons are listed below

Main command: /emakilevel; aliases: /elv, /elevel. Examples below use /elv

Remember one rule first: every subcommand checks emakilevel.use. Administrative commands therefore require both emakilevel.use and their specific admin permission

Player commands ​

CommandPermissionDescription
/elvemakilevel.useView all loaded level types for yourself. Player-only
/elv info [type]emakilevel.useView one level type. Without type, behaves like /elv
/elv gui [type]emakilevel.useOpen the level GUI. Without type, uses config.yml > primary_type. Alias: /elv open [type]
/elv levelup [type]emakilevel.levelupManually level up one type. Without type, uses config.yml > primary_type, default main. Alias: /elv up [type]
/elv top [type]emakilevel.topView top 10 cached leaderboard entries for one type. Without type, uses the primary type
/elv topgui [type]emakilevel.topOpen the leaderboard GUI. Without type, uses the primary type. Alias: /elv topopen [type]. Player-only

Examples:

text
/elv
/elv info combat
/elv gui main
/elv levelup mining
/elv up main
/elv top combat
/elv topgui combat

Manual level-up is controlled by types/<type>.yml:

yaml
upgrade:
  enabled: true
  manual_upgrade: true
  cost:
    enabled: false

If a type should only level up automatically from exp gain, keep auto_upgrade: true and set manual_upgrade: false

Admin commands ​

These commands require emakilevel.admin. Command targets must be online because the command implementation resolves exact online player names

CommandPermissionDescription
/elv giveexp <player> <type> <amount>emakilevel.adminAdd exp to an online player. Alias: addexp. Auto-upgrade follows the type config
/elv takeexp <player> <type> <amount>emakilevel.adminRemove current-level exp down to 0. Does not downgrade. Alias: removeexp
/elv setexp <player> <type> <amount>emakilevel.adminSet current-level exp. Does not directly change level
/elv addlevel <player> <type> <amount>emakilevel.adminAdd levels, clamped between start_level and max_level. Alias: givelevel
/elv takelevel <player> <type> <amount>emakilevel.adminRemove levels, not below start_level. Alias: removelevel
/elv setlevel <player> <type> <level>emakilevel.adminSet level, clamped to the type range
/elv reset <player> <type>emakilevel.adminReset the type: level back to start_level, exp and total_exp to zero

Examples:

text
/elv giveexp Steve combat 250
/elv takeexp Steve mining 30
/elv setexp Steve main 0
/elv addlevel Steve main 5
/elv takelevel Steve combat 1
/elv setlevel Steve fishing 20
/elv reset Steve mining

Operation differences:

OperationChanges levelChanges current expChanges total expNotes
giveexppossiblyincreases, then consumes requirement exp on level-upincreasesAuto-upgrade depends on type config
takeexpnodecreases to minimum 0unchangedDoes not downgrade
setexpnosets to valueunchangedUseful for correcting current-level exp
addlevelyesresets to 0unchangedDirect admin edit, no level-up rewards
takelevelyesresets to 0unchangedDirect admin edit, no reward rollback
setlevelyesresets to 0unchangedDirect admin edit
resetyesresets to 0resets to 0Returns to the type's initial state

Reload and debug commands ​

CommandPermissionDescription
/elv reloademakilevel.reload or emakilevel.adminSave cached data, reload config, types, requirements, sources, language, PDC, and the attribute bridge, then sync online players
/elv convert-legacy [confirm]emakilevel.adminRename the legacy result_item_sources key under sources/*.yml (sources.<id>.rules[]) to item_sources. Without an argument it only previews; confirm (or --apply) rewrites the files and leaves a .bak backup
/elv debug requirement <type> <level>emakilevel.debug or emakilevel.adminShow required exp and the source used for a target level
/elv debug pdc <player>emakilevel.debug or emakilevel.adminResync online player PDC. The implementation resyncs every online player
/elv debugemakilevel.debug or emakilevel.adminPrint the CoreLib debug status overview
/elv debug status / on / offemakilevel.debug or emakilevel.adminShared CoreLib debug switches: show status, enable all, disable all
/elv debug player <player>emakilevel.debug or emakilevel.adminToggle debug output for one online player
/elv debug module <module>emakilevel.debug or emakilevel.adminToggle a debug submodule. EmakiLevel contributes common; the shared CoreLib submodules action, item_operation, variables, placeholder, gui, and chat_input are also available

Examples:

text
/elv reload
/elv debug requirement main 10
/elv debug requirement combat 35
/elv debug pdc Steve
/elv debug module common

debug requirement source values:

SourceMeaning
type.valuesExact target-level value in types/<type>.yml > requirement.values
type.formulaType-specific formula in types/<type>.yml > requirement.formula
groups.<group>.valuesExact value in requirements.yml > groups.<group>.values
groups.<group>.formulaFormula in requirements.yml > groups.<group>.formula
global.valuesExact value in requirements.yml > global.values
global.formulaFormula in requirements.yml > global.formula

Permissions ​

PermissionDefaultScope
emakilevel.usetrueMain command and basic queries; also the registration permission of the root command. Checked before every subcommand
emakilevel.leveluptrue/elv levelup / /elv up
emakilevel.toptrue/elv top and /elv topgui / /elv topopen
emakilevel.reloadop/elv reload
emakilevel.debugop/elv debug requirement and /elv debug pdc
emakilevel.adminopExp/level management commands; also accepted for reload/debug

LuckPerms examples:

text
/lp group default permission set emakilevel.use true
/lp group default permission set emakilevel.levelup true
/lp group default permission set emakilevel.top true
/lp group admin permission set emakilevel.admin true
/lp group admin permission set emakilevel.reload true
/lp group admin permission set emakilevel.debug true

Common failure reasons ​

Match your error against this table first:

Reason IDCommon case
player_not_foundTarget player is offline/not found, or an API call lacks a valid UUID
player_data_unavailablePlayer level data is not loaded yet, or was already unloaded
type_not_foundThe type does not exist
type_disabledThe type exists but enabled: false
invalid_amountAmount is invalid
daily_cap_reachedThe type's daily exp budget is exhausted; see config.yml > daily_caps
event_cancelledA listener cancelled PlayerExpGainEvent or PlayerPreLevelUpEvent, so the gain/level-up was abandoned
upgrade_disabledupgrade.enabled: false
manual_upgrade_disabledPlayer tried /elv levelup, but manual upgrade is disabled
max_levelAlready at max_level
not_enough_expCurrent-level exp is insufficient
not_enough_moneyEconomy cost is not affordable
not_enough_materialMaterial cost is not available
cost_compensation_failedAn upgrade cost was consumed, a later step failed, and refunding the cost also failed
invalid_requirementRequirement formula/config resolves to 0 or less

Asynchronous public-API writes may additionally return api_unavailable, not_entity_owner, player_offline, owner_schedule_retired, and owner_schedule_rejected. These come from thread-ownership scheduling, not from configuration