/scoreboardinfo
基本信息
| 属性 | 值 |
|---|---|
| 指令名 | /scoreboardinfo |
| 实现类 | CommandScoreboardInfo extends CommandBase |
| 源码 | com/enderio/core/common/command/CommandScoreboardInfo.java |
| 权限等级 | 0(getRequiredPermissionLevel,:29-31) |
| 权限检查 | return true;(:34-36)——无任何限制 |
| 注册位置 | EnderCore.java:146,FMLServerStartingEvent 阶段 |
| Tab 补全 | 有(记分板名 + 在线玩家名) |
@EventHandler
public void onServerStarting(FMLServerStartingEvent event) {
event.registerServerCommand(new CommandScoreboardInfo());
PermanentCache.saveCaches();
}
(EnderCore.java:144-148)
[!NOTE] 指令在服务端启动时注册,因此这是纯服务端指令,客户端不可用。它是 EnderCore 唯一通过
FMLServerStartingEvent注册的指令(另一条/reloadServerConfigs走ClientCommandHandler+CommandHandler,见EnderCore.java:125-128)。
功能
查询指定记分板上某个玩家的实际分数。用法(getCommandUsage,:24-26):
/scoreboardinfo <board> <name>
processCommand(:40-65):
| 步骤 | 行为 | 源码 |
|---|---|---|
| 1 | 参数少于 2 个 → 抛 WrongUsageException("This command requires 2 args: <board> <name>") |
:41-43 |
| 2 | 读取 player.getEntityWorld().getScoreboard() |
:45 |
| 3 | 按名字取 ScoreObjective;为 null 时输出 No such board <name> |
:47-51 |
| 4 | 遍历 board.func_96534_i(obj) 的 Score 集合,匹配 getPlayerName() |
:53-60 |
| 5 | 命中 → 输出 <name>'s score on board "<board>": <分数> 并 return |
:57-59 |
| 6 | 未命中 → 输出 No score for <name> on board "<board>" |
:64 |
三种输出均为硬编码英文字符串,未经 Lang.localize 本地化(:50、:57-58、:64),因此任何语言下都不翻译。
交互
Tab 补全
addTabCompletionOptions(:69-90)按参数位置分派:
args.length |
补全内容 | 源码 |
|---|---|---|
| 1 | 世界记分板上全部 ScoreObjective 的名字 |
:70-76 |
| 2 | 世界内全部 EntityPlayer 的命令名 |
:78-85 |
| 其它 | 返回 null |
:88 |
补全不做前缀过滤以外的筛选,直接把整个列表交给 getListOfStringsFromIterableMatchingLastWord,由原版命令框架处理匹配。
源码缺陷
- 记分板不存在时未提前返回(
:47-51):obj == null时只addChatMessage提示,没有return,代码继续执行到:53的board.func_96534_i(obj),把null作为参数传入。 缺失return本身可由源码直接确认。其具体后果无法核实——Scoreboard.func_96534_i属 Minecraft 原版方法,/Users/evlos/a/mirror/下无 Minecraft 本体源码可查(已find确认仅有各 mod 仓库)。若原版实现解引用入参则抛 NPE,否则返回空集合。可复现命令:/scoreboardinfo NoSuchBoard Steve。 - 输出字符串未本地化:三处消息均硬编码英文(
:50、:57-58、:64),与本 mod 其余部分统一走EnderCore.lang.localize的做法不一致。 - 权限等级 0 且
canCommandSenderUseCommand恒true(:29-36):任何玩家可查询任意记分板上任意玩家的分数。在含敏感计分板(领地、工会、竞速)的服务器中属于信息泄露面。
相关条目
- Config Handler - 同属 EnderCore 的公共 API 层
- /reloadServerConfigs - 同一
command/目录下的另一条指令