指令
基本信息
| 属性 | 值 |
|---|---|
| 指令总数 | 2 |
| 主指令 | /randomthings(别名 /rt) |
| 副指令 | /exitspectre |
| 权限等级 | /rt = 3(OP);/exitspectre = 0(所有人) |
| 注册位置 | RandomThings.serverStarting(RandomThings.java:173-174) |
| 作者白名单 | 用户名 XxsumsumxX(RandomThings.java:68) |
功能
两条指令均在服务器启动时注册(RandomThings.java:173-174):
event.registerServerCommand(new RTCommand());
event.registerServerCommand(new ExitSpectreCommand());
/rt
指令名由 Reference.MOD_NAME.toLowerCase() 动态生成(Core/Commands/RTCommand.java:39-41):
public String getCommandName() {
return Reference.MOD_NAME.toLowerCase();
}
MOD_NAME 来自 gradle.properties 的 modName = RandomThings,因此实际指令名为 /randomthings,别名 /rt(:55-57)。
权限
canCommandSenderUseCommand 允许OP 或作者本人通过(:48-52):
return commandUser.canCommandSenderUseCommand(this.getRequiredPermissionLevel(), this.getCommandName())
|| commandUser.getCommandSenderName().equals(RandomThings.AUTHOR_USERNAME);
getRequiredPermissionLevel() 返回 3(:210-213)。作者用户名常量定义在 RandomThings.java:68:
public static final String AUTHOR_USERNAME = "XxsumsumxX";
7 个子指令
| 子指令 | 参数 | 功能 | 行 |
|---|---|---|---|
notify |
<username> <title> <description> <displayduration> <iconstring> [metadata] |
向指定玩家发送屏幕通知 | :71-113 |
moon |
get / set <0-7> |
读取或设置月相 | :114-135 |
setItemColor |
<colorInt> |
给手持物品写入 customRTColor NBT |
:136-145 |
setBiomeCapsule |
<biomeID> |
设定手持生物群系胶囊的群系 | :146-169 |
spectre |
<cubeOwner> |
把自己设为某玩家的灵魂世界操作者 | :170-175 |
analyze |
— | 输出手持物品的完整调试信息 | :176-198 |
bloodmoon |
[dimID] |
强制触发血月 | :199-207 |
[!NOTE] 无参数时打印的用法提示是
/rt <notify|moon|setItemColor|setBiomeCapsule|analyze|bloodmoon>(:61-62)—— 提示文本漏掉了spectre,但该分支在:170确实存在且可用。同样地 Tab 补全列表把"spectre"重复写了两次(:223、:225)。
各子指令细节
notify —— 需要至少 6 个参数,否则抛 WrongUsageException(:74-76)。图标通过 GameData.getItemRegistry().getObject(iconString) 或 getBlockRegistry() 解析(:93-94),两者都失败则报错。displayduration 必须 > 0(:84-86)。最终通过 PacketHandler.INSTANCE.sendTo(packet, receiverEntity) 定向发送(:113)。
moon —— set 只接受 0–7(:126-129),通过 setWorldTime(provider.getWorldTime() % 24000 + 24000 * moonPhase) 实现(:131-132)。
setItemColor —— 直接给手持物品 NBT 写 customRTColor 整数(:143):
is.stackTagCompound.setInteger("customRTColor", Integer.parseInt(args[1]));
这是给幽灵方块等染色物品改色用的底层接口(无任何范围校验,Integer.parseInt 也无 try/catch)。
setBiomeCapsule —— 用 Guava Preconditions 做三重校验(:148-157):手持物必须是 ItemBiomeCapsule、必须指定群系 ID、群系 ID 必须 >= 0。群系必须真实存在(BiomeGenBase.getBiome(biomeID) != null),否则报「This Biome does not exist」(:159-168)。成功后设 is.setItemDamage(biomeID + 1)(:160)。
spectre —— 委托给 RandomThings.instance.spectreHandler.sendOperator(player, args[1])(:174),把玩家设为 cubeOwner 在灵魂世界的操作者。
analyze —— 输出手持物品的 7 项调试信息(:176-198):显示名、类名、metadata、是否有 NBT、注册名、全部矿物辞典名。注册名用 GameRegistry.findUniqueIdentifierFor(:189)。仅玩家可用(instanceof EntityPlayer),无参数。
bloodmoon —— 委托 ServerBloodmoonHandler.INSTANCE.force(dimID)(:202、:204)。给 1 个参数时用该维度 ID,不给时用玩家当前维度。执行后回复 text.bloodmoon.command(中文「血月将在明晚出现」,zh_CN.lang:169)。
/exitspectre
把玩家从灵魂世界送回(Core/Commands/ExitSpectreCommand.java):
public String getCommandName() { return "exitspectre"; }
public String getCommandUsage(ICommandSender p) { return "/exitspectre"; }
- 无参数(
:20) - 权限等级 0 —— 所有人可用(
:30-32) - 双重校验:必须是
EntityPlayer且player.dimension == Settings.SPECTRE_DIMENSON_ID(:21-26),否则静默无操作 - 委托
spectreHandler.teleportPlayerOutOfSpectreWorld((EntityPlayerMP) player)(:25)
无别名、无 Tab 补全。
数值
| 数值名 | 值 |
|---|---|
| 指令数 | 2 |
/rt 子指令数 |
7 |
/rt 权限等级 |
3 |
/exitspectre 权限等级 |
0 |
| 别名 | /rt |
| 作者白名单 | 1(XxsumsumxX) |
/rt 用法提示遗漏的子指令 |
1(spectre) |