排名查询
四条把当前采集结果打到聊天框的排名指令,以及一条实体追踪开关。
基本信息
| 指令 | 实现类 | 权限等级 | 输出内容 |
|---|---|---|---|
/opis_te |
CommandTimingTileEntities |
0 | TileEntity tick 耗时排名 |
/opis_ent |
CommandTimingEntities |
0 | 实体 tick 耗时排名 |
/opis_chunk |
CommandChunkList |
0 | 区块 TileEntity 耗时排名 |
/opis_nent |
CommandAmountEntities |
0 | 按类型统计的实体总数 |
/opis_enttrace |
CommandEntityCreate |
3 | 实体创建栈追踪日志开关 |
注册位置:modOpis.java:217、:219、:213、:220、:224。前四条均被 CommandHelp 列出(CommandHelp.java:25-28),/opis_enttrace 不在帮助列表中。
功能
四条排名指令的共同前置
前四条都在 processCommand 开头做同一个判断:若发送者是 EntityPlayerMP,回复 DEPRECATED ! Please run /opis instead. 并返回(CommandChunkList.java:35-38、CommandTimingTileEntities.java:32-35、CommandTimingEntities.java:32-35、CommandAmountEntities.java:32-35)。因此这四条只能从服务端控制台使用,在游戏里输入只会得到这句提示。/opis_enttrace 没有这个分支。
/opis_te [n]
调用 TileEntityManager.INSTANCE.getWorses(20)(无参时)或 getWorses(Integer.valueOf(astring[0]))(带参时),逐行 stat.toString() 输出。astring[0] 解析失败时 catch 后直接 return,无输出。
/opis_ent [n]
与 /opis_te 同构,改用 EntityManager.INSTANCE.getWorses(...)。输出前先打一行表头 [DIM X Z] Time NTEs。
/opis_chunk [n]
调用 ChunkManager.INSTANCE.getTopChunks(20) 或 getTopChunks(...),输出前打表头 [DIM X Z] Time NTEs。
这条指令带参时存在实际缺陷:CommandChunkList.java:42 写的是
chunks = ChunkManager.INSTANCE.getTopChunks(Integer.valueOf(astring.length));
传入的是参数个数(astring.length)而不是参数值本身。因此 /opis_chunk 5 与 /opis_chunk 1 2 3 4 5 都会取 Top 1,而 /opis_chunk 500(个数为 1)只会取 Top 1 —— 参数值被完全忽略。/opis_chunk(无参)才正确走 getTopChunks(20) 分支。对照 /opis_te、/opis_ent 用的是 Integer.valueOf(astring[0]),是正确写法。
/opis_nent [all]
astring[0] 等于 all 时调用 EntityManager.INSTANCE.getCumulativeEntities(false),否则调用 getCumulativeEntities(true)。逐行输出 key : value 格式的 AmountHolder。
该指令的 all 参数目前没有实际效果:EntityManager.getCumulativeEntities(boolean filtered)(EntityManager.java:139-159)的方法体完全没有读取 filtered 这个形参,两种取值返回的内容完全相同。/opis_nent 与 /opis_nent all 输出等价。
/opis_enttrace [full]
切换 OpisServerEventHandler.printEntityTrace 布尔量(CommandEntityCreate.java:25-33):
- 参数恰为
full:printEntityFull = true且printEntityTrace = true - 其它情况(含无参):
printEntityTrace取反,并强制printEntityFull = false
回复 Entity trace is %s。该类只 extends CommandBase,没有实现 IOpisCommand,因此没有 getDescription(),也无法被 CommandHelp 列出;getCommandUsage() 还是一个空实现的 // TODO Auto-generated method stub(CommandEntityCreate.java:20-23)。
数值
| 指令 | 默认条数 | 可传参数 |
|---|---|---|
/opis_te |
20 | 第 1 个参数为条数 |
/opis_ent |
20 | 第 1 个参数为条数 |
/opis_chunk |
20 | 取值被忽略,实际生效的是参数个数 |
/opis_nent |
全部 | all 目前无效果(形参未被读取) |
/opis_enttrace |
无 | full 或无参 |
这些是控制台排名的条数。走面板请求时的条数是硬编码的 100:ServerMessageHandler.java:128 与 :133 均调用 getWorses(100),:146 的 getTopChunks(100) 同理。
交互
| 触发 | 行为 |
|---|---|
控制台 /opis_te 50 |
列出最耗时的 50 个 TileEntity |
玩家 /opis_te 50 |
回复 DEPRECATED ! Please run /opis instead. |
控制台 /opis_chunk 5 |
只取 Top 1(参数被忽略,见上) |
控制台 /opis_enttrace full |
打开完整实体创建栈追踪 |
控制台 /opis_enttrace |
反转实体栈追踪开关,并关闭 full 模式 |
控制台 /opis_nent 与 /opis_nent all |
输出相同(filtered 形参未被使用) |
相关条目
- run-control - 排名结果依赖一次已启动的采集
- entity-tools - 破坏性实体操作,与本组的只读查询相对
- access-control - 权限等级 3 的判定来源
- config - 采集相关配置键