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。
游戏设定 / 机制列表
- World Generator 默认世界生成器 - 预选哪个
WorldType,默认default - Lock World Generator 锁定生成器 - 吞掉下拉点击,按住左 Alt 可绕过
- Flat World Config 超平坦模板 -
flat时的层结构与生物群系 - Show World Generators in Log 调试输出 - postInit 打印可用生成器内部名
GUI
- 自定义建世界界面 - 改道世界列表按钮 + 反射写回
field_146331_K
配置文件
由 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 " + ...)—— 同样是注释状态。