调试方块
两个默认不注册的诊断用方块,用于压测与溯源。
基本信息
| 属性 | 值 |
|---|---|
| 方块数量 | 2 |
| TileEntity 数量 | 2 |
| 默认状态 | 不注册(需配置键 laggenerator_id 设为非 -1) |
| 物品数量 | 0(无物品形式) |
| 合成配方 | 0 |
| 创造标签 | 0(grep -rn 'CreativeTabs|setCreativeTab' --include=*.java src/main/java 0 命中) |
| 本地化名 | 无(两个方块的 setUnlocalizedName 调用均被注释掉) |
| 纹理 | 无(assets/opis/textures/ 下只有 2 个 Navigator 按钮图标) |
功能
注册条件
两个方块在 modOpis.load 中注册,且被一个条件包住(modOpis.java:180-188):
if (lagGenID != -1) {
Block blockDemo = new BlockLag(Material.wood);
GameRegistry.registerBlock(blockDemo, "opis.laggen");
GameRegistry.registerTileEntity(TileLag.class, "opis.laggen");
Block blockDebug = new BlockDebug(Material.wood);
GameRegistry.registerBlock(blockDebug, "opis.debug");
GameRegistry.registerTileEntity(TileDebug.class, "opis.debug");
}
lagGenID 来自配置键 laggenerator_id,默认值 -1(modOpis.java:134)。因此开箱即用状态下这两个方块不存在于注册表中,/give 也无法获得。
BlockLag / TileLag —— 延迟发生器
- 继承
BlockContainer,材质Material.wood createNewTileEntity返回new TileLag()TileLag.updateEntity()在服务端每次 tick 执行Thread.sleep(5),即每 tick 阻塞 5 毫秒(TileLag.java:8-15)。客户端侧直接if (this.worldObj.isRemote) return;跳过- 摆放多个即可线性制造卡顿,用来验证探针的耗时统计是否准确
BlockDebug / TileDebug —— 创建栈溯源
- 继承
BlockContainer,材质Material.wood createNewTileEntity返回new TileDebug()TileDebug的构造函数打印日志:自身的System.identityHashCode(this)、Thread.currentThread().getStackTrace()的每个元素的「类名.方法名:行号」,前后用=============================分隔(TileDebug.java:7-24)updateEntity()是空实现,不做任何事
因此方块一经放置(实际是 TileEntity 被创建时)就一次性输出创建来源,之后完全惰性。
数值
| 数值名 | 值 |
|---|---|
laggenerator_id 默认值 |
-1(modOpis.java:97 字段初值、:134 配置默认值) |
| 启用条件 | lagGenID != -1 |
TileLag 每 tick 阻塞时长 |
5 ms(硬编码 Thread.sleep(5)) |
BlockLag 注册名 |
opis.laggen |
BlockDebug 注册名 |
opis.debug |
| 两方块材质 | Material.wood |
已知事实:laggenerator_id 的数值本身从未被使用
lagGenID 在全仓只有 3 处出现:字段声明(modOpis.java:97)、配置赋值(:134)、条件判断(:180)。
grep -rn 'lagGenID\|laggenerator_id' --include=*.java src/main/java
该值从不用于定位任何实体、区块或生成器 —— 它只被当作一个布尔开关使用。因此把 laggenerator_id 设成 42 与设成 1 效果完全相同:都只是打开两个方块的注册。想放置方块只能用 /give opis.laggen 1(同样需要先启用注册)。
交互
| 触发 | 行为 |
|---|---|
laggenerator_id = -1(默认) |
两个方块未注册,无法 /give |
laggenerator_id 设为任意非 -1 值并重启 |
两个方块注册 |
放置 opis.laggen |
每服务端 tick 阻塞 5 ms |
放置 opis.debug |
构造 TileEntity 时向日志输出创建栈 |
| 破坏任一方块 | 无特殊掉落逻辑(未覆写 breakBlock) |
由于没有 setUnlocalizedName 也没有 lang 文件,两个方块在游戏内显示为 tile. 开头的默认名,材质为缺失纹理。
相关条目
- config -
laggenerator_id与另外 12 个配置键 - profiler-sections -
TileLag用于验证哪些计时段