Flat World Config(超平坦模板)

基本信息

属性 值
配置键 S:Flat World Config(category flatworld)
类型 字符串列表
默认值 见下方「默认模板」
存储字段 ConfigGeneralSettings.generalFlatWorldConfig(ConfigGeneralSettings.java:8)
声明位置 ConfigurationFile.java:44-49
消费位置 GuiCreateCustomWorld.java:34-68

格式

每一项为 数量 方块名 [meta],用空格分隔(源码 split(" "), GuiCreateCustomWorld.java:37):

写法 含义
1 minecraft:bedrock 1 层基岩
1 minecraft:dirt 2 1 层泥土,meta 2
2; 或 ;2; 原样透传(split 后长度为 1),用于超平坦的分层/生物群系分隔符

方块名用 Block.getBlockFromName() 解析 (GuiCreateCustomWorld.java:48),支持 minecraft:bedrock 这样的命名空间写法, 也支持其它 mod 注册的方块名。

默认模板

ConfigurationFile.java:13-14 的 defaultFlatWorldConfig:

{ "2;", "1 minecraft:bedrock", "52 minecraft:sandstone",
  "1 minecraft:dirt 2", ";2;", "biome_1", "village" }

即:2 层虚空 → 1 层基岩 → 52 层砂岩 → 1 层泥土(meta 2) → 分层符 → 生物群系 biome_1 → 生成村庄。

转换过程

源码把上面的文本逐项转换成原版 FlatWorldSettings 要求的 数量x方块ID[:meta] 形式,并用 , 连接(GuiCreateCustomWorld.java:54-63):

输入 输出
1 minecraft:bedrock 1x<bedrock 的数字 ID>
1 minecraft:dirt 2 1x<dirt 的数字 ID>:2
2; 2;(不变)

meta 为 0 时省略 :0 后缀(GuiCreateCustomWorld.java:55-57)。 连接时分隔符逻辑是「若已构造串不以 ; 结尾就追加 ,」 (行 60-64),以避免在 ;2; 这类透传项后多加逗号。

转换结果赋给建世界 GUI 的内部字段 field_146334_a (GuiCreateCustomWorld.java:67),该字段保存当前 superflat 预设字符串。

生效条件(重要)

GuiCreateCustomWorld.java:34 的分支条件只是 worldType.getWorldTypeName().equalsIgnoreCase("flat"), 没有检查它是否等于 World Generator 的配置值。 即:只要实例中存在名为 flat 的可创建生成器,模板就会被计算并赋值, 与实际选中的生成器无关。只有当玩家最终使用超平坦时该预设才起作用。

已知源码问题

  • 方块名写错只打日志不中断:Block.getIdFromBlock(...) 返回 -1 时 调 Log.fatal(...) 提示(GuiCreateCustomWorld.java:50-51), 但不追加任何内容就继续循环(行 52-58)。 最终预设会缺掉该层而静默生效,只有一条 FATAL 日志作为线索。
  • Integer.parseInt 无保护:数量或 meta 非数字时抛 NumberFormatException(行 42、45)。该异常被构造函数最外层的 catch (Exception ex) 捕获(行 74-77),结果是整个反射赋值被跳过, 世界生成器退回 ID 0(普通世界),且 field_146334_a 保持 ""。 错误信息只进日志,玩家侧无任何提示。
  • 模板无法在 GUI 中编辑:该项由 ConfigurationHelper.getString(..., String[] defaultValue, ...) 读取 (ConfigurationHelper.java:32-37),只设 comment 而未调用 setShowInGui(false),与字符串版本(行 28)行为不一致。

相关条目