diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java index 58c7700d5..b0df94b08 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java @@ -273,7 +273,7 @@ protected final void setSplitAliases(final boolean value) { } /** - * Check whether or not Brigadier can be used on the server instance + * Check whether Brigadier can be used on the server instance * * @throws BrigadierFailureException An exception is thrown if Brigadier isn't available. The exception * will contain the reason for this. @@ -320,6 +320,9 @@ public final boolean queryCapability(final @NonNull CloudBukkitCapabilities capa public void registerBrigadier() throws BrigadierFailureException { this.requireState(RegistrationState.BEFORE_REGISTRATION); this.checkBrigadierCompatibility(); + if (!this.hasCapability(CloudBukkitCapabilities.COMMODORE_BRIGADIER)) { + throw new BrigadierFailureException(BrigadierFailureReason.VERSION_TOO_HIGH); + } try { final CloudCommodoreManager cloudCommodoreManager = new CloudCommodoreManager<>(this); cloudCommodoreManager.initialize(this); @@ -408,6 +411,7 @@ final void lockIfBrigadierCapable() { public enum BrigadierFailureReason { COMMODORE_NOT_PRESENT, VERSION_TOO_LOW, + VERSION_TOO_HIGH, PAPER_BRIGADIER_INITIALIZATION_FAILURE } diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudBukkitCapabilities.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudBukkitCapabilities.java index 4df50d2a0..5d212ab99 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudBukkitCapabilities.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudBukkitCapabilities.java @@ -40,7 +40,9 @@ public enum CloudBukkitCapabilities implements CloudCapability { NATIVE_BRIGADIER(CraftBukkitReflection.classExists( "com.destroystokyo.paper.event.brigadier.CommandRegisteredEvent")), - COMMODORE_BRIGADIER(BRIGADIER.capable() && !NATIVE_BRIGADIER.capable()), + COMMODORE_BRIGADIER(BRIGADIER.capable() + && !NATIVE_BRIGADIER.capable() + && !CraftBukkitReflection.classExists("org.bukkit.entity.Warden")), ASYNCHRONOUS_COMPLETION(CraftBukkitReflection.classExists( "com.destroystokyo.paper.event.server.AsyncTabCompleteEvent")); diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudCommodoreManager.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudCommodoreManager.java index 0a95c90ec..9ed120fcd 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudCommodoreManager.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudCommodoreManager.java @@ -127,7 +127,12 @@ private void unregisterWithCommodore( try { final Class commodoreImpl = this.commodore.getClass(); - final Method removeChild = commodoreImpl.getDeclaredMethod("removeChild", RootCommandNode.class, String.class); + Method removeChild; + try { + removeChild = commodoreImpl.getDeclaredMethod("removeChild", RootCommandNode.class, String.class); + } catch (final NoSuchMethodException ex) { + removeChild = commodoreImpl.getSuperclass().getDeclaredMethod("removeChild", RootCommandNode.class, String.class); + } removeChild.setAccessible(true); removeChild.invoke( diff --git a/gradle/libs.versions.yml b/gradle/libs.versions.yml index 06292a446..a60a8ff95 100644 --- a/gradle/libs.versions.yml +++ b/gradle/libs.versions.yml @@ -35,7 +35,7 @@ versions: guava: 21.0-jre brigadier: 1.0.17 bukkit: 1.13.2-R0.1-SNAPSHOT - commodore: 2.0 + commodore: 2.2 bungeecord: 1.8-SNAPSHOT cloudburst: 1.0.0-SNAPSHOT adventureApi: 4.9.3