灵魂世界
基本信息
| 属性 | 值 |
|---|---|
| modid | RandomThings |
| 维度名 | SpectreWorld(WorldProviderSpectre.java:47) |
| WorldProvider | lumien.randomthings.Handler.Spectre.WorldProviderSpectre |
| ChunkProvider | lumien.randomthings.Handler.Spectre.ChunkProviderSpectre |
| 维度 ID | SpectreDimensionID,默认 -1 = 自动分配 |
| 配置项 | Settings.SpectreDimensionID(RTConfiguration.java:84-89) |
功能
灵魂世界是本 mod 的专属维度,用于灵魂生物的生成与灵魂主题内容的建造。
维度 ID 自动分配
维度 ID 默认 -1。首次运行时 RandomThings.init 调用 DimensionManager.getNextFreeDimId() 自动选取空闲 ID 并写回配置文件(RandomThings.java:121-127):
if (Settings.SPECTRE_DIMENSON_ID == -1) {
int dimensionID = DimensionManager.getNextFreeDimId();
logger.log(Level.INFO, "Auto Resolved Spectre Dimension ID to " + dimensionID);
RTConfiguration.spectreDimensionID.set(dimensionID);
RTConfiguration.syncConfig();
}
随后注册 Provider 与维度本身(RandomThings.java:128-129):
DimensionManager.registerProviderType(Settings.SPECTRE_DIMENSON_ID, WorldProviderSpectre.class, true);
DimensionManager.registerDimension(Settings.SPECTRE_DIMENSON_ID, Settings.SPECTRE_DIMENSON_ID);
配置项 SpectreDimensionID 标记了 .setRequiresMcRestart(true)(RTConfiguration.java:89),改值需重启。
环境特性
WorldProviderSpectre 的覆写(Handler/Spectre/WorldProviderSpectre.java):
| 覆写 | 值 | 位置 |
|---|---|---|
| 构造函数 | hasNoSky = true |
:16-18 |
generateLightBrightnessTable |
全部填 1(恒定亮度) | :20-23 |
isSurfaceWorld |
false | :25-28 |
canRespawnHere |
false —— 不能在此重生 | :30-33 |
doesXZShowFog |
跟随 Settings.SPECTRE_DIMENSION_FOG |
:35-38 |
setAllowedSpawnTypes |
敌对与和平全部禁止 | :40-43 |
registerWorldChunkManager |
WorldChunkManagerHell + BiomeGenBase.sky |
:50-53 |
createChunkGenerator |
ChunkProviderSpectre |
:55-59 |
hasNoSky = true 意味着月相传感器 在此维度不产生信号(其 func_149957_e 首行判断 !provider.hasNoSky)。
传送
进出维度由 TeleporterSpectre 接管(Handler/Spectre/TeleporterSpectre.java:30-79)。进入时:
- 记录原维度与坐标到实体 NBT(
RandomThingsNBTKeys.OLD_DIMENSION/OLD_POSX/OLD_POSY/OLD_POSZ,:35-38) - 用幽灵方块在
coord * 32处搭建 16×13×16 的空腔边框,Y 范围 40–52(:41-58) - 把玩家放到腔体中心
coord * 32 + 8, 42, 1.5(:60)
返回时(:63-78)先读 NBT 恢复原坐标;若 NBT 缺失则回退到 provider.getRandomizedSpawnPoint()。
坐标系注意:方块边框按
minX = coord * 32, maxX = coord * 32 + 15计算,即宽度固定 16 格,因此同一coord只会有一座传送腔。
权限系统
多人服务器上灵魂世界带操作者绑定:SpectreHandler.sendOperator(player, cubeOwner) 把某玩家设为某位玩家的操作者(Handler/Spectre/SpectreHandler.java:52),由 /rt spectre <cubeOwner> 触发(Core/Commands/RTCommand.java:170-175)。
SpectreHandler 继承 WorldSavedData(SpectreHandler.java:29),状态写入 RandomThings.dat。
数值
| 数值名 | 值 |
|---|---|
| 维度 ID 默认 | -1(自动分配) |
| 是否有天空 | 否(hasNoSky = true) |
| 光照表 | 全部为 1(恒亮) |
| 生物刷新 | 敌对 + 和平均禁止 |
| 可否在此重生 | 否 |
| 雾效 | 可配(SpectreDimensionFog 默认 true) |
| 传送腔尺寸 | 16 × 13 × 16(X × Y × Z) |
| 传送腔 Y 范围 | 40 – 52 |
| 玩家落点 | coord * 32 + 8, 42, 1.5 |
交互
| 触发 | 行为 |
|---|---|
| 用灵魂之匙 | 进入灵魂世界 |
| 用管理者灵魂之匙 | OP 版本,蓄力更短 |
| 死亡 | EntityReviveCircle 触发返回 |
/exitspectre |
从灵魂世界退出(见 指令) |
/rt spectre <owner> |
转移操作权限 |
数值配置
| 配置项 | 默认 | 位置 |
|---|---|---|
SpectreDimensionID |
-1(自动) | RTConfiguration.java:84-89 |
SpectreDimensionFog |
true | RTConfiguration.java:90 |