Skip to content

Commit 8b9c3c4

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents ce463af + b10f2d0 commit 8b9c3c4

File tree

4 files changed

+99
-20
lines changed

4 files changed

+99
-20
lines changed

src/main/java/org/kettingpowered/launcher/KettingLauncher.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,6 @@ public void init() throws Exception {
118118
else mc_version = Bundled_McVersion;
119119
//This cannot get moved past the ensureOneServerAndUpdate call.
120120
//It will cause the just downloaded server to be removed, which causes issues.
121-
if (Patcher.checkUpdateNeeded()) {
122-
if (Main.DEBUG) I18n.log("debug.patcher.update");
123-
//prematurely delete files to prevent errors
124-
FileUtils.deleteDir(KettingFiles.NMS_BASE_DIR);
125-
FileUtils.deleteDir(KettingFiles.KETTINGSERVER_BASE_DIR);
126-
}
127121

128122
if(!Bundled) ensureOneServerAndUpdate(mc_version);
129123
else extractBundledContent();
@@ -255,15 +249,15 @@ private void ensureOneServerAndUpdate(final String mc_version) throws Exception
255249
}
256250
final List<Tuple<MajorMinorPatchVersion<Integer>, MajorMinorPatchVersion<Integer>>> versions = MajorMinorPatchVersion.parseKettingServerVersionList(Arrays.stream(kettingServerVersions).map(File::getName)).getOrDefault(mc_mmp, new ArrayList<>());
257251

258-
if(versions.isEmpty()) FileUtils.deleteDir(KettingFiles.KETTINGSERVER_FORGE_DIR); //we have multiple ketting versions, but 0 that match the requested minecraft version.
252+
needsDownload = versions.isEmpty();
253+
if(needsDownload) FileUtils.deleteDir(KettingFiles.KETTINGSERVER_FORGE_DIR); //we have multiple ketting versions, but 0 that match the requested minecraft version.
259254
else if(versions.size() > 1) {
260255
serverVersion = versions.get(0);
261256
Tuple<MajorMinorPatchVersion<Integer>, MajorMinorPatchVersion<Integer>> version = serverVersion;
262257
deleteOtherVersions(String.format("%s-%s-%s", mc_mmp, version.t1(), version.t2()));
263258
}else{
264259
serverVersion = versions.get(0);
265260
}
266-
needsDownload = versions.isEmpty();
267261
}
268262

269263
//if we don't have a ketting server version for the given minecraft version or there is a new ketting server version for the given minecraft version and server updates are enabled:
@@ -282,6 +276,12 @@ else if(versions.size() > 1) {
282276
}
283277
serverVersion = parsedServerVersions.get(0);
284278
}
279+
if (Patcher.checkUpdateNeeded(mc_mmp.toString(), serverVersion.t1().toString(), serverVersion.t2().toString(), args.enableServerUpdator() || needsDownload)){
280+
if (Main.DEBUG) I18n.log("debug.patcher.update");
281+
//prematurely delete files to prevent errors
282+
FileUtils.deleteDir(KettingFiles.NMS_BASE_DIR);
283+
FileUtils.deleteDir(KettingFiles.KETTINGSERVER_BASE_DIR);
284+
}
285285
//and download it
286286
if (args.enableServerUpdator() || needsDownload) {
287287
final String mc_minecraft_forge = String.format("%s-%s-%s", mc_mmp, serverVersion.t1(), serverVersion.t2());
@@ -358,7 +358,8 @@ void prepareLaunch() throws Exception {
358358
addToClassPath(KettingFileVersioned.SERVER_JAR);
359359
}
360360
downloadMCP.join();
361-
if (Patcher.checkUpdateNeeded()) new Patcher();
361+
if (Patcher.checkUpdateNeeded(KettingConstants.MINECRAFT_VERSION, KettingConstants.FORGE_VERSION, KettingConstants.KETTING_VERSION, false))
362+
new Patcher();
362363

363364
JavaHacks.clearReservedIdentifiers();
364365
Arrays.stream(libs.getLoadedLibs())

src/main/java/org/kettingpowered/launcher/Patcher.java

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
import org.kettingpowered.ketting.internal.KettingFileVersioned;
1212
import org.kettingpowered.ketting.internal.KettingFiles;
1313
import org.kettingpowered.launcher.betterui.BetterUI;
14+
import org.kettingpowered.launcher.dependency.Dependency;
15+
import org.kettingpowered.launcher.dependency.Maven;
16+
import org.kettingpowered.launcher.dependency.MavenArtifact;
1417
import org.kettingpowered.launcher.internal.utils.HashUtils;
1518
import org.kettingpowered.launcher.internal.utils.NetworkUtils;
1619
import org.kettingpowered.launcher.lang.I18n;
@@ -25,10 +28,7 @@
2528
import java.io.IOException;
2629
import java.io.PrintStream;
2730
import java.security.NoSuchAlgorithmException;
28-
import java.util.ArrayList;
29-
import java.util.HashMap;
30-
import java.util.List;
31-
import java.util.Map;
31+
import java.util.*;
3232

3333
public class Patcher {
3434

@@ -201,7 +201,8 @@ private static void writeStoredHashes() throws IOException, NoSuchAlgorithmExcep
201201
.append(HashUtils.getHash(KettingFileVersioned.SERVER_JAR, "SHA3-512"));
202202
}
203203
}
204-
public static boolean checkUpdateNeeded() {
204+
205+
public static boolean checkUpdateNeeded(String mcVersion, String forgeVersion, String kettingVersion, boolean updating) {
205206
if (!KettingFiles.STORED_HASHES.exists()) return true;
206207
try (BufferedReader reader = new BufferedReader(new FileReader(KettingFiles.STORED_HASHES))){
207208
return !reader.lines()
@@ -211,21 +212,42 @@ public static boolean checkUpdateNeeded() {
211212
try {
212213
return switch (args[0].trim()) {
213214
case "installJson" ->
214-
value.equals(HashUtils.getHash(KettingFileVersioned.FORGE_INSTALL_JSON, "SHA3-512"));
215+
checkUpdateNeededInstallerJson(mcVersion, forgeVersion, kettingVersion, value, updating);
215216
case "serverLzma" ->
216217
value.equals(HashUtils.getHash(KettingFiles.SERVER_LZMA, "SHA3-512"));
217-
case "server" ->
218-
value.equals(HashUtils.getHash(KettingFileVersioned.SERVER_JAR, "SHA3-512"));
218+
case "server" -> checkUpdateNeededServer(mcVersion, value);
219219
default -> false;
220220
};
221-
} catch (NoSuchAlgorithmException | IOException e) {
221+
} catch (Exception e) {
222222
return false;
223223
}
224224
});
225225
}catch (Exception ignored) {
226226
return true;
227227
}
228228
}
229+
public static boolean checkUpdateNeededServer(String mcVersion, String hash) throws Exception {
230+
final File NMSDir = new File(KettingFiles.NMS_BASE_DIR, mcVersion);
231+
final File SERVER_JAR = new File(NMSDir, "server-" + mcVersion + ".jar");
232+
return hash.equals(HashUtils.getHash(SERVER_JAR, "SHA3-512"));
233+
}
234+
public static boolean checkUpdateNeededInstallerJson(String mcVersion, String forgeVersion, String kettingVersion, String hash, boolean updating) throws Exception {
235+
final String mcForgeKettingVersion = mcVersion+"-"+forgeVersion+"-"+kettingVersion;
236+
if (updating){
237+
Dependency<MavenArtifact> dep = new MavenArtifact(
238+
KettingConstants.KETTINGSERVER_GROUP,
239+
Main.FORGE_SERVER_ARTIFACT_ID,
240+
mcForgeKettingVersion,
241+
Optional.of("installscript"),
242+
Optional.of("json")
243+
).downloadDependencyHash();
244+
if (Maven.needsDownload(dep.hash(), KettingFiles.LIBRARIES_DIR.toPath(), dep)) return false;
245+
}
246+
final File forgeServerDir = new File(KettingFiles.KETTINGSERVER_FORGE_DIR, mcForgeKettingVersion);
247+
final File installJson = new File(forgeServerDir, "forge-" + mcForgeKettingVersion + "-installscript.json");
248+
return hash.equals(HashUtils.getHash(installJson,"SHA3-512"));
249+
}
250+
229251

230252
private void mute() {
231253
System.setOut(log);

src/main/java/org/kettingpowered/launcher/lang/I18n.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.gson.JsonElement;
44
import com.google.gson.JsonParser;
55
import org.jetbrains.annotations.NotNull;
6+
import org.kettingpowered.launcher.Main;
67

78
import java.io.IOException;
89
import java.io.InputStream;
@@ -26,6 +27,7 @@ public static void load() {
2627

2728
public static void load(boolean silent) {
2829
if (current != null) return;
30+
silent = silent && !Main.DEBUG;
2931

3032
current = Locale.getDefault();
3133

@@ -41,9 +43,10 @@ public static void load(boolean silent) {
4143
}
4244

4345
private static void loadFile(String langCode, Map<String, String> toAdd, boolean silent) {
46+
silent = silent && !Main.DEBUG;
4447
try (InputStream lang = I18n.class.getClassLoader().getResourceAsStream(LANG_PATH + langCode + ".json")) {
45-
if (lang == null && !silent) {
46-
System.out.println("Language file not found for " + langCode + ", using default");
48+
if (lang == null) {
49+
if (!silent) System.out.println("Language file not found for " + langCode + ", using default");
4750
return;
4851
}
4952

src/main/resources/lang/de_de.json

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"debug.bundled": "Eingebundene JAR erkannt, lese Manifest...",
3+
"debug.bundled.extra": "Eingebundene JAR erkannt, MC Version %s, Forge Version %s und Ketting Version %s gefunden",
4+
"debug.launcher.available_server_versions": "Verfügbare Ketting Versionen",
5+
"debug.maven.dep_hash_match": "Cache-Treffer für %s, Hash ist identisch",
6+
"debug.maven.dep_not_found": "Abhängigkeit '%s' existiert nicht",
7+
"debug.maven.downloaded_dep": "Abhängigkeit %s wurde von %s heruntergeladen",
8+
"debug.maven.downloaded_hash": "Hash für %s wurde heruntergeladen",
9+
"debug.maven.downloading_dep": "Lade Abhängigkeit %s herunter",
10+
"debug.maven.downloading_hash": "Lade Hash für %s herunter",
11+
"debug.maven.re_downloading.empty_hash": "Lade %s erneut herunter wegen einem leeren Hash",
12+
"debug.maven.re_downloading.hash_mismatch": "Lade %s erneut herunter wegen einem Hash-Fehler (erwartete %s, bekam %s)",
13+
"debug.patcher.update": "Die Server-Dateien sind nicht aktuell, aktualisiere...",
14+
15+
"error.launcher.bin_patches_move": "Das Verschieben der Server-Bin-Patches ist fehlgeschlagen, das könnte Fehler beim Patchen verursachen!",
16+
"error.launcher.bundle_extract_failed": "Das extrahieren der eingebundenen JAR Inhalte ist fehlgeschlagen",
17+
"error.launcher.bundled_file_not_found": "Eingebundene Datei '%s' konnte nicht gefunden werden",
18+
"error.launcher.hash_algorithm_not_found": "Hash Algorithmus konnte nicht gefunden werden",
19+
"error.launcher.no_server_version": "Es konnte keine Ketting Version für die Minecraft Version %s gefunden werden",
20+
"error.launcher.unrecognized_version": "Nicht erkannte Launcher Version",
21+
"error.launcher.update_failed": "Der Launcher konnte nicht aktualisiert werden, bitte überprüfe, ob das Programm Schreibrechte besitzt",
22+
"error.libraries.failed_to_load": "Die Bibliotheken konnten nicht geladen werden",
23+
"error.maven.all_repos_failed": "Alle zur Verfügung gestellten Repositories konnten eine Abhängigkeit nicht bereitstellen",
24+
"error.maven.failed_to_delete_dep": "Beim Löschen der Abhängigkeiten lief etwas schief %s",
25+
"error.maven.hash_mismatch": "Hash-Fehler für %s (erwartete %s, bekam %s)",
26+
"error.maven.no_hash": "Kein Hash konnte für %s gefunden werden",
27+
"error.maven.no_versions": "Die Maven Metadata enthält keinen 'versions' Tag",
28+
"error.maven.unknown_error": "Beim Herunterladen der Abhängigkeiten ist ein unbekannter Fehler aufgetreten",
29+
"error.mc_version.manual_enter.invalid": "Ungültige Minecraft Version, bitte versuche es erneut",
30+
"error.mc_version.manual_enter.not_supported": "Die Minecraft Version %s wird nicht unterstützt",
31+
"error.mc_version.manual_enter.too_many_attempts": "Es wurde zu oft eine ungültige Minecraft Version eingegeben, bitte starte den Launcher neu",
32+
"error.network_utils.hash_mismatch": "%s Hash-Fehler (erwartete %s, bekam %s)",
33+
"error.patcher.failed_download": "Die Serverdatei konnte nicht heruntergeladen werden",
34+
"error.patcher.failed_read_install_script": "Das Installations-Skript konnte nicht gelesen werden",
35+
"error.patcher.no_release": "Es konnte kein Release für die Minecraft Version %s gefunden werden",
36+
"error.patcher.no_release_manifest": "Das Release-Manifest konnte nicht heruntergeladen werden",
37+
"error.patcher.no_version_manifest": "Das Versionsmanifest konnte nicht heruntergeladen werden",
38+
"error.patcher.processor_fault": "Bei einem Prozessor ist ein Fehler aufgetreten",
39+
"error.processor.unknown_processor": "Unbekannter Prozessor '%s'",
40+
41+
"info.launcher.install_only.success": "Ketting wurde erfolgreich installiert, verlasse den Nur-Installations-Modus",
42+
"info.launcher.launching": "Starte Ketting...",
43+
"info.launcher.server_download": "Lade den Server von der erkannten Minecraft Version %s herunter...",
44+
"info.launcher.up_to_date": "Launcher ist aktuell",
45+
"info.launcher.updated": "Launcher wurde aktualisiert, bitte starte den Launcher neu",
46+
"info.libraries.skip_bundled": "Überspringe eingebundene Bibliothek %s",
47+
"info.libraries.using_different": "Nutze %s anstelle von %s",
48+
"info.mc_version.from_mappings": "Nutze Minecraft Version %s basierend auf den Mappings",
49+
"info.mc_version.manual_enter": "Die Minecraft Version konnte nicht erkannt werden, bitte gib die Version manuell an",
50+
"info.mc_version.manual_enter.prompt": "Minecraft Version: ",
51+
"info.mc_version.manual_enter.supported": "Unterstützte Version: %s",
52+
"info.mc_version.multiple_mappings": "Die Minecraft Version konnte nicht basierend auf den Mappings erkannt werden, es wurden mehrere Mappings gefunden"
53+
}

0 commit comments

Comments
 (0)