public ModuleManagerImpl() { metadataReader = new ModuleMetadataReader(); for (ModuleExtension ext : StandardModuleExtension.values()) { metadataReader.registerExtension(ext.getKey(), ext.getValueType()); } Module engineModule; try (Reader reader = new InputStreamReader( getClass().getResourceAsStream("/engine-module.txt"), TerasologyConstants.CHARSET)) { ModuleMetadata metadata = metadataReader.read(reader); engineModule = ClasspathModule.create(metadata, getClass(), Module.class); } catch (IOException e) { throw new RuntimeException("Failed to read engine metadata", e); } catch (URISyntaxException e) { throw new RuntimeException("Failed to convert engine library location to path", e); } registry = new TableModuleRegistry(); registry.add(engineModule); ModulePathScanner scanner = new ModulePathScanner(new ModuleLoader(metadataReader)); scanner.getModuleLoader().setModuleInfoPath(TerasologyConstants.MODULE_INFO_FILENAME); scanner.scan(registry, PathManager.getInstance().getModulePaths()); DependencyInfo engineDep = new DependencyInfo(); engineDep.setId(engineModule.getId()); engineDep.setMinVersion(engineModule.getVersion()); engineDep.setMaxVersion(engineModule.getVersion().getNextPatchVersion()); for (Module mod : registry) { if (mod != engineModule) { mod.getMetadata().getDependencies().add(engineDep); } } setupSandbox(); loadEnvironment(Sets.newHashSet(engineModule), true); }