Skip to content

Commit

Permalink
feat: Refactor Minecraft version detection
Browse files Browse the repository at this point in the history
This commit refactors enum `MinecraftVersion` to handle Minecraft version
detection. It includes version constants for various Minecraft versions,
ranging from 1.7 to 1.20.6. Each version is associated with a specific
sub-version range to accurately identify the exact release.

The `SubVersionRange` class encapsulates the version number, start, and end
values for each sub-version range. This allows us to map the Bukkit version
to the corresponding Minecraft version.
  • Loading branch information
GeorgeV220 committed Apr 30, 2024
1 parent fa29c21 commit ae51039
Showing 1 changed file with 96 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -757,42 +757,48 @@ public static List<String> placeholderAPI(final ServerOperator target, final Lis
}

public enum MinecraftVersion {
V_1_7_R1,
V_1_7_R2,
V_1_7_R3,
V_1_7_R4,
V1_8_R1,
V1_8_R2,
V1_8_R3,
V1_9_R1,
V1_9_R2,
V1_10_R1,
V1_11_R1,
V1_12_R1,
V1_13_R1,
V1_13_R2,
V1_14_R1,
V1_15_R1,
V1_16_R1,
V1_16_R2,
V1_16_R3,
V1_17_R1,
V1_18_R1,
V1_18_R2,
V1_19_R1,
V1_19_R2,
V1_19_R3,
V1_20_R1,
V1_20_R2,
V1_20_R3,
V1_20_R4,
UNKNOWN,
V_1_7_R1(new SubVersionRange("1.7", 2, 4)),
V_1_7_R2(new SubVersionRange("1.7", 5, 7)),
V_1_7_R3(new SubVersionRange("1.7", 8, 9)),
V_1_7_R4(new SubVersionRange("1.7", 10, 10)),
V1_8_R1(new SubVersionRange("1.8", 0, 1)),
V1_8_R2(new SubVersionRange("1.8", 3, 3)),
V1_8_R3(new SubVersionRange("1.8", 4, 9)),
V1_9_R1(new SubVersionRange("1.9", 0, 2)),
V1_9_R2(new SubVersionRange("1.9", 4, 4)),
V1_10_R1(new SubVersionRange("1.10", 0, 2)),
V1_11_R1(new SubVersionRange("1.11", 0, 2)),
V1_12_R1(new SubVersionRange("1.12", 0, 2)),
V1_13_R1(new SubVersionRange("1.13", 0, 1)),
V1_13_R2(new SubVersionRange("1.13", 2, 2)),
V1_14_R1(new SubVersionRange("1.14", 0, 4)),
V1_15_R1(new SubVersionRange("1.15", 0, 2)),
V1_16_R1(new SubVersionRange("1.16", 0, 1)),
V1_16_R2(new SubVersionRange("1.16", 2, 3)),
V1_16_R3(new SubVersionRange("1.16", 4, 5)),
V1_17_R1(new SubVersionRange("1.17", 0, 1)),
V1_18_R1(new SubVersionRange("1.18", 0, 1)),
V1_18_R2(new SubVersionRange("1.18", 2, 2)),
V1_19_R1(new SubVersionRange("1.19", 0, 2)),
V1_19_R2(new SubVersionRange("1.19", 3, 3)),
V1_19_R3(new SubVersionRange("1.19", 4, 4)),
V1_20_R1(new SubVersionRange("1.20", 0, 1)),
V1_20_R2(new SubVersionRange("1.20", 2, 2)),
V1_20_R3(new SubVersionRange("1.20", 3, 4)),
V1_20_R4(new SubVersionRange("1.20", 5, 6)),
UNKNOWN(new SubVersionRange("UNKNOWN", 0, 0)),
;

private static MinecraftVersion currentVersion;

private static int versionNumber, releaseNumber;

private final SubVersionRange subVersionRange;

MinecraftVersion(SubVersionRange subVersionRange) {
this.subVersionRange = subVersionRange;
}

/**
* Check if the version is above or equal.
*
Expand Down Expand Up @@ -833,6 +839,25 @@ public boolean isBelow(@NotNull MinecraftVersion minecraftVersion) {
return this.ordinal() < minecraftVersion.ordinal();
}

/**
* Check if the version is equal.
*
* @param minecraftVersion The {@link MinecraftVersion} to be checked.
* @return if the minecraft version is equal.
*/
public boolean isEqual(@NotNull MinecraftVersion minecraftVersion) {
return this.ordinal() == minecraftVersion.ordinal();
}

/**
* Get the sub version range.
*
* @return The sub version range.
**/
public SubVersionRange getSubVersionRange() {
return subVersionRange;
}

/**
* Returns the current minecraft server version.
*
Expand Down Expand Up @@ -870,21 +895,54 @@ public static int getReleaseNumber() {
return currentVersion.name().replace("V", "v");
}


static {
try {
currentVersion = MinecraftVersion.valueOf(Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3].toUpperCase());
versionNumber = Integer.parseInt(currentVersion.name().split("_")[1]);
releaseNumber = Integer.parseInt(currentVersion.name().split("R")[1]);
} catch (Exception var2) {
String bukkitVersion = Bukkit.getServer().getBukkitVersion();
if (bukkitVersion.contains("1.20.5")) {
currentVersion = MinecraftVersion.V1_20_R4;
} else {
String[] versionParts = bukkitVersion.split("-")[0].split("\\.");
if (versionParts.length >= 2) {
int majorVersion = Integer.parseInt(versionParts[0]);
int minorVersion = Integer.parseInt(versionParts[1]);
int patchVersion = versionParts.length >= 3 ? Integer.parseInt(versionParts[2]) : 0;
for (MinecraftVersion version : MinecraftVersion.values()) {
if (version.subVersionRange.version.equals(majorVersion + "." + minorVersion) &&
patchVersion >= version.subVersionRange.start && patchVersion <= version.subVersionRange.end) {
currentVersion = version;
versionNumber = Integer.parseInt(currentVersion.name().split("_")[1]);
releaseNumber = Integer.parseInt(currentVersion.name().split("R")[1]);
break;
}
}
}
if (currentVersion == null) {
currentVersion = UNKNOWN;
}
} catch (Exception e) {
currentVersion = UNKNOWN;
}
}

public static class SubVersionRange {
private final String version;
private final int start;
private final int end;

SubVersionRange(String version, int start, int end) {
this.version = version;
this.start = start;
this.end = end;
}

public String getVersion() {
return version;
}

public int getStart() {
return start;
}

public int getEnd() {
return end;
}
}
}

Expand Down

0 comments on commit ae51039

Please sign in to comment.