2018-11-19 15:05:06 +01:00
|
|
|
package com.earth2me.essentials.utils;
|
|
|
|
|
|
|
|
import com.google.common.base.Objects;
|
|
|
|
import com.google.common.base.Preconditions;
|
|
|
|
import com.google.common.collect.ImmutableSet;
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
|
|
|
|
import java.util.Set;
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
public class VersionUtil {
|
|
|
|
|
|
|
|
public static final BukkitVersion v1_8_8_R01 = BukkitVersion.fromString("1.8.8-R0.1-SNAPSHOT");
|
2019-01-03 21:32:35 +01:00
|
|
|
public static final BukkitVersion v1_9_R01 = BukkitVersion.fromString("1.9-R0.1-SNAPSHOT");
|
2018-11-19 15:05:06 +01:00
|
|
|
public static final BukkitVersion v1_9_4_R01 = BukkitVersion.fromString("1.9.4-R0.1-SNAPSHOT");
|
|
|
|
public static final BukkitVersion v1_10_2_R01 = BukkitVersion.fromString("1.10.2-R0.1-SNAPSHOT");
|
|
|
|
public static final BukkitVersion v1_11_2_R01 = BukkitVersion.fromString("1.11.2-R0.1-SNAPSHOT");
|
2018-12-08 17:41:09 +01:00
|
|
|
public static final BukkitVersion v1_12_0_R01 = BukkitVersion.fromString("1.12.0-R0.1-SNAPSHOT");
|
2018-11-19 15:05:06 +01:00
|
|
|
public static final BukkitVersion v1_12_2_R01 = BukkitVersion.fromString("1.12.2-R0.1-SNAPSHOT");
|
|
|
|
public static final BukkitVersion v1_13_0_R01 = BukkitVersion.fromString("1.13.0-R0.1-SNAPSHOT");
|
|
|
|
public static final BukkitVersion v1_13_2_R01 = BukkitVersion.fromString("1.13.2-R0.1-SNAPSHOT");
|
2019-05-09 00:26:40 +02:00
|
|
|
public static final BukkitVersion v1_14_R01 = BukkitVersion.fromString("1.14-R0.1-SNAPSHOT");
|
2019-07-20 09:48:13 +02:00
|
|
|
public static final BukkitVersion v1_14_4_R01 = BukkitVersion.fromString("1.14.4-R0.1-SNAPSHOT");
|
2020-01-14 08:50:48 +01:00
|
|
|
public static final BukkitVersion v1_15_R01 = BukkitVersion.fromString("1.15-R0.1-SNAPSHOT");
|
2019-12-19 01:02:23 +01:00
|
|
|
public static final BukkitVersion v1_15_1_R01 = BukkitVersion.fromString("1.15.1-R0.1-SNAPSHOT");
|
2020-01-22 09:18:46 +01:00
|
|
|
public static final BukkitVersion v1_15_2_R01 = BukkitVersion.fromString("1.15.2-R0.1-SNAPSHOT");
|
2018-11-19 15:05:06 +01:00
|
|
|
|
2020-01-22 09:18:46 +01:00
|
|
|
private static final Set<BukkitVersion> supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01);
|
2018-11-19 15:05:06 +01:00
|
|
|
|
2019-01-05 17:29:11 +01:00
|
|
|
private static BukkitVersion serverVersion = null;
|
|
|
|
|
2018-12-06 18:41:32 +01:00
|
|
|
public static BukkitVersion getServerBukkitVersion() {
|
2019-01-05 17:29:11 +01:00
|
|
|
if (serverVersion == null) {
|
|
|
|
serverVersion = BukkitVersion.fromString(Bukkit.getServer().getBukkitVersion());
|
|
|
|
}
|
|
|
|
return serverVersion;
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
|
|
|
|
2018-12-06 18:41:32 +01:00
|
|
|
public static boolean isServerSupported() {
|
2018-11-19 23:43:36 +01:00
|
|
|
return supportedVersions.contains(getServerBukkitVersion());
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public static class BukkitVersion implements Comparable<BukkitVersion> {
|
2019-06-25 08:18:16 +02:00
|
|
|
private static final Pattern VERSION_PATTERN = Pattern.compile("^(\\d+)\\.(\\d+)\\.?([0-9]*)?(?:-pre(\\d))?(?:-?R?([\\d.]+))?(?:-SNAPSHOT)?");
|
2018-11-19 15:05:06 +01:00
|
|
|
|
|
|
|
private final int major;
|
|
|
|
private final int minor;
|
2019-04-24 14:37:43 +02:00
|
|
|
private final int prerelease;
|
2018-11-19 15:05:06 +01:00
|
|
|
private final int patch;
|
|
|
|
private final double revision;
|
|
|
|
|
|
|
|
public static BukkitVersion fromString(String string) {
|
|
|
|
Preconditions.checkNotNull(string, "string cannot be null.");
|
|
|
|
Matcher matcher = VERSION_PATTERN.matcher(string);
|
|
|
|
if (!matcher.matches()) {
|
|
|
|
if (!Bukkit.getName().equals("Essentials Fake Server")) {
|
2018-11-19 23:43:36 +01:00
|
|
|
throw new IllegalArgumentException(string + " is not in valid version format. e.g. 1.8.8-R0.1");
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
2019-05-09 00:26:40 +02:00
|
|
|
matcher = VERSION_PATTERN.matcher(v1_14_R01.toString());
|
2018-11-19 23:43:36 +01:00
|
|
|
Preconditions.checkArgument(matcher.matches(), string + " is not in valid version format. e.g. 1.8.8-R0.1");
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
2019-01-03 23:16:14 +01:00
|
|
|
|
2019-05-09 00:26:40 +02:00
|
|
|
return from(matcher.group(1), matcher.group(2), matcher.group(3), matcher.groupCount() < 5 ? "" : matcher.group(5), matcher.group(4));
|
2019-01-03 23:16:14 +01:00
|
|
|
}
|
|
|
|
|
2019-04-24 14:37:43 +02:00
|
|
|
private static BukkitVersion from(String major, String minor, String patch, String revision, String prerelease) {
|
2019-05-09 00:26:40 +02:00
|
|
|
if (patch == null || patch.isEmpty()) patch = "0";
|
|
|
|
if (revision == null || revision.isEmpty()) revision = "0";
|
|
|
|
if (prerelease == null || prerelease.isEmpty()) prerelease = "-1";
|
2019-01-03 23:16:14 +01:00
|
|
|
return new BukkitVersion(Integer.parseInt(major),
|
|
|
|
Integer.parseInt(minor),
|
|
|
|
Integer.parseInt(patch),
|
2019-04-24 14:37:43 +02:00
|
|
|
Double.parseDouble(revision),
|
|
|
|
Integer.parseInt(prerelease));
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
|
|
|
|
2019-04-24 14:37:43 +02:00
|
|
|
private BukkitVersion(int major, int minor, int patch, double revision, int prerelease) {
|
2018-11-19 15:05:06 +01:00
|
|
|
this.major = major;
|
|
|
|
this.minor = minor;
|
|
|
|
this.patch = patch;
|
|
|
|
this.revision = revision;
|
2019-04-24 14:37:43 +02:00
|
|
|
this.prerelease = prerelease;
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isHigherThan(BukkitVersion o) {
|
|
|
|
return compareTo(o) > 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isHigherThanOrEqualTo(BukkitVersion o) {
|
|
|
|
return compareTo(o) >= 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isLowerThan(BukkitVersion o) {
|
|
|
|
return compareTo(o) < 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isLowerThanOrEqualTo(BukkitVersion o) {
|
|
|
|
return compareTo(o) <= 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getMajor() {
|
|
|
|
return major;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getMinor() {
|
|
|
|
return minor;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getPatch() {
|
|
|
|
return patch;
|
|
|
|
}
|
|
|
|
|
|
|
|
public double getRevision() {
|
|
|
|
return revision;
|
|
|
|
}
|
|
|
|
|
2019-04-24 14:37:43 +02:00
|
|
|
public int getPrerelease() {
|
|
|
|
return prerelease;
|
|
|
|
}
|
|
|
|
|
2018-11-19 15:05:06 +01:00
|
|
|
@Override
|
|
|
|
public boolean equals(Object o) {
|
|
|
|
if (this == o) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (o == null || getClass() != o.getClass()) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
BukkitVersion that = (BukkitVersion) o;
|
|
|
|
return major == that.major &&
|
2019-05-09 00:26:40 +02:00
|
|
|
minor == that.minor &&
|
|
|
|
patch == that.patch &&
|
|
|
|
revision == that.revision &&
|
|
|
|
prerelease == that.prerelease;
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int hashCode() {
|
2019-04-24 14:37:43 +02:00
|
|
|
return Objects.hashCode(major, minor, patch, revision, prerelease);
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
2019-04-24 14:37:43 +02:00
|
|
|
StringBuilder sb = new StringBuilder(major + "." + minor);
|
|
|
|
if (patch != 0) {
|
|
|
|
sb.append(".").append(patch);
|
|
|
|
}
|
|
|
|
if (prerelease != -1) {
|
|
|
|
sb.append("-pre").append(prerelease);
|
|
|
|
}
|
|
|
|
return sb.append("-R").append(revision).toString();
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int compareTo(BukkitVersion o) {
|
|
|
|
if (major < o.major) {
|
|
|
|
return -1;
|
|
|
|
} else if (major > o.major) {
|
|
|
|
return 1;
|
|
|
|
} else { // equal major
|
|
|
|
if (minor < o.minor) {
|
|
|
|
return -1;
|
|
|
|
} else if (minor > o.minor) {
|
|
|
|
return 1;
|
|
|
|
} else { // equal minor
|
|
|
|
if (patch < o.patch) {
|
|
|
|
return -1;
|
|
|
|
} else if (patch > o.patch) {
|
|
|
|
return 1;
|
|
|
|
} else { // equal patch
|
2019-04-24 14:37:43 +02:00
|
|
|
if (prerelease < o.prerelease) {
|
|
|
|
return -1;
|
|
|
|
} else if (prerelease > o.prerelease) {
|
|
|
|
return 1;
|
|
|
|
} else { // equal prerelease
|
|
|
|
return Double.compare(revision, o.revision);
|
|
|
|
}
|
2018-11-19 15:05:06 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-05-14 10:00:22 +02:00
|
|
|
}
|