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而非玩家实际配置。属初始化顺序缺陷。
相关条目
- TGenerationLogic
- ModConfig —
retro_gen/retro_gen_id