{"record":{"id":"6878727a66002179","repo":"HMCL-dev/HMCL","slug":"game-processor-file-not-found-should-be-downloade-687872","errorCode":null,"errorMessage":"Game processor file not found, should be downloaded in preprocess","messagePattern":"Game processor file not found, should be downloaded in preprocess","errorType":"exception","errorClass":"FileNotFoundException","httpStatus":null,"severity":"error","filePath":"HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOldInstallTask.java","lineNumber":114,"sourceCode":"\n                    if (!Objects.equals(code, value)) {\n                        Files.delete(artifact);\n                        LOG.info(\"Found existing file is not valid: \" + artifact);\n\n                        miss = true;\n                    }\n                } else {\n                    miss = true;\n                }\n            }\n\n            if (!processor.getOutputs().isEmpty() && !miss) {\n                return;\n            }\n\n            Path jar = gameRepository.getLayout().getArtifactFile(processor.getJar());\n            if (!Files.isRegularFile(jar))\n                throw new FileNotFoundException(\"Game processor file not found, should be downloaded in preprocess\");\n\n            String mainClass;\n            try (JarFile jarFile = new JarFile(jar.toFile())) {\n                mainClass = jarFile.getManifest().getMainAttributes().getValue(Attributes.Name.MAIN_CLASS);\n            }\n\n            if (StringUtils.isBlank(mainClass))\n                throw new Exception(\"Game processor jar does not have main class \" + jar);\n\n            List<String> command = new ArrayList<>();\n            command.add(JavaRuntime.getDefault().getBinary().toString());\n            command.add(\"-cp\");\n\n            List<String> classpath = new ArrayList<>(processor.getClasspath().size() + 1);\n            for (Artifact artifact : processor.getClasspath()) {\n                Path file = gameRepository.getLayout().getArtifactFile(artifact);\n                if (!Files.isRegularFile(file))\n                    throw new Exception(\"Game processor dependency missing\");","sourceCodeStart":96,"sourceCodeEnd":132,"githubUrl":"https://github.com/HMCL-dev/HMCL/blob/24702dc5a0214034f4c27166d5fd30cad08cec19/HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOldInstallTask.java#L96-L132","documentation":"Thrown as java.io.FileNotFoundException by ProcessorTask.execute when the processor's JAR artifact (processor.getJar(), e.g. the NeoForge installer's toolbox/unpacking processor jar) is not a regular file in the game repository. The preprocess download step (GameLibrariesTask of the install profile) should have downloaded it; this error means that step failed, was skipped, or the file was deleted from the libraries directory.","triggerScenarios":"NeoForge/Forge (old-style install_profile.json) installation runs ProcessorTask.execute after output checksums were missing/mismatched; gameRepository.getLayout().getArtifactFile(processor.getJar()) does not exist because the preprocess library download failed, was interrupted, or the file was manually deleted.","commonSituations":"Network failures or antivirus quarantine during library download; corrupted/cleaned .minecraft/libraries directory; retrying an install after a partial download; download mirror missing the processor artifact.","solutions":["Re-run the NeoForge/Forge installation so the preprocess (GameLibrariesTask) downloads the missing processor jar again","Verify network/mirror availability and retry the download of the version's libraries","Check the file at the path printed in the error under .minecraft/libraries and delete corrupted sibling files so they are re-fetched","Temporarily disable antivirus that may quarantine freshly downloaded jars","Install to a fresh game directory to rule out a corrupted repository"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"Path jar = gameRepository.getLayout().getArtifactFile(processor.getJar());\nif (!Files.isRegularFile(jar)) {\n    // re-run library download (GameLibrariesTask) before executing processors\n}","typeGuard":null,"tryCatchPattern":"try { task.run(); } catch (FileNotFoundException e) { if (e.getMessage().contains(\"Game processor file not found\")) reDownloadLibrariesAndRetry(); else throw e; }","preventionTips":["Always run the preprocess/library download step to completion before processors","Verify downloads with SHA-1 integrity checks","Exclude the game directory from antivirus real-time scanning","Don't manually clean the libraries directory during an install"],"tags":["java","download","installer","missing-file"],"backgroundTag":"file-not-found","analyzedSha":"24702dc5a0214034f4c27166d5fd30cad08cec19","analyzedAt":"2026-09-10T12:36:46.680Z","contentChangedAt":"2026-09-10T12:36:46.680Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}