HolographicDisplays/core/src/main/java/me/filoghost/holographicdisplays/core/NMSVersion.java

116 lines
5.7 KiB
Java
Raw Normal View History

2021-01-06 14:58:53 +01:00
/*
* Copyright (C) filoghost and contributors
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package me.filoghost.holographicdisplays.core;
2021-01-06 14:58:53 +01:00
import me.filoghost.fcommons.logging.ErrorCollector;
import me.filoghost.holographicdisplays.nms.common.NMSManager;
2021-01-06 14:58:53 +01:00
import org.bukkit.Bukkit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
2021-07-28 10:41:42 +02:00
* The package name used by version-dependent Bukkit classes and NMS classes (before 1.17), for example "v1_13_R2".
* Different versions usually imply internal changes that require multiple implementations.
2021-01-06 14:58:53 +01:00
*/
public enum NMSVersion {
2021-06-20 17:23:48 +02:00
2021-03-13 11:28:23 +01:00
// Not using shorter method reference syntax here because it initializes the class, causing a ClassNotFoundException
/* 1.8 - 1.8.2 */ v1_8_R1(NMSManagerFactory.outdatedVersion("1.8.4")),
/* 1.8.3 */ v1_8_R2(NMSManagerFactory.outdatedVersion("1.8.4")),
/* 1.8.4 - 1.8.9 */ v1_8_R3(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_8_R3.VersionNMSManager(errorCollector)),
/* 1.9 - 1.9.3 */ v1_9_R1(NMSManagerFactory.outdatedVersion("1.9.4")),
/* 1.9.4 */ v1_9_R2(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_9_R2.VersionNMSManager(errorCollector)),
/* 1.10 - 1.10.2 */ v1_10_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_10_R1.VersionNMSManager(errorCollector)),
/* 1.11 - 1.11.2 */ v1_11_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_11_R1.VersionNMSManager(errorCollector)),
/* 1.12 - 1.12.2 */ v1_12_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_12_R1.VersionNMSManager(errorCollector)),
/* 1.13 */ v1_13_R1(NMSManagerFactory.outdatedVersion("1.13.1")),
/* 1.13.1 - 1.13.2 */ v1_13_R2(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_13_R2.VersionNMSManager(errorCollector)),
/* 1.14 - 1.14.4 */ v1_14_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_14_R1.VersionNMSManager(errorCollector)),
/* 1.15 - 1.15.2 */ v1_15_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_15_R1.VersionNMSManager(errorCollector)),
/* 1.16 - 1.16.1 */ v1_16_R1(NMSManagerFactory.outdatedVersion("1.16.4")),
/* 1.16.2 - 1.16.3 */ v1_16_R2(NMSManagerFactory.outdatedVersion("1.16.4")),
/* 1.16.4 - 1.16.5 */ v1_16_R3(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_16_R3.VersionNMSManager(errorCollector)),
2021-12-01 19:20:06 +01:00
/* 1.17 */ v1_17_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_17_R1.VersionNMSManager(errorCollector)),
2022-03-05 17:46:52 +01:00
/* 1.18 - 1.18.1 */ v1_18_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_18_R1.VersionNMSManager(errorCollector)),
2022-06-13 09:22:46 +02:00
/* 1.18.2 */ v1_18_R2(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_18_R2.VersionNMSManager(errorCollector)),
2022-12-12 20:38:48 +01:00
/* 1.19 - 1.19.2 */ v1_19_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_19_R1.VersionNMSManager(errorCollector)),
2023-03-25 15:55:52 +01:00
/* 1.19.3 */ v1_19_R2(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_19_R2.VersionNMSManager(errorCollector)),
2023-06-10 11:04:09 +02:00
/* 1.19.4 */ v1_19_R3(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_19_R3.VersionNMSManager(errorCollector)),
2023-10-01 13:14:09 +02:00
/* 1.20 - 1.20.1 */ v1_20_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_20_R1.VersionNMSManager(errorCollector)),
2023-12-14 19:42:02 +01:00
/* 1.20.2 */ v1_20_R2(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_20_R2.VersionNMSManager(errorCollector)),
/* 1.20.3 - 1.20.4 */ v1_20_R3(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_20_R3.VersionNMSManager(errorCollector)),
/* Other versions */ UNKNOWN(NMSManagerFactory.unknownVersion());
private static final NMSVersion CURRENT_VERSION = detectCurrentVersion();
2021-06-20 17:23:48 +02:00
private final NMSManagerFactory nmsManagerFactory;
2021-01-06 14:58:53 +01:00
NMSVersion(NMSManagerFactory nmsManagerFactory) {
this.nmsManagerFactory = nmsManagerFactory;
2021-01-06 14:58:53 +01:00
}
public NMSManager createNMSManager(ErrorCollector errorCollector) throws OutdatedVersionException, UnknownVersionException {
return nmsManagerFactory.create(errorCollector);
}
public static NMSVersion getCurrent() {
return CURRENT_VERSION;
}
private static NMSVersion detectCurrentVersion() {
2021-01-06 14:58:53 +01:00
Matcher matcher = Pattern.compile("v\\d+_\\d+_R\\d+").matcher(Bukkit.getServer().getClass().getPackage().getName());
if (!matcher.find()) {
return UNKNOWN;
2021-01-06 14:58:53 +01:00
}
String nmsVersionName = matcher.group();
try {
return valueOf(nmsVersionName);
} catch (IllegalArgumentException e) {
return UNKNOWN;
2021-01-06 14:58:53 +01:00
}
}
2021-06-20 17:23:48 +02:00
2021-01-06 14:58:53 +01:00
@FunctionalInterface
private interface NMSManagerFactory {
2021-02-20 09:30:28 +01:00
NMSManager create(ErrorCollector errorCollector) throws UnknownVersionException, OutdatedVersionException;
static NMSManagerFactory unknownVersion() {
return errorCollector -> {
throw new UnknownVersionException();
};
}
static NMSManagerFactory outdatedVersion(String minimumSupportedVersion) {
return errorCollector -> {
throw new OutdatedVersionException(minimumSupportedVersion);
};
}
2021-06-20 17:23:48 +02:00
2021-02-20 09:30:28 +01:00
}
2021-06-20 17:23:48 +02:00
2021-07-29 19:33:02 +02:00
public static class UnknownVersionException extends Exception {}
public static class OutdatedVersionException extends Exception {
private final String minimumSupportedVersion;
public OutdatedVersionException(String minimumSupportedVersion) {
this.minimumSupportedVersion = minimumSupportedVersion;
}
public String getMinimumSupportedVersion() {
return minimumSupportedVersion;
}
}
2021-01-06 14:58:53 +01:00
}