指令 (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(即不允许额外参数)

相关条目

  • 世界任务设置 - hardcore / lives / default 子指令修改的 12 项世界属性
  • 客户端配置 - Unrestrict Admin Commands 与 Load the default quest DB on world startup 两项直接影响本指令集
  • 封包协议 - edit / import / station_edit 等子指令最终都走 betterquesting:* 封包回传客户端
  • 生命值与硬核模式 - lives 与 hardcore 子指令的运行时效果