private String buildProjectUrl() { return String.format(reference.getCurseforgeBaseUrl() + "%s" + reference.getCookieTest1(), getProjectID()); }
public String getCurseforgeWidgetJson() { return reference.getCurseforgeWidgetJsonMod(); }
@Override public String getCurseforgeWidgetJson() { return reference.getCurseforgeWidgetJsonModpack(); } }
public String getCurseForgeDownloadUrl() { String baseUrl = curseForge ? reference.getCurseforgeBaseUrl() : reference.getFtbBaseUrl(); return String.format(baseUrl + "%s/files/%s/download", getProjectName(), getFileID()); } }
public CurseFile getCurseForgeDownloadLocation(final CurseFile curseFile) throws IOException { val url = curseFile.getCurseForgeDownloadUrl(); val projectName = curseFile.getName(); String encodedDownloadLocation = URLHelper.encodeSpaces(projectName); if (!encodedDownloadLocation.contains(reference.getJarFileExt()) || !encodedDownloadLocation.contains(reference.getZipFileExt())) { val newUrl = url + reference.getCookieTest1(); HttpURLConnection conn = (HttpURLConnection) new URL(newUrl).openConnection(); conn.setInstanceFollowRedirects(false); conn.connect(); String actualURL = conn.getURL().toString(); int retryCount = 0; while (conn.getResponseCode() != 200 || !actualURL.contains(reference.getJarFileExt()) || !actualURL.contains(reference.getZipFileExt())) { val headerLocation = conn.getHeaderField("Location"); if (headerLocation != null) { actualURL = headerLocation; } else { actualURL = conn.getURL().toString(); } if (retryCount > reference.getRetryCounter()) { break; } conn = (HttpURLConnection) new URL(newUrl).openConnection(); retryCount++; } encodedDownloadLocation = getEncodedDownloadLocation(projectName, actualURL, actualURL.lastIndexOf(reference.getUrlDelimiter()) + 1); curseFile.setDownloadUrl(actualURL.replace("http:", "https:")); } curseFile.setFileName(URLHelper.decodeSpaces(encodedDownloadLocation)); return curseFile; }
private void downloadForgeFile(String minecraftVersion, ModLoader modLoader, boolean downloadInstaller, boolean alternateDownloadUrl) { modLoader.setRename(modLoader.getRename(downloadInstaller)); String forgeFileName = "forge-" + minecraftVersion + "-" + modLoader.getForgeId(); String forgeURL = reference.getForgeUrl() + minecraftVersion + "-" + modLoader.getForgeId(); if (alternateDownloadUrl) { forgeFileName += "-" + minecraftVersion; forgeURL += "-" + minecraftVersion; } forgeFileName += downloadInstaller ? reference.getForgeInstaller() : reference.getForgeUniversal(); forgeURL += "/" + forgeFileName; modLoader.setDownloadUrl(forgeURL); modLoader.setFileName(forgeFileName); if (DownloadStatus.FAILURE.equals(downloadHelper.downloadFile(modLoader)) && alternateDownloadUrl) { log.warn("Attempting alternate Forge download URL"); downloadForgeFile(minecraftVersion, modLoader, downloadInstaller, false); } }
private JSONObject getCurseProjectJson(final CurseFile curseFile) throws ParseException, IOException { log.trace("Getting CurseForge Widget JSON..."); val projectId = curseFile.getProjectID(); val projectName = curseFile.getProjectName(); val modOrModPack = curseFile.getCurseforgeWidgetJson(); String urlStr = String.format(reference.getCurseforgeWidgetJsonUrl(), modOrModPack, projectName); log.debug(urlStr); try { return URLHelper.getJsonFromUrl(urlStr); } catch (final FileNotFoundException e) { urlStr = String.format(reference.getCurseforgeWidgetJsonUrl(), modOrModPack, projectId + "-" + projectName); log.debug(urlStr, e); return URLHelper.getJsonFromUrl(urlStr); } }
private void defaultArguments(Arguments arguments) { if (CollectionUtils.isEmpty(arguments.getManifests())) { log.debug("No manifest supplied, using default {}", reference.getDefaultManifestFile()); arguments.setManifests(Lists.newArrayList(new File(reference.getDefaultManifestFile()))); } if (Strings.isNullOrEmpty(arguments.getModFolder())) { log.debug("No output folder supplied, using default \"mods\""); arguments.setModFolder("mods"); } if (noProcessArgsSupplied(arguments)) { arguments.setDownloadMods(true); } }
private void downloadMods(final Manifest manifest) { setExecutorService(Executors.newFixedThreadPool(arguments.getMaxDownloadThreads() > 0 ? arguments.getMaxDownloadThreads() : modList.size() + 1)); ForgeHandler forgeHandler = new ForgeHandler(arguments, downloadHelper); Runnable forgeThread = new Thread(() -> forgeHandler.downloadForge(manifest.getMinecraftVersion(), manifest.getMinecraft().getModLoaders())); getExecutorService().execute(forgeThread); log.trace("Downloading {} mods...", modList.size()); int downloadCount = 1; for (val mod : modList) { log.debug(reference.getDownloadingModXOfY(), mod.getName(), downloadCount++, Reference.downloadTotal); Runnable modDownload = new Thread(() -> { modHandlerHashMap.get(mod.getClass()).downloadMod(mod); Reference.downloadCount++; log.trace("Finished downloading {}", mod.getName()); }); getExecutorService().execute(modDownload); } getExecutorService().shutdown(); log.trace("Finished downloading {} mods.", modList.size()); }
public List<ModLoader> updateForge(String minecraftVersion, List<ModLoader> modLoaders) { if (!arguments.isUpdateForge()) { log.trace("Updating Forge disabled"); return modLoaders; } for (ModLoader modLoader : modLoaders) { JSONObject fileListJson; if (modLoader.getRelease() == null) { log.warn("No Forge release type set for update, defaulting to recommended"); modLoader.setRelease("recommended"); } try { fileListJson = (JSONObject) (URLHelper.getJsonFromUrl(reference.getForgeUpdateUrl())).get("promos"); String updatedForgeVersion = (String) fileListJson.get(minecraftVersion + "-" + modLoader.getRelease()); String manifestForgeVersion = modLoader.getId().substring(modLoader.getId().indexOf('-') + 1); if (VersionHelper.compareVersions(manifestForgeVersion, updatedForgeVersion) < 0) { log.debug("Newer version of Forge found, updating to {}", updatedForgeVersion); modLoader.setId("forge-" + updatedForgeVersion); } } catch (IOException | ParseException e) { log.error("Failed to update Forge", e); } } return modLoaders; }