VSCode调试模式启动Minecraft Forge客户端崩溃问题求助
问题:Forge MDK 1.20.4调试启动崩溃,正常runClient可运行
我是Java及Minecraft模组开发新手,使用VSCode Java扩展包,基于Forge MDK 1.20.4开发。执行./gradlew runClient可正常启动客户端,但使用调试配置启动时,Minecraft打开即崩溃。尝试删除调试相关VM参数后,问题仍然存在。
调试配置文件
{ "type": "java", "name": "runClient", "request": "launch", "mainClass": "net.minecraftforge.bootstrap.ForgeBootstrap", "projectName": "Mod", "cwd": "${workspaceFolder}\\run", "vmArgs": "-Dforge.logging.console.level=debug -Dforge.logging.markers=REGISTRIES -Dforge.enabledGameTestNamespaces=examplemod -Dforge.enableGameTest=true -Djava.net.preferIPv6Addresses=system -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump", "args": "--launchTarget forge_userdev_client --version MOD_DEV --assetIndex 12 --assetsDir C:\\Users\\conta\\.gradle\\caches\\forge_gradle\\assets --gameDir .", "env": { "MOD_CLASSES": "${workspaceFolder}\\build\\sourcesSets\\main", "MCP_MAPPINGS": "official_1.20.4" }, "preLaunchTask": "prepareRunClientCompile" }
崩溃日志
Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:48) at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:18) Caused by: com.electronwill.nightconfig.core.io.ParsingException: Invalid bare key: ${mod_id} at SECURE-BOOTSTRAP/com.electronwill.nightconfig.toml@3.6.4/com.electronwill.nightconfig.toml.TableParser.parseKey(TableParser.java:175) at SECURE-BOOTSTRAP/com.electronwill.nightconfig.toml@3.6.4/com.electronwill.nightconfig.toml.TableParser.parseTableName(TableParser.java:111) at SECURE-BOOTSTRAP/com.electronwill.nightconfig.toml@3.6.4/com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:51) at SECURE-BOOTSTRAP/com.electronwill.nightconfig.toml@3.6.4/com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:37) at SECURE-BOOTSTRAP/com.electronwill.nightconfig.core@3.6.4/com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:113) at SECURE-BOOTSTRAP/com.electronwill.nightconfig.core@3.6.4/com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:219) at SECURE-BOOTSTRAP/com.electronwill.nightconfig.core@3.6.4/com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:202) at SECURE-BOOTSTRAP/com.electronwill.nightconfig.core@3.6.4/com.electronwill.nightconfig.core.file.WriteAsyncFileConfig.load(WriteAsyncFileConfig.java:138) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.moddiscovery.ModFileParser.modsTomlParser(ModFileParser.java:43) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.moddiscovery.ModFileParser.readModList(ModFileParser.java:30) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.moddiscovery.ModFile.<init>(ModFile.java:71) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.moddiscovery.ModFile.<init>(ModFile.java:60) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.moddiscovery.AbstractModProvider.createMod(AbstractModProvider.java:52) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.moddiscovery.ClasspathLocator.scanMods(ClasspathLocator.java:75) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer.discoverMods(ModDiscoverer.java:80) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.FMLLoader.beginModScan(FMLLoader.java:154) at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@1.20.4-49.0.30/net.minecraftforge.fml.loading.FMLServiceProvider.beginScanning(FMLServiceProvider.java:58) at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.1.2/cpw.mods.modlauncher.TransformationServiceDecorator.runScan(TransformationServiceDecorator.java:98) at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.1.2/cpw.mods.modlauncher.TransformationServicesHandler.lambda$runScanningTransformationServices$7(TransformationServicesHandler.java:96) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.1.2/cpw.mods.modlauncher.TransformationServicesHandler.runScanningTransformationServices(TransformationServicesHandler.java:98) at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.1.2/cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:49) at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.1.2/cpw.mods.modlauncher.Launcher.run(Launcher.java:86) at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.1.2/cpw.mods.modlauncher.Launcher.main(Launcher.java:73) at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.1.2/cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) at net.minecraftforge.bootstrap@2.0.0/net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:97) ... 6 more
问题分析与解决
崩溃日志明确指向Invalid bare key: ${mod_id},说明项目中src/main/resources/META-INF/mods.toml文件存在未替换的占位符${mod_id}。Forge加载模组时会解析该TOML文件,未替换的占位符不符合TOML语法规则,导致解析失败崩溃。
解决步骤:
- 找到项目中的
src/main/resources/META-INF/mods.toml文件 - 将所有
${mod_id}替换为自定义模组ID(要求:仅包含小写字母、数字和下划线,例如my_first_mod) - 保存文件后重新启动调试
内容的提问来源于stack exchange,提问作者Dimed 1
相关产品推荐
相关产品推荐

