Hooks
基本信息
| 属性 |
值 |
| 类名 |
com.gtnewhorizons.neid.Hooks |
| 角色 |
ASM transformer 反向回调的静态桥接方法(ASM 调用方为 Underground Biomes 的 BiomeUndergroundDecorator) |
| 注解 |
@SuppressWarnings("unused") 表明方法只通过 ASM 注入被调用 |
方法
getBlockId(ExtendedBlockStorage ebs, int x, int y, int z) → int
public static int getBlockId(final ExtendedBlockStorage ebs, final int x, final int y, final int z) {
return ((IExtendedBlockStorageMixin) ebs).getBlock16BArray()[y << 8 | z << 4 | x] & 0xFFFF;
}
- 调用方(注入点):
UndergroundBiomesBiomeUndergroundDecorator ASM transformer,匹配原版字节码中对 ExtendedBlockStorage.getBlockLSBArray() 的 INVOKEVIRTUAL 调用并替换。
- 平铺索引:
y << 8 | z << 4 | x —— 与 MixinExtendedBlockStorage.getBlockId / setBlockId 完全一致,把三维坐标扁平化为单 short 数组下标。
- 结果类型:
& 0xFFFF 把 short 符号位转为无符号 16 位整数(即使最高位为 1 也能返回正整数)。
触发链
UndergroundBiomes.BiomeUndergroundDecorator.replaceChunkOres_*
↓ (ASM 替换 INVOKEVIRTUAL getBlockLSBArray → ILOAD 9/18/10 + INVOKESTATIC Hooks.getBlockId)
Hooks.getBlockId(ebs, x, y, z)
↓ (转 IExtendedBlockStorageMixin 拿 block16BArray)
MixinExtendedBlockStorage.block16BArray[y << 8 | z << 4 | x] & 0xFFFF
相关条目
- UndergroundBiomesBiomeUndergroundDecorator ASM - 唯一注入调用点
- MixinExtendedBlockStorage - 实现
IExtendedBlockStorageMixin.getBlock16BArray
- IExtendedBlockStorageMixin - 接口定义