diff options
author | Trương Hoàng Long <longtruong2411@gmail.com> | 2023-04-03 22:57:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-03 22:57:06 +0200 |
commit | 30cba586594478e1d541559c1f275079e61672e7 (patch) | |
tree | 3578ca39e59e975867a0fe43dcf0896cba24c406 /src/main | |
parent | 4fdf580f0e630bcc2933699709ffc42e0f199c80 (diff) | |
parent | 56ebe5d7b0573e0acbbaccdaaf20eb4629fe1cc9 (diff) | |
download | Skyblocker-30cba586594478e1d541559c1f275079e61672e7.tar.gz Skyblocker-30cba586594478e1d541559c1f275079e61672e7.tar.bz2 Skyblocker-30cba586594478e1d541559c1f275079e61672e7.zip |
Merge pull request #129 from TacoMonkey11/update_checker
port UpdateChecker to java.net.http
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/utils/UpdateChecker.java | 87 |
1 files changed, 45 insertions, 42 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/UpdateChecker.java b/src/main/java/me/xmrvizzy/skyblocker/utils/UpdateChecker.java index 9e4b609f..a2809712 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/UpdateChecker.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/UpdateChecker.java @@ -1,64 +1,67 @@ package me.xmrvizzy.skyblocker.utils; -import com.google.gson.*; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; -import net.minecraft.text.*; +import net.minecraft.text.ClickEvent; +import net.minecraft.text.HoverEvent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; import org.spongepowered.asm.util.VersionNumber; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.concurrent.CompletableFuture; import java.util.regex.Matcher; import java.util.regex.Pattern; public class UpdateChecker { - public static boolean shouldUpdate = false; - public static final Pattern pattern = Pattern.compile("v(\\d+)\\.(\\d+)\\.(\\d+)"); - public static final Pattern localPattern = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)"); + public static final Pattern pattern = Pattern.compile("v(.*)\\+.*"); + public static final Pattern localPattern = Pattern.compile("(.*)\\+.*"); public static Matcher matcher; - public static VersionNumber localVersion = null; - public static VersionNumber latestVersion = null; - public static boolean shouldUpdate(){ - if (SkyblockerConfig.get().general.enableUpdateNotification){ - new Thread(() -> { - try{ - URL url = new URL("https://api.modrinth.com/v2/project/skyblocker-liap/version"); + private static VersionNumber latestVersion = null; + private static VersionNumber localVersion = null; + public static void shouldUpdate(){ + if (!SkyblockerConfig.get().general.enableUpdateNotification) return; + try { + URI uri = new URI("https://api.modrinth.com/v2/project/skyblocker-liap/version"); + HttpRequest request = HttpRequest.newBuilder(uri).GET().build(); + CompletableFuture<HttpResponse<String>> response = HttpClient.newHttpClient().sendAsync(request, HttpResponse.BodyHandlers.ofString()); + response.thenAccept(httpResponse -> { + JsonObject versionJson = new Gson().fromJson(httpResponse.body(), JsonElement.class).getAsJsonArray().get(0).getAsJsonObject(); + matcher = pattern.matcher(versionJson.get("version_number").getAsString()); + if (matcher.find()) { + latestVersion = VersionNumber.parse(matcher.group(1)); + } + matcher = localPattern.matcher(FabricLoader.getInstance().getModContainer(SkyblockerMod.NAMESPACE).get().getMetadata().getVersion().getFriendlyString()); + if (matcher.find()) { + localVersion = VersionNumber.parse(matcher.group(1)); + } + if (latestVersion != null && localVersion != null) { + if (localVersion.compareTo(latestVersion) < 0) { + MutableText linkMessage = Text.translatable("skyblocker.update.update_message"); + MutableText linkMessageEnding = Text.translatable("skyblocker.update.update_message_end"); + MutableText link = Text.translatable("skyblocker.update.update_link"); + MutableText hoverText = Text.translatable("skyblocker.update.hover_text"); + linkMessage.append(link.styled(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://modrinth.com/mod/skyblocker-liap/versions")).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)))).append(linkMessageEnding); - InputStreamReader reader = new InputStreamReader(url.openStream()); - JsonObject versionJson = new Gson().fromJson(reader, JsonElement.class).getAsJsonArray().get(0).getAsJsonObject(); - matcher = pattern.matcher(versionJson.get("version_number").getAsString()); - if (matcher.find()){ - latestVersion = VersionNumber.parse(matcher.group(1) + "." + matcher.group(2) + "." + matcher.group(3)); - } - matcher = localPattern.matcher(FabricLoader.getInstance().getModContainer(SkyblockerMod.NAMESPACE).get().getMetadata().getVersion().getFriendlyString()); - if (matcher.find()){ - localVersion = VersionNumber.parse(matcher.group(1) + "." + matcher.group(2) + "." + matcher.group(3)); + MinecraftClient.getInstance().player.sendMessage(linkMessage, false); } - if (localVersion != null && latestVersion != null) - if (localVersion.compareTo(latestVersion) < 0) shouldUpdate = true; - - } catch (IOException e) { - e.printStackTrace(); } - }).start(); + }); + } catch (URISyntaxException e) { + e.printStackTrace(); } - return shouldUpdate; } public static void init(){ - SkyblockEvents.JOIN.register(() -> { - if (shouldUpdate()) { - MutableText linkMessage = Text.translatable("skyblocker.update.update_message"); - MutableText linkMessageEnding = Text.translatable("skyblocker.update.update_message_end"); - MutableText link = Text.translatable("skyblocker.update.update_link"); - MutableText hoverText = Text.translatable("skyblocker.update.hover_text"); - linkMessage.append(link.styled(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://modrinth.com/mod/skyblocker-liap/versions")).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)))).append(linkMessageEnding); - - MinecraftClient.getInstance().player.sendMessage(linkMessage, false); - } - }); + SkyblockEvents.JOIN.register(UpdateChecker::shouldUpdate); } } |