灵魂世界

基本信息

属性 值
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)。进入时:

  1. 记录原维度与坐标到实体 NBT(RandomThingsNBTKeys.OLD_DIMENSION / OLD_POSX / OLD_POSY / OLD_POSZ,:35-38)
  2. 用幽灵方块在 coord * 32 处搭建 16×13×16 的空腔边框,Y 范围 40–52(:41-58)
  3. 把玩家放到腔体中心 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

相关条目