Dimension Config(个人维度配置)

基本信息

属性 值
类 me.eigenraven.personalspace.world.DimensionConfig
持久化文件 <worldSaveDir>/PERSONAL_DIM_<dimId>/personalspace_metadata.cfg
父类常量 PersonalSpaceMod.DIM_METADATA_FILE = "personalspace_metadata.cfg"
区块分类 visual / worldgen / boundary / gap / center / time

行为

DimensionConfig 是 Personal Dimension 的运行时配置 POJO + 同步器。每个 dimId 对应一份,存储在 DimensionManager 注册时分配的存盘目录下。

生命周期

  1. 首次加载:PersonalSpaceMod.serverAboutToStart 调用 loadDimensionConfigs,扫描 <saveRoot> 下每个子目录:
    • 若 <dir>/personalspace_metadata.cfg 存在 → new DimensionConfig().syncWithFile(dimConfig, false, 0)(读),setSaveDirOverride(dir.getName()),registerWithDimensionManager(dimId, false)。
    • 否则调用 DimensionConfig.fromUtilityWorldsWorld(dir.getName()) 把旧 utilityworlds 维度迁移过来,注册后 saveConfig(...)。
  2. 重载:/pspace reload-config 重新读 Config.synchronizeConfiguration + Config.validateBlocks + sendWorldList()。
  3. 同步给客户端:每次创建/修改/重载都通过 Packets.sendWorldList 广播 UPDATE_WORLDLIST 包(包含 Config.allowedBiomes/Blocks/BoundaryBlocks/GapBlocks/CenterBlocks 集合 + 全部维度配置)。客户端 handleWorldList 反向 DimensionConfig.fromPacket + registerWithDimensionManager(dimId, true)。
  4. 保存:每次 WorldEvent.Save / WorldEvent.Unload / serverStopping 都把 captureTimeFrom(worldInfo) 后若 needsSaving()=true 则 saveConfig(dimId, cfg) → 写回 personalspace_metadata.cfg。

关键字段

视觉类:

  • weatherEnabled(默认 false)
  • daylightCycle:SUN / MOON / CYCLE(默认 CYCLE)
  • cloudsEnabled(默认 true)
  • skyType:VANILLA / BARNADA_C / GARDEN_OF_GLASS(默认 VANILLA)
  • skyColor(0~0xFFFFFF,默认 0xc0d8ff)
  • starBrightness(0~1,默认 1.0)

世界生成类:

  • biomeId(默认 Plains)
  • generatingVegetation(默认 false)
  • generatingTrees(默认 false)
  • allowGenerationChanges(默认 false,一次性标志;改完即 false)
  • layers(ArrayList<FlatLayerInfo>,由字符串 preset 解析)

边界类:

  • boundaryBlockA/B(默认 minecraft:wool)
  • boundaryMetaA/B(默认 4 / 15)
  • boundaryChunkIntervalX/Z(0~20,默认 0)

间隙类:

  • gapWidth(0~5,默认 0)
  • gapPreset:ROAD / SOLID(默认 ROAD)
  • gapBlockA/B/C + metaA/B/C
  • applyToAllSurfaceLayers(默认 false)

中心类:

  • centerEnabled(默认 false)
  • centerDirection:SE / SW / NE / NW(默认 SE)
  • centerBlock(默认 minecraft:wool)
  • centerMeta(默认 14)

时间持久化类:

  • worldTime / raining / rainTime / thundering / thunderTime / timeDataPersisted

主要方法

方法 用途
syncWithFile(File, write, dimId) 双向同步 Configuration(forge cfg)文件;写时保存所有字段,读时归入字段
nextFreeDimId() 从 Config.firstDimensionId 开始扫 serverDimensionConfigObjects + DimensionManager.isDimensionRegistered
registerWithDimensionManager(dimId, isClient) 注册 ProviderType + Dimension,Thermos 时清理 org.bukkit.World.Environment.lookup;同步到 serverDimensionConfigObjects / clientDimensionConfigObjects
copyFrom(source, copySave, copyVisual, copyGeneration) 把其它配置复制过来
canUseLayers(preset, onClient) 验证层字符串用到的方块在 Config.allowedBlocks 中
canUseBiome(biomeName, onClient) 验证群系名(小写后)在 Config.allowedBiomes 中
fromUtilityWorldsWorld(dirName) 旧 UW 维度迁移(uw_portal_void/mining/garden/return) → 还原为对应 preset(PRESET_UW_VOID/GARDEN/MINING)

维度间数据流

serverAboutToStart ──loadDimensionConfigs──► registerWithDimensionManager
                                         │
WorldEvent.Load    ──捕获时间/天气────────► applyTimeTo (standaloneInfo)
WorldEvent.Save    ──保存时间/天气────────► saveConfig
WorldEvent.Unload  ──保存维度元数据───────► saveConfig
serverStopping     ──保存所有 dirty cfg──► saveConfig
client handshake   ──sendWorldList────────► 客户端 config + whitelist

数值

数值 默认值
firstDimensionId 180(来自 Config,可改)
边界 meta 范围 0~15
边界间隔范围 0~20
间隙宽度范围 0~5
天空色范围 0~0xFFFFFF
星亮度范围 0.0~1.0

相关条目