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 注册时分配的存盘目录下。
生命周期
- 首次加载:
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(...)。
- 若
- 重载:
/pspace reload-config重新读Config.synchronizeConfiguration+Config.validateBlocks+sendWorldList()。 - 同步给客户端:每次创建/修改/重载都通过
Packets.sendWorldList广播UPDATE_WORLDLIST包(包含Config.allowedBiomes/Blocks/BoundaryBlocks/GapBlocks/CenterBlocks集合 + 全部维度配置)。客户端handleWorldList反向DimensionConfig.fromPacket+registerWithDimensionManager(dimId, true)。 - 保存:每次
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/CapplyToAllSurfaceLayers(默认 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 |