/bloodmagic 指令

基本信息

属性 值
指令名 /bloodmagic
别名 BloodMagic、bloodmagic、bloodMagic、bm(共 4 个)
权限等级 3(OP)
所需权限 无(getRequiredPermissionLevel() 返回 3,即服务端 OP)
注册位置 AlchemicalWizardry.initCommands(FMLServerStartingEvent),AlchemicalWizardry.java:4537-4540
类 WayofTime.alchemicalWizardry.common.commands.CommandBloodMagic
子指令数 4
用法提示 /bloodmagic help

注册代码:

@EventHandler
public void initCommands(FMLServerStartingEvent event) {
    event.registerServerCommand(new CommandBloodMagic());
}

4 个子指令

子指令 实现类 职责
help SubCommandHelp 显示帮助
network SubCommandNetwork 气血网络操作
bind SubCommandBind 绑定操作
orb SubCommandOrb 气血宝珠操作

注册于 CommandBloodMagic 构造器(CommandBloodMagic.java:32-35):

subCommands.put("help", new SubCommandHelp(this));
subCommands.put("network", new SubCommandNetwork(this));
subCommands.put("bind", new SubCommandBind(this));
subCommands.put("orb", new SubCommandOrb(this));

processCommand 以 args[0] 查表分发(CommandBloodMagic.java:59-),未命中则回退到帮助。

别名的 3 处大小写重复

4 个别名中有 3 个仅大小写不同:

别名 与 /bloodmagic 的差异
BloodMagic 首字母大写
bloodmagic 无差异(全小写)
bloodMagic 中间字母大写
bm 缩写

其中 bloodmagic 与 getCommandName() 返回的 /bloodmagic 完全重复 —— 同一指令把自身名字注册为自己的别名。Forge 的 CommandBase 会对重复别名静默取先注册者,因此不致崩溃,但属冗余。

内部绑定指令(与子指令不同)

common/commands/ 包中还有 2 个独立的老式指令类,它们不走 subCommands 派发体系,而是各自继承 CommandBase:

类 职责
CommandBind 独立的绑定指令
CommandUnbind 独立的解绑指令
CommandSN 独立指令(功能未核实)

三个类均未被注册,属死代码。

这 3 个类在 AlchemicalWizardry.initCommands() 中未被注册(该方法只注册了 CommandBloodMagic 一个)。已用两处 grep 交叉验证:

验证项 结果
全仓库 registerServerCommand 出现次数 1(AlchemicalWizardry.java:4539,仅注册 CommandBloodMagic)
CommandBind / CommandUnbind / CommandSN 在自身文件外的引用 0

即这 3 个类是完整的死代码:既未注册,也无任何其他代码路径实例化或引用。SubCommandBind(子指令,含 Sub 前缀)是活跃的,与之无关。

包内其余文件为派发框架:

文件 作用
ISubCommand 子指令接口(位于 api/command)
SubCommandBase 子指令基类

数值

数值名 值
主指令数 1
别名数 4(其中 1 个与指令名重复)
子指令数 4
权限等级 3
registerServerCommand 调用数 1
未注册的老式指令类 3(CommandBind、CommandUnbind、CommandSN)

相关条目