指令与存档数据

基本信息

属性 值
指令注册 serverStart 中注册两条(rwg/RWG.java:54-62)
指令数 2(/rwg_noise、/rwg_buginfo)
存档数据类 rwg.world.RwgWorldSavedData(extends WorldSavedData)
存档数据 NBT 名 rwg_data(RwgWorldSavedData.java:14)
存档字段 noiseImplementation(RwgWorldSavedData.java:27、41)
噪声算法枚举 rwg.util.NoiseImplementation,5 个值(rwg/util/NoiseImplementation.java:3-9)
权限等级 /rwg_buginfo 为 0,任何玩家可用(RwgBugInfoCommand.java:41-48)

功能

RWG 提供两条服务端指令,用来解决 GTNH 2.2.0.0 版本噪声算法变更 造成的老世界区块接缝问题。 语言文件把这个背景写得很完整(src/main/resources/assets/rwg/lang/en_US.lang:2-8):

A bug in the RWG version shipped with GTNH 2.2.0.0 caused the world to be generated differently than previous versions. The bug has since been fixed, reverting future generation to pre-2.2.0.0 style. Unfortunately, what version was used when this world was created can’t be automatically detected. To allow players from both versions to continue playing on their world without making new ugly chunk borders, this version of RWG supports both but requires you to select which one to use when upgrading worlds. /rwg_noise perlin is the version used in all versions except 2.2.0.0 /rwg_noise opensimplex is the version used in 2.2.0.0

/rwg_noise

用法:/rwg_noise get|opensimplex|perlin(RwgNoiseCommand.java:22-24)。

  • 不带参数则抛 WrongUsageException(RwgNoiseCommand.java:29-31)
  • get 只读不写,输出当前噪声类型(RwgNoiseCommand.java:35-38)
  • 其他取值会 NoiseImplementation.valueOf(args[0].toUpperCase()) 解析, 可用值为 UNKNOWN、PERLIN、OPENSIMPLEX、DYNAMICPERLIN、DYNAMICOPENSIMPLEX (NoiseImplementation.java:3-9)
  • 切换时改写 NoiseGeneratorWrapper.useOpenSimplex 这个静态布尔量 (RwgNoiseCommand.java:60、65、73),实际决定走 Perlin 还是 OpenSimplex 噪声
  • 切换结果通过 RwgWorldSavedData.setNoiseImplementation(...) 写入世界存档(RwgNoiseCommand.java:89)

切换后的提示分两种(RwgNoiseCommand.java:80-84):

旧值类别 提示 key 含义
UNKNOWN / DYNAMICPERLIN / DYNAMICOPENSIMPLEX rwg.noise.instant_new_chunks 所有新区块立即以新算法生成
PERLIN / OPENSIMPLEX rwg.noise.needs_restart 需重启服务器或重进单人游戏才生效

新值与旧值相同时输出 rwg.noise.unchanged(RwgNoiseCommand.java:86)。 UNKNOWN 会被特殊处理,提示「将默认使用 Perlin」(RwgNoiseCommand.java:59-62)。

/rwg_buginfo

用法:/rwg_buginfo,无参数(RwgBugInfoCommand.java:17-20)。

依次输出 5 条语言键 rwg.buginfo.line1 至 line5(即上面引用的背景说明), 再以金色文字提示两条可复制的命令 /rwg_noise perlin 与 /rwg_noise opensimplex (RwgBugInfoCommand.java:24-37)。

只有 en_US.lang 提供完整键集(14 条),其余 6 个语言文件各自只含 1 条 generator.RWG (世界类型显示名),不含任何 rwg.buginfo.* 或 rwg.noise.* 键:

语言文件 键数 generator.RWG 取值
en_US.lang 14 Realistic Alpha
fr_FR.lang 1 Réaliste (alpha)
it_IT.lang 1 Realistico (Alfa)
ko_KR.lang 1 현실적인 바이옴[Realistic Alpha]
pt_PT.lang 1 Realístico (versão Alpha)
ru_RU.lang 1 Реалистичный (Альфа)
zh_CN.lang 1 真实世界生成初版

因此在任何非英文环境下,/rwg_noise 与 /rwg_buginfo 的提示都会显示为翻译键原文 (rwg.buginfo.line1 等),而不是可读文本。

存档数据

RwgWorldSavedData 绑定在主世界(DimensionManager.getWorld(0),即维度 0)的 mapStorage 上 (RwgWorldSavedData.java:49-59),数据名为 rwg_data。 noiseImplementation 缺省为 UNKNOWN(RwgWorldSavedData.java:15); 若 NBT 中读到的字符串无法解析为枚举值,会打印错误并保持 UNKNOWN (RwgWorldSavedData.java:29-33)。getNoiseImplementation() 每次调用都会 markDirty() (RwgWorldSavedData.java:61),使存档持续落盘。

数值

数值名 值 行号
噪声算法枚举值 5(UNKNOWN / PERLIN / OPENSIMPLEX / DYNAMICPERLIN / DYNAMICOPENSIMPLEX) NoiseImplementation.java:3-9
/rwg_buginfo 输出行数 5 行说明 + 2 行命令提示 RwgBugInfoCommand.java:24-37
语言键总数(en_US) 14(1 条 generator.RWG + 5 条 rwg.buginfo.line* + 2 条 rwg.buginfo.perlin/opensimplex + 6 条 rwg.noise.*) en_US.lang
语言文件总数 7(1 个完整 + 6 个仅含 generator.RWG) src/main/resources/assets/rwg/lang/
存档数据挂载维度 0(主世界) RwgWorldSavedData.java:49
/rwg_buginfo 权限等级 0 RwgBugInfoCommand.java:41-42

交互

触发 行为
/rwg_noise(无参数) 抛 WrongUsageException,提示 /rwg_noise get|opensimplex|perlin
/rwg_noise get 只输出当前噪声类型,不修改任何状态
/rwg_noise perlin 切到 Perlin(useOpenSimplex = false)并写入 rwg_data
/rwg_noise opensimplex 切到 OpenSimplex(useOpenSimplex = true)并写入 rwg_data
/rwg_noise unknown 切到 UNKNOWN,useOpenSimplex = false,提示「将默认使用 Perlin」
/rwg_noise dynamicperlin / dynamicopensimplex 映射到 Perlin / OpenSimplex 的即时生效模式
/rwg_buginfo 打印 GTNH 2.2.0.0 噪声变更背景与两条修复命令
玩家登录 LoginHandler.onPlayerLogin 已注册(rwg/RWG.java:42)但方法体全部被注释,不做任何检测(rwg/handlers/LoginHandler.java:10-20)

相关条目