WorldLib
基本信息
| 属性 | 值 |
|---|---|
| 路径 | mrtjp.core.world.WorldLib |
| 源码 | src/main/scala/mrtjp/core/world/WorldLib.scala(247 行,本 mod 最大 world 文件) |
世界操作工具库,基于 CodeChickenLib 的 BlockCoord / Vector3 简化坐标操作。
TileEntity
getTileEntity(w, bc)、getTileEntity\[T\]\(w, bc, clazz)(含返回 null 的重载)。
坐标打包(⭐ 值得注意的实现)
| 方法 | 说明 |
|---|---|
packCoords(x, y, z): Long |
打包进 1 个 long |
unpackX(c) |
(c & ((1 << 26) - 1)).toInt - 30000000 → 26 位,偏移 3000 万 |
unpackZ(c) |
((c >> 26) & ((1 << 26) - 1)).toInt - 30000000 |
unpackY(c) |
((c >> 52) & ((1 << 12) - 1)).toInt → 12 位,无偏移 |
unpackCoords(c) |
还原为 BlockCoord |
布局:X 占 0–25、Z 占 26–51、Y 占 52–63。
其它
| 分组 | 方法 |
|---|---|
| 方块 | getBlock、bulkBlockUpdate、uncheckedSetBlock |
| TileEntity | uncheckedRemoveTileEntity、uncheckedSetTileEntity、uncheckedGetTileEntity |
| 掉落 | dropItem(w, bc, stack)、centerEject(...) |
| 判定 | isLeafType、isPlantType、isBlockSoft、isAssociatedTreeBlock、isBlockTouchingAir、isBlockUnderTree、findSurfaceHeight |
| 光照 | getSkyLightValue、getBlockLightValue |
| 风 | getWindSpeed |
| 组合 | getBlockMetaPair、getBlockInfo |
缺陷
unpackY只取 12 位(0–4095),不含符号位;负 Y 坐标在packCoords时会溢出, 须由调用方保证y >= 0。- 大量
uncheckedXxx方法直接写world内部字段,绕过 Forge 的正常更新通知, 使用不当会导致区块不重绘 / TileEntity 不同步。