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