Skip to content

命令与权限 ​

下面列出 EmakiLevel 的全部命令, 每个命令需要什么权限, 以及命令失败时常见的报错原因

EmakiLevel 的主命令是 /emakilevel, 别名为 /elv 和 /elevel. 下面的示例统一用最短别名 /elv

先记住一条: 所有子命令都会先检查 emakilevel.use; 即使是管理员命令, 执行者也必须同时拥有 emakilevel.use 和对应的管理权限

玩家命令 ​

命令权限说明
/elvemakilevel.use查看自己所有已加载等级类型的当前等级, 经验, 需求经验和进度. 只能由玩家执行
/elv info [type]emakilevel.use查看自己的指定等级类型. 不填 type 时和直接执行 /elv 一样
/elv gui [type]emakilevel.use打开等级界面. 不填 type 时用 config.yml > primary_type 指定的类型. 别名: /elv open [type]
/elv levelup [type]emakilevel.levelup手动升级指定等级类型. 不填 type 时用 config.yml > primary_type, 该值默认是 main. 别名: /elv up [type]
/elv top [type]emakilevel.top查看指定等级类型排行榜的前 10 名, 数据来自插件当前缓存. 不填 type 时用主等级类型
/elv topgui [type]emakilevel.top打开排行榜界面. 不填 type 时用主等级类型. 别名: /elv topopen [type]. 只能由玩家执行

示例:

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

手动升级会受到 types/<type>.yml 中以下字段影响:

yaml
upgrade:
  enabled: true          # false 时完全禁止升级
  manual_upgrade: true   # false 时禁止 /elv levelup
  cost:
    enabled: false       # true 时需要满足经济/材料消耗

如果某个类型只想靠获得经验自动升级, 保留 auto_upgrade: true, 把 manual_upgrade: false 就行

管理命令 ​

这些命令要求 emakilevel.admin, 并且目标玩家必须在线, 因为命令实现使用在线玩家名精确匹配

命令权限说明
/elv giveexp <player> <type> <amount>emakilevel.admin给在线玩家增加经验. 会按该类型的配置触发自动升级. 别名: addexp
/elv takeexp <player> <type> <amount>emakilevel.admin扣除在线玩家当前等级内的经验, 最多扣到 0, 不会掉级. 别名: removeexp
/elv setexp <player> <type> <amount>emakilevel.admin把在线玩家当前等级内的经验设成指定值, 等级本身不变
/elv addlevel <player> <type> <amount>emakilevel.admin增加等级, 加完后会被限制在该类型的 start_level 与 max_level 之间. 别名: givelevel
/elv takelevel <player> <type> <amount>emakilevel.admin扣除等级, 扣完不会低于 start_level. 别名: removelevel
/elv setlevel <player> <type> <level>emakilevel.admin把等级设成指定值, 结果会被限制在该类型的等级范围内
/elv reset <player> <type>emakilevel.admin重置指定类型: 等级回到 start_level, exp 与 total_exp 清零

示例:

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

经验与等级操作的差异:

操作改变等级改变当前经验改变总经验备注
giveexp可能自动升级增加并在升级时扣除需求经验增加自动升级取决于类型配置
takeexp否扣除到最低 0不变不会降级
setexp否设置为指定值不变适合修正当前等级内经验
addlevel是清零不变直接改等级, 不发放升级奖励
takelevel是清零不变直接改等级, 不回退奖励
setlevel是清零不变用于管理员修正
reset是清零清零回到该类型起始状态

重载与调试命令 ​

命令权限说明
/elv reloademakilevel.reload 或 emakilevel.admin先保存当前缓存的数据, 再重载主配置, 等级类型, 需求, 来源规则, 语言, PDC 和属性贡献配置, 并把在线玩家的数据同步一遍
/elv convert-legacy [confirm]emakilevel.admin把 sources/*.yml 中 sources.<id>.rules[] 的旧 result_item_sources 键改名为 item_sources. 不带参数时只演示一遍会改哪些地方, 不会真的写入; 加 confirm (或 --apply) 才真正改写, 并留一份 .bak 备份
/elv debug requirement <type> <level>emakilevel.debug 或 emakilevel.admin查看某个类型升到目标等级时的需求经验, 以及命中的需求来源
/elv debug pdc <player>emakilevel.debug 或 emakilevel.admin重新同步在线玩家的 PDC 数据. 实际执行时会把所有在线玩家都同步一遍
/elv debugemakilevel.debug 或 emakilevel.admin输出 CoreLib 调试状态概览
/elv debug status / on / offemakilevel.debug 或 emakilevel.adminCoreLib 的通用调试开关: status 查看状态, on 全部开启, off 全部关闭
/elv debug player <player>emakilevel.debug 或 emakilevel.admin切换某个在线玩家的调试输出
/elv debug module <module>emakilevel.debug 或 emakilevel.admin切换调试子模块. EmakiLevel 自身提供 common, 另外可用 CoreLib 共享子模块 action, item_operation, variables, placeholder, gui, chat_input

示例:

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

debug requirement 的输出来源有以下几种:

输出来源含义
type.valuestypes/<type>.yml > requirement.values 中写了目标等级的精确值
type.formulatypes/<type>.yml > requirement.formula 里的公式盖过了分组和全局的公式
groups.<group>.valuesrequirements.yml > groups.<group>.values 中写了目标等级的精确值
groups.<group>.formula使用了 requirements.yml > groups.<group>.formula 里的公式
global.values使用了 requirements.yml > global.values 里的精确值
global.formula使用了 requirements.yml > global.formula 里的公式

权限节点 ​

权限默认覆盖范围
emakilevel.usetrue使用主命令和基础查询命令, 也是主命令自身的注册权限. 所有子命令都会先检查此权限
emakilevel.leveluptrue使用 /elv levelup / /elv up
emakilevel.toptrue使用 /elv top 与 /elv topgui / /elv topopen
emakilevel.reloadop使用 /elv reload
emakilevel.debugop使用 /elv debug requirement 与 /elv debug pdc
emakilevel.adminop使用经验/等级管理命令, 并可代替 reload/debug 的专用权限

常见 LuckPerms 示例:

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

常见失败原因 ​

遇到报错先来这里对号入座: 命令和 API 返回的失败原因是固定英文 ID, 语言文件会把常用原因翻译成玩家可读文本

原因 ID常见场景
player_not_found目标玩家不存在, 离线, 或 API 调用没有有效 UUID
player_data_unavailable玩家等级数据尚未加载或已卸载
type_not_foundtype 不存在, 或者 sources/*.yml / Action 中写错类型 ID
type_disabled等级类型存在但 enabled: false
invalid_amount经验或等级数量小于等于 0, 或设置经验时传入负数
daily_cap_reached该类型当日经验额度已用尽, 见 config.yml > daily_caps
event_cancelled有监听器取消了 PlayerExpGainEvent 或 PlayerPreLevelUpEvent, 本次经验/升级被放弃
upgrade_disabled该类型的 upgrade.enabled 是 false
manual_upgrade_disabled玩家手动执行 /elv levelup, 但类型禁用了手动升级
max_level已达到该类型 max_level
not_enough_exp当前等级内经验不足以升到下一级
not_enough_money升级经济消耗不足
not_enough_material升级材料消耗不足
cost_compensation_failed升级消耗已扣除但后续步骤失败, 且退还消耗时出错
invalid_requirement需求经验公式或配置结果小于等于 0, 无法升级

通过公开 API 异步写入时还可能返回以下原因: api_unavailable, not_entity_owner, player_offline, owner_schedule_retired, owner_schedule_rejected. 这些原因与线程归属调度有关, 不由配置引起