diff --git a/nms/pom.xml b/nms/pom.xml
index 4ac65a2a..e930fa4b 100644
--- a/nms/pom.xml
+++ b/nms/pom.xml
@@ -14,14 +14,11 @@
pom
- 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
diff --git a/nms/v1_13_r1/pom.xml b/nms/v1_13_r1/pom.xml
deleted file mode 100644
index 2515922f..00000000
--- a/nms/v1_13_r1/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
- 4.0.0
-
-
- me.filoghost.holographicdisplays
- holographicdisplays-nms
- 3.0.0-SNAPSHOT
-
-
- holographicdisplays-nms-v1_13_r1
- HolographicDisplays NMS v1_13_R1
-
-
-
- ${project.groupId}
- holographicdisplays-common
-
-
-
- org.spigotmc
- spigot
- 1.13-R0.1-SNAPSHOT
- provided
-
-
-
-
diff --git a/nms/v1_13_r1/src/main/java/me/filoghost/holographicdisplays/nms/v1_13_R1/VersionNMSManager.java b/nms/v1_13_r1/src/main/java/me/filoghost/holographicdisplays/nms/v1_13_R1/VersionNMSManager.java
deleted file mode 100644
index d4bf55e0..00000000
--- a/nms/v1_13_r1/src/main/java/me/filoghost/holographicdisplays/nms/v1_13_R1/VersionNMSManager.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) filoghost and contributors
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
-package me.filoghost.holographicdisplays.nms.v1_13_R1;
-
-import me.filoghost.holographicdisplays.common.nms.EntityID;
-import me.filoghost.holographicdisplays.common.nms.NMSManager;
-import me.filoghost.holographicdisplays.common.nms.NMSPacketList;
-import me.filoghost.holographicdisplays.common.nms.PacketListener;
-import org.bukkit.entity.Player;
-
-public class VersionNMSManager implements NMSManager {
-
- @Override
- public EntityID newEntityID() {
- return null;
- }
-
- @Override
- public NMSPacketList createPacketList() {
- return null;
- }
-
- @Override
- public void injectPacketListener(Player player, PacketListener packetListener) {
-
- }
-
- @Override
- public void uninjectPacketListener(Player player) {
-
- }
-
-}
diff --git a/nms/v1_8_r2/pom.xml b/nms/v1_8_r2/pom.xml
deleted file mode 100644
index 98fd99f5..00000000
--- a/nms/v1_8_r2/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
- 4.0.0
-
-
- me.filoghost.holographicdisplays
- holographicdisplays-nms
- 3.0.0-SNAPSHOT
-
-
- holographicdisplays-nms-v1_8_r2
- HolographicDisplays NMS v1_8_R2
-
-
-
- ${project.groupId}
- holographicdisplays-common
-
-
-
- org.spigotmc
- spigot
- 1.8.3-R0.1-SNAPSHOT
- provided
-
-
-
-
diff --git a/nms/v1_8_r2/src/main/java/me/filoghost/holographicdisplays/nms/v1_8_R2/VersionNMSManager.java b/nms/v1_8_r2/src/main/java/me/filoghost/holographicdisplays/nms/v1_8_R2/VersionNMSManager.java
deleted file mode 100644
index 7cf8542d..00000000
--- a/nms/v1_8_r2/src/main/java/me/filoghost/holographicdisplays/nms/v1_8_R2/VersionNMSManager.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) filoghost and contributors
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
-package me.filoghost.holographicdisplays.nms.v1_8_R2;
-
-import me.filoghost.holographicdisplays.common.nms.EntityID;
-import me.filoghost.holographicdisplays.common.nms.NMSManager;
-import me.filoghost.holographicdisplays.common.nms.NMSPacketList;
-import me.filoghost.holographicdisplays.common.nms.PacketListener;
-import org.bukkit.entity.Player;
-
-public class VersionNMSManager implements NMSManager {
-
- @Override
- public EntityID newEntityID() {
- return null;
- }
-
- @Override
- public NMSPacketList createPacketList() {
- return null;
- }
-
- @Override
- public void injectPacketListener(Player player, PacketListener packetListener) {
-
- }
-
- @Override
- public void uninjectPacketListener(Player player) {
-
- }
-
-}
diff --git a/nms/v1_9_r1/pom.xml b/nms/v1_9_r1/pom.xml
deleted file mode 100644
index b62c2767..00000000
--- a/nms/v1_9_r1/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
- 4.0.0
-
-
- me.filoghost.holographicdisplays
- holographicdisplays-nms
- 3.0.0-SNAPSHOT
-
-
- holographicdisplays-nms-v1_9_r1
- HolographicDisplays NMS v1_9_R1
-
-
-
- ${project.groupId}
- holographicdisplays-common
-
-
-
- org.spigotmc
- spigot
- 1.9-R0.1-SNAPSHOT
- provided
-
-
-
-
diff --git a/nms/v1_9_r1/src/main/java/me/filoghost/holographicdisplays/nms/v1_9_R1/VersionNMSManager.java b/nms/v1_9_r1/src/main/java/me/filoghost/holographicdisplays/nms/v1_9_R1/VersionNMSManager.java
deleted file mode 100644
index a072e9e9..00000000
--- a/nms/v1_9_r1/src/main/java/me/filoghost/holographicdisplays/nms/v1_9_R1/VersionNMSManager.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) filoghost and contributors
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
-package me.filoghost.holographicdisplays.nms.v1_9_R1;
-
-import me.filoghost.holographicdisplays.common.nms.EntityID;
-import me.filoghost.holographicdisplays.common.nms.NMSManager;
-import me.filoghost.holographicdisplays.common.nms.NMSPacketList;
-import me.filoghost.holographicdisplays.common.nms.PacketListener;
-import org.bukkit.entity.Player;
-
-public class VersionNMSManager implements NMSManager {
-
- @Override
- public EntityID newEntityID() {
- return null;
- }
-
- @Override
- public NMSPacketList createPacketList() {
- return null;
- }
-
- @Override
- public void injectPacketListener(Player player, PacketListener packetListener) {
-
- }
-
- @Override
- public void uninjectPacketListener(Player player) {
-
- }
-
-}
diff --git a/plugin/pom.xml b/plugin/pom.xml
index 5da7d133..fe1653f4 100644
--- a/plugin/pom.xml
+++ b/plugin/pom.xml
@@ -34,21 +34,11 @@
holographicdisplays-legacy-api-v2
-
- ${project.groupId}
- holographicdisplays-nms-v1_8_r2
-
-
${project.groupId}
holographicdisplays-nms-v1_8_r3
-
- ${project.groupId}
- holographicdisplays-nms-v1_9_r1
-
-
${project.groupId}
holographicdisplays-nms-v1_9_r2
@@ -69,11 +59,6 @@
holographicdisplays-nms-v1_12_r1
-
- ${project.groupId}
- holographicdisplays-nms-v1_13_r1
-
-
${project.groupId}
holographicdisplays-nms-v1_13_r2
diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/plugin/HolographicDisplays.java b/plugin/src/main/java/me/filoghost/holographicdisplays/plugin/HolographicDisplays.java
index 8edfe62c..be0aad7d 100644
--- a/plugin/src/main/java/me/filoghost/holographicdisplays/plugin/HolographicDisplays.java
+++ b/plugin/src/main/java/me/filoghost/holographicdisplays/plugin/HolographicDisplays.java
@@ -37,6 +37,7 @@ import me.filoghost.holographicdisplays.plugin.placeholder.internal.DefaultPlace
import me.filoghost.holographicdisplays.plugin.placeholder.registry.PlaceholderRegistry;
import me.filoghost.holographicdisplays.plugin.placeholder.tracking.PlaceholderTracker;
import me.filoghost.holographicdisplays.plugin.util.NMSVersion;
+import me.filoghost.holographicdisplays.plugin.util.NMSVersion.OutdatedVersionException;
import me.filoghost.holographicdisplays.plugin.util.NMSVersion.UnknownVersionException;
import org.bstats.bukkit.MetricsLite;
import org.bukkit.Bukkit;
@@ -87,9 +88,9 @@ public class HolographicDisplays extends FCommonsPlugin {
try {
nmsManager = NMSVersion.getCurrent().createNMSManager(errorCollector);
} catch (UnknownVersionException e) {
- throw new PluginEnableException(
- "Holographic Displays does not support this server version.",
- "Supported Spigot versions: from 1.8.3 to 1.17.");
+ throw new PluginEnableException("Holographic Displays only supports Spigot from 1.8 to 1.17.");
+ } catch (OutdatedVersionException e) {
+ throw new PluginEnableException("Holographic Displays only supports " + e.getMinimumSupportedVersion() + " and above.");
} catch (Throwable t) {
throw new PluginEnableException(t, "Couldn't initialize the NMS manager.");
}
diff --git a/plugin/src/main/java/me/filoghost/holographicdisplays/plugin/util/NMSVersion.java b/plugin/src/main/java/me/filoghost/holographicdisplays/plugin/util/NMSVersion.java
index d3a8a485..6ebd0a21 100644
--- a/plugin/src/main/java/me/filoghost/holographicdisplays/plugin/util/NMSVersion.java
+++ b/plugin/src/main/java/me/filoghost/holographicdisplays/plugin/util/NMSVersion.java
@@ -19,23 +19,26 @@ import java.util.regex.Pattern;
public enum NMSVersion {
// Not using shorter method reference syntax here because it initializes the class, causing a ClassNotFoundException
- v1_8_R2((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_8_R2.VersionNMSManager()),
- v1_8_R3((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_8_R3.VersionNMSManager(errorCollector)),
- v1_9_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_9_R1.VersionNMSManager()),
- v1_9_R2((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_9_R2.VersionNMSManager(errorCollector)),
- v1_10_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_10_R1.VersionNMSManager(errorCollector)),
- v1_11_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_11_R1.VersionNMSManager(errorCollector)),
- v1_12_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_12_R1.VersionNMSManager(errorCollector)),
- v1_13_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_13_R1.VersionNMSManager()),
- v1_13_R2((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_13_R2.VersionNMSManager(errorCollector)),
- v1_14_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_14_R1.VersionNMSManager(errorCollector)),
- v1_15_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_15_R1.VersionNMSManager(errorCollector)),
- v1_16_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_16_R1.VersionNMSManager(errorCollector)),
- v1_16_R2((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_16_R2.VersionNMSManager(errorCollector)),
- v1_16_R3((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_16_R3.VersionNMSManager(errorCollector)),
- v1_17_R1((errorCollector) -> new me.filoghost.holographicdisplays.nms.v1_17_R1.VersionNMSManager(errorCollector));
- private static final NMSVersion CURRENT_VERSION = extractCurrentVersion();
+ /* 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(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_16_R1.VersionNMSManager(errorCollector)),
+ /* 1.16.2 - 1.16.3 */ v1_16_R2(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_16_R2.VersionNMSManager(errorCollector)),
+ /* 1.16.4 - 1.16.5 */ v1_16_R3(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_16_R3.VersionNMSManager(errorCollector)),
+ /* 1.17 - ? */ v1_17_R1(errorCollector -> new me.filoghost.holographicdisplays.nms.v1_17_R1.VersionNMSManager(errorCollector)),
+ /* Other versions */ UNKNOWN(NMSManagerFactory.unknownVersion());
+
+ private static final NMSVersion CURRENT_VERSION = detectCurrentVersion();
private final NMSManagerFactory nmsManagerFactory;
@@ -43,38 +46,62 @@ public enum NMSVersion {
this.nmsManagerFactory = nmsManagerFactory;
}
- public NMSManager createNMSManager(ErrorCollector errorCollector) {
+ public NMSManager createNMSManager(ErrorCollector errorCollector) throws OutdatedVersionException, UnknownVersionException {
return nmsManagerFactory.create(errorCollector);
}
- public static NMSVersion getCurrent() throws UnknownVersionException {
- if (CURRENT_VERSION == null) {
- throw new UnknownVersionException();
- }
+ public static NMSVersion getCurrent() {
return CURRENT_VERSION;
}
- private static NMSVersion extractCurrentVersion() {
+ private static NMSVersion detectCurrentVersion() {
Matcher matcher = Pattern.compile("v\\d+_\\d+_R\\d+").matcher(Bukkit.getServer().getClass().getPackage().getName());
if (!matcher.find()) {
- return null;
+ return UNKNOWN;
}
String nmsVersionName = matcher.group();
try {
return valueOf(nmsVersionName);
} catch (IllegalArgumentException e) {
- return null; // Unknown version
+ return UNKNOWN;
}
}
+ @FunctionalInterface
private interface NMSManagerFactory {
- NMSManager create(ErrorCollector errorCollector);
+ 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);
+ };
+ }
}
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;
+ }
+
+ }
+
}
diff --git a/pom.xml b/pom.xml
index 6aaa206a..e3789b5f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,24 +96,12 @@
${project.version}
-
- ${project.groupId}
- holographicdisplays-nms-v1_8_r2
- ${project.version}
-
-
${project.groupId}
holographicdisplays-nms-v1_8_r3
${project.version}
-
- ${project.groupId}
- holographicdisplays-nms-v1_9_r1
- ${project.version}
-
-
${project.groupId}
holographicdisplays-nms-v1_9_r2
@@ -138,12 +126,6 @@
${project.version}
-
- ${project.groupId}
- holographicdisplays-nms-v1_13_r1
- ${project.version}
-
-
${project.groupId}
holographicdisplays-nms-v1_13_r2