调试方块

两个默认不注册的诊断用方块,用于压测与溯源。

基本信息

属性 值
方块数量 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. 开头的默认名,材质为缺失纹理。

相关条目