Smol Fixes Yoooo

This commit is contained in:
Sashegdev
2026-04-06 17:00:39 +00:00
parent 0b4af1353d
commit 94968e8e77
4 changed files with 65 additions and 33 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>me.sashegdev</groupId>
<artifactId>ZernMCLauncher</artifactId>
<version>1.0.3</version>
<version>1.0.4</version>
<build>
<plugins>
<plugin>
+5 -4
View File
@@ -131,15 +131,16 @@
<target>
<echo file="../server/builds/build.version">${project.version}</echo>
<!-- Копируем JRE -->
<!-- Копируем содержимое jre/jre21 в папку jre21 (без лишней вложенности) -->
<copy todir="../server/builds/jre21" overwrite="true">
<fileset dir="${user.home}/launcher/jre"/>
<fileset dir="${user.home}/launcher/jre/jre21"/>
</copy>
<!-- Создаём zip -->
<!-- Создаём zip только с .exe и jre21 (без .jar и build.version) -->
<zip destfile="../server/builds/ZernMCLauncher-${project.version}.zip"
basedir="../server/builds"
includes="ZernMCLauncher.exe,ZernMCLauncher.jar,build.version,jre21/**"/>
includes="ZernMCLauncher.exe,jre21/**"
excludes="*.jar,build.version"/>
</target>
</configuration>
</execution>
@@ -191,26 +191,55 @@ public class FabricInstaller {
}
private String getLatestInstallerVersion() throws Exception {
String url = "https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml";
String xml = downloadString(url);
// Пробуем HTTPS сначала
String[] urls = {
"https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml",
"http://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml"
};
int start = xml.indexOf("<latest>") + 8;
int end = xml.indexOf("</latest>", start);
return xml.substring(start, end).trim();
for (String url : urls) {
try {
String xml = downloadString(url);
int start = xml.indexOf("<latest>") + 8;
int end = xml.indexOf("</latest>", start);
return xml.substring(start, end).trim();
} catch (Exception e) {
System.out.println(ZAnsi.yellow("Не удалось получить версию из " + url + ": " + e.getMessage()));
// продолжаем со следующим URL
}
}
throw new Exception("Не удалось получить версию Fabric Installer ни с одного источника");
}
private String downloadString(String url) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(30))
.GET()
.build();
// Увеличиваем таймауты и добавляем ретраи
Exception lastException = null;
HttpResponse<String> resp = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
if (resp.statusCode() != 200) {
throw new IOException("HTTP " + resp.statusCode() + " при скачивании " + url);
for (int attempt = 1; attempt <= 3; attempt++) {
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(30 * attempt)) // увеличиваем таймаут с каждой попыткой
.header("User-Agent", "ZernMC-Launcher/1.0")
.GET()
.build();
HttpResponse<String> resp = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
if (resp.statusCode() == 200) {
return resp.body();
}
throw new IOException("HTTP " + resp.statusCode());
} catch (Exception e) {
lastException = e;
System.out.println(ZAnsi.yellow("Попытка " + attempt + " не удалась: " + e.getMessage()));
if (attempt < 3) {
Thread.sleep(1000 * attempt);
}
}
}
return resp.body();
throw lastException;
}
private void downloadFile(String url, Path target) throws Exception {
@@ -77,20 +77,22 @@ public class VersionInstaller {
System.out.println(ZAnsi.cyan("Скачивание библиотек..."));
downloadLibraries(versionData.getJSONArray("libraries"));
// Ассеты - ЭТО ВАЖНО
String assetIndex = versionData.getString("assets"); // ← Например "5" для 1.20.1
System.out.println(ZAnsi.cyan("Asset index из версии: " + assetIndex));
String assetIndex;
if (versionData.has("assetIndex")) {
System.out.println(ZAnsi.cyan("Скачивание ассетов..."));
downloadAssets(versionData);
System.out.println(ZAnsi.brightGreen("Asset index определён как: " + assetIndex));
JSONObject assetIndexObj = versionData.getJSONObject("assetIndex");
assetIndex = assetIndexObj.getString("id"); // ← это "5" для 1.20.1
} else {
System.out.println(ZAnsi.yellow("Нет assetIndex в версии, использую fallback: " + assetIndex));
assetIndex = versionData.getString("assets"); // fallback
}
System.out.println(ZAnsi.cyan("Asset index: " + assetIndex));
// Скачиваем ассеты используя правильный индекс
System.out.println(ZAnsi.cyan("Скачивание ассетов..."));
downloadAssets(versionData, assetIndex);
System.out.println(ZAnsi.brightGreen("\nMinecraft " + versionId + " полностью установлен!"));
return assetIndex; // ← Возвращаем правильный индекс (например "5")
return assetIndex; // ← возвращаем "5" а не "1.20.1"
}
private void downloadLibraries(JSONArray libraries) throws Exception {
@@ -119,23 +121,23 @@ public class VersionInstaller {
ProgressBar.finish("Библиотеки загружены");
}
private void downloadAssets(JSONObject versionData) throws Exception {
private void downloadAssets(JSONObject versionData, String assetIndex) throws Exception {
// Находим URL для asset index
JSONObject assetIndexInfo = versionData.getJSONObject("assetIndex");
String indexUrl = assetIndexInfo.getString("url");
String indexId = versionData.getString("assets");
Path indexesDir = minecraftDir.resolve("assets/indexes");
Files.createDirectories(indexesDir);
Path indexPath = indexesDir.resolve(indexId + ".json");
Path indexPath = indexesDir.resolve(assetIndex + ".json"); // ← используем assetIndex
System.out.println(ZAnsi.cyan("Скачивание asset index (" + indexId + ")..."));
System.out.println(ZAnsi.cyan("Скачивание asset index (" + assetIndex + ")..."));
downloadFile(indexUrl, indexPath, "asset index");
String jsonContent = Files.readString(indexPath);
JSONObject root = new JSONObject(jsonContent);
JSONObject objects = root.getJSONObject("objects");
System.out.println(ZAnsi.cyan("Скачивание " + objects.length() + " объектов ассетов (index: " + indexId + ")..."));
System.out.println(ZAnsi.cyan("Скачивание " + objects.length() + " объектов ассетов (index: " + assetIndex + ")..."));
int total = objects.length();
int[] success = {0};