{"record":{"id":"52cedbb7bb6fc121","repo":"HMCL-dev/HMCL","slug":"curseforge-manifest-gameversion-cannot-be-blank","errorCode":null,"errorMessage":"CurseForge Manifest.gameVersion cannot be blank.","messagePattern":"CurseForge Manifest\\.gameVersion cannot be blank\\.","errorType":"validation","errorClass":"JsonParseException","httpStatus":null,"severity":"error","filePath":"HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/curse/CurseManifestMinecraft.java","lineNumber":48,"sourceCode":"@Override\npublic void validate() throws JsonParseException {\n    if (StringUtils.isBlank(gameVersion))\n        throw new JsonParseException(\"CurseForge Manifest.gameVersion cannot be blank.\");\n}","sourceCodeStart":30,"sourceCodeEnd":52,"githubUrl":"https://github.com/HMCL-dev/HMCL/blob/24702dc5a0214034f4c27166d5fd30cad08cec19/HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/curse/CurseManifestMinecraft.java#L30-L52","documentation":"Post-deserialization validation of the 'minecraft' section of a CurseForge manifest: gameVersion (mapped from the 'version' JSON field) must be non-blank, otherwise the modpack's target Minecraft version is unknown and the manifest is rejected.","triggerScenarios":"Parsing a curse manifest.json whose minecraft.gameVersion is empty, whitespace-only, or absent, then calling validate().","commonSituations":"Incomplete/buggy manifest export, hand-edited manifest where gameVersion was deleted, minimal test manifests missing required fields.","solutions":["Set minecraft.gameVersion to a valid Minecraft version (e.g. \"1.20.1\") in manifest.json","Re-export the modpack from the CurseForge app","Use a different source archive whose manifest is complete"],"exampleFix":"// before\n{\"minecraft\":{\"version\":\"1.0.0\",\"modLoaders\":[...]}}\n// after\n{\"minecraft\":{\"version\":\"1.0.0\",\"gameVersion\":\"1.20.1\",\"modLoaders\":[...]}}","handlingStrategy":"validation","validationCode":"if (manifest.getMinecraft() == null || isBlank(manifest.getMinecraft().getGameVersion())) { /* reject manifest before install */ }","typeGuard":"boolean hasGameVersion(CurseManifestMinecraft m) { return m != null && m.getGameVersion() != null && !m.getGameVersion().isBlank(); }","tryCatchPattern":"try { minecraft.validate(); } catch (JsonParseException e) { log.error(\"Manifest missing gameVersion\", e); }","preventionTips":["Always include minecraft.gameVersion in curse manifests","Test-parse every exported manifest before distribution","Diff manifests against a known-good sample after edits"],"tags":["curseforge","modpack","validation"],"backgroundTag":"empty-required-field","analyzedSha":"24702dc5a0214034f4c27166d5fd30cad08cec19","analyzedAt":"2026-09-10T12:36:46.680Z","contentChangedAt":"2026-09-10T12:36:46.680Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}