指令 (Commands)
基本信息
| 属性 | 值 |
|---|---|
| 根指令数 | 4(bq_admin / bq_user / bq_client / bq_copyquests) |
| 子指令数 | 15(管理 11 + 用户 3 + 客户端 1) |
| 注册时机 | serverStarting → proxy.serverStarting(event)(BetterQuesting.java:165-167) |
| 基类 | QuestCommandBase(不是 CommandBase,是 BetterQuesting 自己的包装) |
| 参数校验 | validArgs(String[]),默认实现 args.length == 1 |
| 自动补全 | autoComplete(MinecraftServer, ICommandSender, String[]),默认返回空 ArrayList |
功能
BetterQuesting 的指令不继承 net.minecraft.command.CommandBase,而是继承 QuestCommandBase 包装类(commands/QuestCommandBase.java:16),后者是抽象类,声明 3 个抽象/可覆写方法:getCommand()(指令名)、runCommand(...)(执行)、以及可覆写的 validArgs 与 autoComplete。
这个包装层承担了「先查参数再执行」的工作:getException(CommandBase command) 把 getCommand() 与 getUsageSuffix() 拼成 WrongUsageException 的消息(QuestCommandBase.java:38-46)。QuestCommandBase 还提供一个共用的「玩家名 → UUID」解析工具(QuestCommandBase.java:48-50),供各子指令把 args[0] 解析成 QuestingAPI.getQuestingUUID 可用的 UUID。
validArgs 的默认实现是 args.length == 1(QuestCommandBase.java:28-30)—— 也就是默认不接任何参数。所有带参数的子指令都必须自己覆写它。
4 个根指令
| 指令名 | 类 | 定位 | 子指令数 |
|---|---|---|---|
bq_admin |
commands.BQ_CommandAdmin |
服务端管理指令集 | 11 |
bq_user |
commands.BQ_CommandUser |
玩家侧指令 | 3 |
bq_client |
commands.BQ_CommandClient |
纯客户端指令(不落服务端) | 1 |
bq_copyquests |
commands.BQ_CopyProgress |
跨玩家复制任务进度 | 0(直接参数式) |
BQ_CopyProgress 覆写 getCommandName() 返回 bq_copyquests(BQ_CopyProgress.java:47-48),并覆写 getList() 返回 Collections.singletonList(getCommandName())(BQ_CopyProgress.java:53)—— 后者让它不出现在 /help 的指令补全列表里,属于有意隐藏。
bq_admin 的 11 个子指令
BQ_CommandAdmin 在构造期把 11 个 QuestCommand* 实例塞进 coms(BQ_CommandAdmin.java:32-42):
| 子指令 | 类 | 文件 |
|---|---|---|
edit |
QuestCommandEdit |
commands/admin/QuestCommandEdit.java |
hardcore |
QuestCommandHardcore |
commands/admin/QuestCommandHardcore.java |
reset |
QuestCommandReset |
commands/admin/QuestCommandReset.java |
complete |
QuestCommandComplete |
commands/admin/QuestCommandComplete.java |
delete |
QuestCommandDelete |
commands/admin/QuestCommandDelete.java |
default |
QuestCommandDefaults |
commands/admin/QuestCommandDefaults.java |
lives |
QuestCommandLives |
commands/admin/QuestCommandLives.java |
purge_hidden_quests |
QuestCommandPurge |
commands/admin/QuestCommandPurge.java |
check |
QuestCommandCheckCompletion |
commands/admin/QuestCommandCheckCompletion.java |
check_all |
QuestCommandReportAllProgress |
commands/admin/QuestCommandReportAllProgress.java |
cleanup_questline |
QuestCommandCleanupQuestLine |
commands/admin/QuestCommandCleanupQuestLine.java |
/bq_admin 的权限受客户端配置 BQ_Settings.unrestrictAdminCommands 控制:默认为 false,即需要 OP;设为 true 时所有玩家都能用(配置注释原文:「Useful for single-player without cheats」)。
bq_user 的 3 个子指令
BQ_CommandUser.java:24-26 注册:
| 子指令 | 类 | 作用 |
|---|---|---|
help |
QuestCommandHelp |
打开帮助 |
refresh |
QuestCommandRefresh |
重新拉取任务数据 |
hardcore |
QuestCommandSPHardcore |
单人专用硬核开关,直接 setProperty(HARDCORE, true)(QuestCommandSPHardcore.java:33) |
注意 hardcore 这个名字在 bq_admin 与 bq_user 下各有一个实现,语义不同:bq_admin hardcore 是取反切换并回显 on/off(QuestCommandHardcore.java:48, 64, 71),bq_user hardcore 是单向置 true。
bq_client 的 1 个子指令
BQ_CommandClient.java:19 只注册一个 QuestCommandShow。该根指令是客户端侧的(getCommandName() 返回 bq_client),不经过服务端命令管理器。
非本分类 modid 的指令
同仓库的 bq_standard 另注册 1 个根指令(BQ_Standard.java:94):
| 指令名 | 类 |
|---|---|
bqs_loot |
bq_standard.commands.BQS_Commands(getCommandName() 见 BQS_Commands.java:25) |
它属于 modid bq_standard,本分类不展开。
数值
| 数值名 | 值 |
|---|---|
| 根指令数 | 4 |
| 子指令总数 | 15 |
bq_admin 子指令 |
11 |
bq_user 子指令 |
3 |
bq_client 子指令 |
1 |
bq_copyquests 子指令 |
0(参数式) |
| 被有意隐藏出补全列表的指令 | 1(bq_copyquests) |
| 重名的子指令名 | 1(hardcore,在两个根指令下各有一个实现) |
QuestCommandBase.validArgs 默认允许的参数数 |
1(即不允许额外参数) |