Default World Generator

[!INFO] Git Commit: b0c4450 | Updated: 2026-10-01(回源码审计)

modid:defaultworldgenerator(⚠️ 实读路径:源码里 Reference.MOD_ID 的字面量是占位符 "GRADLETOKEN_MODID" (Reference.java:5),构建时由 gradle.properties 的 gradleTokenModId = GRADLETOKEN_MODID + replaceGradleTokenInFile = Reference.java 替换;真实值取自 gradle.properties 的 modId = defaultworldgenerator。 @Mod(modid = Reference.MOD_ID, ...) 的实参即该常量,见 DefaultWorldGenerator.java:16。) 显示名: Default World Generator(gradle.properties 的 modName) mcmod.info 描述: A small mod to automatically select the default world generator for single player 作者: FireBall1725

一个纯 GUI 补丁式小模组(共 8 个 .java 文件)。 它不注册任何世界生成器,只做一件事:在打开「建世界」界面时, 用配置文件里的名字替玩家预先选中某个 WorldType。

工作范围

做 不做
拦截建世界 GUI,预选默认生成器 不注册 WorldType
可选:锁定下拉菜单(留有左 Alt 逃生阀) 不注册方块 / 物品 / 实体
可选:构建 superflat 预设字符串 不注册群系 / 维度 / 结构
可选:postInit 打印可用生成器列表 不影响服务器与存档数据

源码核实:registerBlock、registerItem、registerEntity、WorldProvider、 BiomeGen、ChunkProvider 在 src/main/java 下各 0 命中。 WorldType 仅被读取(WorldType.worldTypes 数组遍历),从未被写入。 block/、item/、entity/ 资源目录不存在,唯一资源文件是 mcmod.info。

游戏设定 / 机制列表

GUI

配置文件

由 event.getSuggestedConfigurationFile() 决定位置(DefaultWorldGenerator.java:26), 共 4 项,分布在 2 个 category:

category 键 类型 默认值
general World Generator 字符串 default
general Show World Generators in Log 布尔 false
general Lock World Generator 布尔 false
flatworld Flat World Config 字符串列表 2; / 1 minecraft:bedrock / 52 minecraft:sandstone / 1 minecraft:dirt 2 / ;2; / biome_1 / village

已知源码问题

  • Log.debug 用错日志级别:lib/Log.java:20 的 debug() 方法体是 log(Level.INFO, object) 而非 Level.DEBUG,与 info() 完全等价。 本 mod 中 Log.debug 的唯一调用点 GuiCreateCustomWorld.java:31 处于 注释状态,故当前无实际影响,但该工具方法本身是错的。
  • 反射字段名硬编码:GuiCreateCustomWorld.java:19 写死 "field_146331_K"。映射变更时 getDeclaredField 失败,异常被行 74-77 的 catch (Exception ex) 完全吞掉(仅两条 Log.fatal), 本 mod 静默失效且玩家无提示。这是最脆弱的耦合点。
  • 配置填错无提示:GuiCreateCustomWorld.java:24 的 worldGenType 初值为 0, 名字全部不命中时直接 setInt(this, 0)(行 72),静默退回普通世界。
  • 客户端类无侧保护:GuiEvents 导入 net.minecraft.client.*, 却在 preInit 中无条件注册到公共 MinecraftForge.EVENT_BUS (DefaultWorldGenerator.java:28),未用 @SideOnly / Side.CLIENT 保护。
  • 大量死代码:ConfigurationHelper 中 6 个重载只有 3 个被调用 —— getString(..., String[] validValues)(行 8-22)、getInt(行 46-51)、 getInt[](行 53-58)均无任何调用点;Log 的 all / trace / off 三个方法亦无调用点。
  • 重复的 Configuration 字段:DefaultWorldGenerator.java:22 的 public static Configuration configuration 在行 26 被赋值后 从未被读取;真正使用的是 ConfigurationFile.configuration。
  • 按钮 id 硬编码:GuiEvents.java:21(世界列表 id 3)与 GuiEvents.java:30(建世界 id 5)。这两个 id 对应的原版控件名 无法从本仓库核实(相关类属 net.minecraft.client,不在本仓库内)。
  • 锁定不覆盖左 Alt:GuiEvents.java:31 的 !Keyboard.isKeyDown(Keyboard.KEY_LMENU) 是硬编码逃生阀,无配置项可关闭。

未被采纳的线索(勿误记为功能)

  • GuiEvents.java:38 的 // Log.error(event.button.id + " - " + event.gui.toString()); —— 行首为 //,是注释掉的调试代码,不参与运行。
  • GuiCreateCustomWorld.java:31 的 // Log.debug("Changed world type to " + ...) —— 同样是注释状态。