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]]

缺陷

  1. registerStructure 发现 genID 重复时只 log.error,仍会把重复项追加进 structures, 导致同一结构被生成两次。
  2. private val retroGen = MrTJPConfig.retro_gen 与 tagDB 是 object 初始化时求值的 val, 而 MrTJPConfig.loadConfig() 在 preInit 才执行。若本 object 先被初始化, retroGen 会读到默认值 false 而非玩家实际配置。属初始化顺序缺陷。

相关条目