From ffdbcfa3b4cf723083507c82eb180f3e1e0a5d64 Mon Sep 17 00:00:00 2001 From: Colbster937 Date: Mon, 12 Jan 2026 16:27:50 -0600 Subject: [PATCH] fix version sorting --- README.md | 7 +- build.gradle.kts | 2 +- .../base/util/UpdateChecker.java | 76 ++++++++++++------- 3 files changed, 54 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index b3dbfc5..626b475 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,6 @@ - [x] Client brand based blacklisting - [x] Username based blacklisting - [x] IP based blacklisting -- [x] Modular multi-platform support -- [x] JSON5 based configuration - [x] Kick message customization - [x] Blacklist MOTD customization - [x] MiniMessage and legacy formattings supported @@ -20,6 +18,11 @@ - [ ] Subscribe to an auto-updating blacklist - [ ] Reverse blacklist (whitelist) +

Changes from v1

+ +- [x] Modular multi-platform support +- [x] JSON5 based configuration +

Download

The latest release can be found at https://github.com/WebMCDevelopment/originblacklist/releases/latest/ diff --git a/build.gradle.kts b/build.gradle.kts index 008b624..0766644 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ val PLUGIN_NAME = "OriginBlacklist" val PLUGIN_IDEN = "originblacklist" val PLUGIN_DOMN = "xyz.webmc" val PLUGIN_DESC = "An eaglercraft client blacklist plugin." -val PLUGIN_VERS = "2.0.3" +val PLUGIN_VERS = "2.0.4" val PLUGIN_SITE = "https://github.com/WebMCDevelopment/$PLUGIN_IDEN" val PLUGIN_DEPA = listOf("EaglercraftXServer") val PLUGIN_DEPB = listOf("EaglercraftXServer") diff --git a/src/main/java/xyz/webmc/originblacklist/base/util/UpdateChecker.java b/src/main/java/xyz/webmc/originblacklist/base/util/UpdateChecker.java index bbbfa27..6d317dc 100644 --- a/src/main/java/xyz/webmc/originblacklist/base/util/UpdateChecker.java +++ b/src/main/java/xyz/webmc/originblacklist/base/util/UpdateChecker.java @@ -31,42 +31,62 @@ public class UpdateChecker { String ret = null; Json5Element element = json5.parse(reader); reader.close(); + + Json5Object rel = null; + Json5Object snap = null; + if (element instanceof Json5Array) { final Json5Array arr = element.getAsJson5Array(); - if (arr.size() > 0) { - for (int i = 0; i < Math.min(2, arr.size()); i++) { - element = arr.get(i); - if (element instanceof Json5Object) { - final Json5Object obj = element.getAsJson5Object(); - if (allowSnapshots || !obj.get("prerelease").getAsBoolean()) { - final String tag = obj.get("tag_name").getAsString(); - final Semver ver = new Semver(tag.startsWith("v") ? tag.substring(1) : tag); - String comm; - try { - comm = ver.getBuild().get(0).trim(); - } catch (Throwable t) { - comm = ""; - } - if (ver.isGreaterThan(currentVersion) || (allowSnapshots && currentVersion.diff(ver) == VersionDiff.BUILD && OriginBlacklist.isNonNull(comm) && !BuildInfo.get("git_cm_hash").startsWith(comm))) { - element = obj.get("assets"); - if (element instanceof Json5Array) { - final Json5Array aArr = element.getAsJson5Array(); - if (aArr.size() > 0) { - element = aArr.get(0); - if (element instanceof Json5Object) { - final Json5Object vObj = element.getAsJson5Object(); - ret = vObj.get("browser_download_url").getAsString(); - break; - } - } - } + for (int i = 0; i < arr.size(); i++) { + element = arr.get(i); + if (element instanceof Json5Object) { + final Json5Object obj = element.getAsJson5Object(); + if (!obj.has("published_at")) { + continue; + } + final boolean pre = obj.get("prerelease").getAsBoolean(); + if (!pre) { + if (rel == null || obj.get("published_at").getAsString().compareTo(rel.get("published_at").getAsString()) > 0) { + rel = obj; + } + } else { + if (snap == null || obj.get("published_at").getAsString().compareTo(snap.get("published_at").getAsString()) > 0) { + snap = obj; + } + } + } + continue; + } + + for (int i = 0; i < 2; i++) { + final Json5Object obj = i == 0 ? rel : snap; + if (obj == null || (i == 1 && !allowSnapshots)) { + continue; + } + final String tag = obj.get("tag_name").getAsString(); + final Semver ver = new Semver(tag.startsWith("v") ? tag.substring(1) : tag); + String comm; + try { + comm = ver.getBuild().get(0).trim(); + } catch (Throwable t) { + comm = ""; + } + if (ver.isGreaterThan(currentVersion) || (allowSnapshots && currentVersion.diff(ver) == VersionDiff.BUILD && OriginBlacklist.isNonNull(comm) && !BuildInfo.get("git_cm_hash").startsWith(comm))) { + element = obj.get("assets"); + if (element instanceof Json5Array) { + final Json5Array aArr = element.getAsJson5Array(); + if (aArr.size() > 0) { + element = aArr.get(0); + if (element instanceof Json5Object) { + ret = element.getAsJson5Object().get("browser_download_url").getAsString(); + break; } } } - continue; } } } + conn.disconnect(); return ret; } catch (final Throwable t) {