SimpleGenHandler / ISimpleStructureGen
基本信息
| 属性 |
值 |
| 路径 |
mrtjp.core.world.genhandler |
| 源码 |
src/main/scala/mrtjp/core/gեnhandler.scala → 实际为 src/main/scala/mrtjp/core/world/genhandler.scala |
世界生成注册中心。由 MrTJPCoreProxy 的 init() 调用 init()。
ISimpleStructureGen
def genID: String
def generate(w, chunkX, chunkZ, rand, isRetro): Boolean
SimpleGenHandler(extends IWorldGenerator)
| 成员 |
说明 |
init() |
GameRegistry.registerWorldGenerator(this, 0);注册到 EVENT_BUS 与 ORE_GEN_BUS;若 retro_gen 开启再注册到 FML 总线 |
registerStructure(struct) |
追加结构;genID 重复则 log.error 但仍继续 |
chunkSaveEvent |
把 StructList 与 StructHash 写入区块 NBT 的 RetrogenData_<retro_gen_id> |
chunkLoadEvent |
若 StructHash 不符或条目数不符,则把该区块入队等待追溯生成 |
generate(...) |
转发 subGenerate(world, chunkX, chunkZ, rand, isRetro = false) |
追溯生成(Retrogen)
- 开关:
MrTJPConfig.retro_gen(默认 false)
- 数据库 ID:
MrTJPConfig.retro_gen_id(默认 mrtjp_gen)
- NBT 标签:
"RetrogenData_" + retro_gen_id
- 队列:
Map[维度id, Queue[ChunkCoord]]
缺陷
registerStructure 发现 genID 重复时只 log.error,仍会把重复项追加进 structures,
导致同一结构被生成两次。
private val retroGen = MrTJPConfig.retro_gen 与 tagDB 是 object 初始化时求值的 val,
而 MrTJPConfig.loadConfig() 在 preInit 才执行。若本 object 先被初始化,
retroGen 会读到默认值 false 而非玩家实际配置。属初始化顺序缺陷。
相关条目