Skip to content

Commit 3254625

Browse files
authored
Merge pull request #30
added update notifications
2 parents 478e7b4 + 00c71a9 commit 3254625

File tree

4 files changed

+94
-0
lines changed

4 files changed

+94
-0
lines changed

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ version = "1.3.3"
1818

1919
repositories {
2020
mavenCentral()
21+
maven("https://jitpack.io")
2122
maven("https://repo.thenextlvl.net/releases")
2223
maven("https://papermc.io/repo/repository/maven-public/")
2324
}
@@ -28,6 +29,7 @@ dependencies {
2829
compileOnly("io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT")
2930

3031
implementation("org.bstats:bstats-bukkit:3.0.2")
32+
implementation("com.github.xmrafonso:hangar4j:1.2.2")
3133

3234
api("net.thenextlvl.core:adapters:1.0.9")
3335

src/main/java/net/thenextlvl/gopaint/GoPaintPlugin.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import net.thenextlvl.gopaint.listener.ConnectListener;
2525
import net.thenextlvl.gopaint.listener.InteractListener;
2626
import net.thenextlvl.gopaint.listener.InventoryListener;
27+
import net.thenextlvl.gopaint.version.VersionChecker;
2728
import org.bstats.bukkit.Metrics;
2829
import org.bukkit.Axis;
2930
import org.bukkit.Bukkit;
@@ -36,6 +37,7 @@
3637
import java.io.File;
3738
import java.util.List;
3839
import java.util.Locale;
40+
import java.util.Objects;
3941
import java.util.Set;
4042

4143
@Accessors(fluent = true)
@@ -68,12 +70,30 @@ public class GoPaintPlugin extends JavaPlugin implements GoPaintProvider {
6870
.create()
6971
).validate().save();
7072

73+
private final VersionChecker versionChecker = new VersionChecker();
7174
private final Metrics metrics = new Metrics(this, 22279);
7275

7376
public GoPaintPlugin() {
7477
registerServices();
7578
}
7679

80+
@Override
81+
@SuppressWarnings("UnstableApiUsage")
82+
public void onLoad() {
83+
versionChecker.retrieveLatestSupportedVersion(latest -> latest.ifPresent(version -> {
84+
var running = VersionChecker.Version.parse(getPluginMeta().getVersion());
85+
if (version.equals(running)) {
86+
getComponentLogger().info("You are running the latest version of goPaintAdvanced");
87+
} else if (version.compareTo(Objects.requireNonNull(running)) > 0) {
88+
getComponentLogger().warn("An update for goPaintAdvanced is available");
89+
getComponentLogger().warn("You are running version {}, the latest supported version is {}", running, version);
90+
getComponentLogger().warn("Update at https://modrinth.com/plugin/gopaintadvanced or https://hangar.papermc.io/TheNextLvl/goPaintAdvanced");
91+
} else {
92+
getComponentLogger().warn("You are running a snapshot version of goPaintAdvanced");
93+
}
94+
}));
95+
}
96+
7797
@Override
7898
public void onEnable() {
7999
registerListeners();
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package net.thenextlvl.gopaint.version;
2+
3+
import me.mrafonso.hangar4j.HangarClient;
4+
import me.mrafonso.hangar4j.impl.Platform;
5+
import me.mrafonso.hangar4j.impl.version.HangarVersion;
6+
import org.bukkit.Bukkit;
7+
import org.jetbrains.annotations.NotNull;
8+
import org.jetbrains.annotations.Nullable;
9+
10+
import java.util.Objects;
11+
import java.util.Optional;
12+
import java.util.function.Consumer;
13+
14+
public class VersionChecker {
15+
private final HangarClient hangarClient = new HangarClient(null);
16+
17+
public void retrieveLatestSupportedVersion(Consumer<Optional<Version>> success) {
18+
Objects.requireNonNull(hangarClient.getVersions("goPaintAdvanced"))
19+
.thenAcceptAsync(versions -> success.accept(versions.result().stream()
20+
.filter(this::isSupported)
21+
.map(Version::parse)
22+
.filter(Objects::nonNull)
23+
.max(Version::compareTo)));
24+
}
25+
26+
private boolean isSupported(HangarVersion version) {
27+
return version.platformDependencies().get(Platform.PAPER)
28+
.contains(Bukkit.getMinecraftVersion());
29+
}
30+
31+
public record Version(int major, int minor, int build) implements Comparable<Version> {
32+
33+
public static @Nullable Version parse(HangarVersion version) {
34+
return parse(version.name());
35+
}
36+
37+
public static @Nullable Version parse(String string) {
38+
try {
39+
var split = string.split("\\.", 3);
40+
return new Version(
41+
Integer.parseInt(split[0]),
42+
Integer.parseInt(split[1]),
43+
Integer.parseInt(split[2])
44+
);
45+
} catch (Exception ignored) {
46+
return null;
47+
}
48+
}
49+
50+
@Override
51+
public int compareTo(@NotNull Version version) {
52+
return major() != version.major() ? Integer.compare(major(), version.major())
53+
: minor() != version.minor() ? Integer.compare(minor(), version.minor())
54+
: Integer.compare(build(), version.build());
55+
}
56+
57+
@Override
58+
public String toString() {
59+
return major() + "." + minor() + "." + build();
60+
}
61+
}
62+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
@TypesAreNotNullByDefault
2+
@FieldsAreNotNullByDefault
3+
@MethodsReturnNotNullByDefault
4+
@ParametersAreNotNullByDefault
5+
package net.thenextlvl.gopaint.version;
6+
7+
import core.annotation.FieldsAreNotNullByDefault;
8+
import core.annotation.MethodsReturnNotNullByDefault;
9+
import core.annotation.ParametersAreNotNullByDefault;
10+
import core.annotation.TypesAreNotNullByDefault;

0 commit comments

Comments
 (0)