指令

基本信息

属性 值
包 com.dreammaster.command
指令数 4
基类 net.minecraft.command.CommandBase(FML 1.7.10 原版指令 API)
注册点 MainRegistry.serverLoad(FMLServerStartingEvent)(MainRegistry.java:457)
权限等级 全部为 2(OP 级)
注册方式 event.registerServerCommand(...),全部受配置开关控制

功能

4 条指令全部在 serverLoad 中注册,且每条都被一个 CoreModConfig.Modules 开关包住:

if (CoreModConfig.Modules.HazardousItems)  { event.registerServerCommand(new HazardousItemsCommand()); }
if (CoreModConfig.Modules.CustomToolTips)  { event.registerServerCommand(new CustomToolTipsCommand()); }
if (CoreModConfig.Modules.CustomFuels)     { event.registerServerCommand(new CustomFuelsCommand()); }
if (CoreModConfig.Modules.CustomDrops)     { event.registerServerCommand(new CustomDropsCommand()); }

(MainRegistry.java:459-469)

由于 4 个开关默认全是 false(CoreModConfig.java:31、:39、:43、:47),默认配置下这 4 条指令都不存在,须在配置中开启对应模块。

所有指令的 getCommandUsage 均返回语言键 dreamcraft.command.<name>.usage(CustomDropsCommand.java:24、CustomFuelsCommand.java:22、CustomToolTipsCommand.java:22、HazardousItemsCommand.java:21),参数为空或非法时抛 WrongUsageException。

指令总表

指令名 别名 类 权限 子命令数 开关
/hazarditems hazit HazardousItemsCommand(96 行) 2 4 Modules.HazardousItems
/customtooltips ctooltip、ctt CustomToolTipsCommand 2 1 Modules.CustomToolTips
/customfuels cfuels、cfl CustomFuelsCommand 2 1 Modules.CustomFuels
/customdrops cdrops、cdr CustomDropsCommand 2 2 Modules.CustomDrops

HazardousItemsCommand.getCommandAliases 额外返回了一个与指令名完全相同的别名 "hazarditems"(HazardousItemsCommand.java:27-28,指令名见 :18)。属事实记录;仓库中无注释说明是否有意,不作缺陷断言。

各指令细节

/customfuels

只支持 reload(CustomFuelsCommand.java:36-47):

子命令 行为 反馈
reload 调 MainRegistry.Module_CustomFuels.ReloadCustomFuels() 成功发 dreamcraft.command.reload.success,失败发 dreamcraft.command.reload.failure(:40-44)

Tab 补全只给 reload(CustomFuelsCommand.java:51-54)。

/customtooltips

与 /customfuels 结构同型,唯一差异是调用的方法名不同:MainRegistry.Module_CustomToolTips.reload()(CustomToolTipsCommand.java:40),消息键与 customfuels 完全一致。Tab 补全同样只给 reload(:51-54)。

/customdrops

支持 2 个子命令(CustomDropsCommand.java:41-58):

子命令 行为
toggleinfo [玩家名] 调 MainRegistry.Module_CustomDrops.toggleDeathInfoForPlayer(targetPlayer) 切换该玩家的死亡信息显示(:52)
reload 调 MainRegistry.Module_CustomDrops.ReloadCustomDrops() 并反馈成功/失败(:54-58)

toggleinfo 的目标解析逻辑(:44-50):给了名字就用 getPlayer(sender, args[1]) 查找(找不到抛 PlayerNotFoundException);没给名字且发送者是玩家则取发送者本人;否则抛 PlayerNotFoundException。

Tab 补全给 toggleinfo、reload(:65-68)。

/hazarditems

4 个子命令(HazardousItemsCommand.java:38-67):

子命令 行为 消息键
save 调 MainRegistry.Module_HazardousItems.SaveHazardousItems()(:42) dreamcraft.command.hazarditems.save.success / .failure(:43、:45)
listdamagesources 输出 HazardDamageSources.DAMAGE_SOURCES.keySet().toString()(:47-51) dreamcraft.command.hazarditems.damage_source_list
listpotions 调私有方法 sendPotionsToPlayer(:52-53) 头部 ...hazarditems.potion.header + 每种一条 ...hazarditems.potion.entry(:73-85)
reload [force] 见下 见下

sendPotionsToPlayer 遍历 Potion.potionTypes,跳过 null,逐条输出本地化药水名与数值 id(HazardousItemsCommand.java:76-83)。

reload 带一个安全闸(HazardousItemsCommand.java:54-63):

boolean force = args.length == 2 && "force".equalsIgnoreCase(args[1]);
if (MainRegistry.Module_HazardousItems.HasConfigChanged() && !force) {
    // 输出 dreamcraft.command.hazarditems.reload.unsafe 并中止
} else if (MainRegistry.Module_HazardousItems.ReloadHazardousItems()) {
    // 成功
} else {
    // 失败
}

即:未保存的改动存在时拒绝重载,除非显式加 force。这是 4 条指令中唯一有二次确认语义的一条。

Tab 补全分两级:第 1 参数给 reload、save、listpotions、listdamagesources;第 2 参数在首参为 reload 时给 force(HazardousItemsCommand.java:88-93)。

数值

数值名 值
指令数 4
子命令总数 8(4 + 1 + 1 + 2)
别名条目总数 8(2 + 2 + 2 + 2),其中 hazarditems 与自身指令名重复,有效别名 7
权限等级 全部 2
默认注册数 0(4 个开关默认全为 false)
消息键前缀 dreamcraft.command.*
带二次确认的指令 1(/hazarditems reload,需 force)

交互

场景 结果
默认配置 4 条指令均不可用
开启 HazardousItems /hazarditems 出现
开启 CustomToolTips /customtooltips 出现
开启 CustomFuels /customfuels 出现
开启 CustomDrops /customdrops 出现
reload 成功 聊天栏输出 dreamcraft.command.reload.success
reload 失败 聊天栏输出 dreamcraft.command.reload.failure
/hazarditems reload 且有未存改动 输出 dreamcraft.command.hazarditems.reload.unsafe,不执行
/hazarditems reload force 无视未存改动,强制重载

相关条目