🐛 Fix BukkitCommandManager capability calculations

This commit is contained in:
Alexander Söderberg 2020-10-04 21:18:16 +02:00
parent 38aff56e92
commit 5a89f98a25
No known key found for this signature in database
GPG key ID: FACEA5B0F4C1BF80

View file

@ -61,9 +61,10 @@ import java.util.regex.Pattern;
*/ */
public class BukkitCommandManager<C> extends CommandManager<C> { public class BukkitCommandManager<C> extends CommandManager<C> {
private static final int VERSION_RADIX = 10; private static final int VERSION_RADIX = 10;
private static final int BRIGADIER_MINIMAL_VERSION = 13; private static final int BRIGADIER_MINIMUM_VERSION = 13;
private static final int PAPER_BRIGADIER_VERSION = 15; private static final int PAPER_BRIGADIER_VERSION = 15;
private static final int ASYNC_TAB_MINIMUM_VERSION = 12;
private final Plugin owningPlugin; private final Plugin owningPlugin;
private final int minecraftVersion; private final int minecraftVersion;
@ -99,14 +100,14 @@ public class BukkitCommandManager<C> extends CommandManager<C> {
int version = -1; int version = -1;
try { try {
final Matcher matcher = Pattern.compile("\\(MC: (\\d)\\.(\\d+)\\.?(\\d+?)?\\)") final Matcher matcher = Pattern.compile("\\(MC: (\\d)\\.(\\d+)\\.?(\\d+?)?\\)")
.matcher(Bukkit.getVersion()); .matcher(Bukkit.getVersion());
if (matcher.find()) { if (matcher.find()) {
version = Integer.parseInt(matcher.toMatchResult().group(2), version = Integer.parseInt(matcher.toMatchResult().group(2),
VERSION_RADIX); VERSION_RADIX);
} }
} catch (final Exception e) { } catch (final Exception e) {
this.owningPlugin.getLogger().severe("Failed to determine Minecraft version " this.owningPlugin.getLogger().severe("Failed to determine Minecraft version "
+ "for cloud Bukkit capability detection"); + "for cloud Bukkit capability detection");
} }
this.minecraftVersion = version; this.minecraftVersion = version;
@ -209,20 +210,21 @@ public class BukkitCommandManager<C> extends CommandManager<C> {
*/ */
public final @NonNull Set<@NonNull CloudBukkitCapabilities> queryCapabilities() { public final @NonNull Set<@NonNull CloudBukkitCapabilities> queryCapabilities() {
if (this.paper) { if (this.paper) {
if (this.minecraftVersion >= BRIGADIER_MINIMAL_VERSION) { if (this.minecraftVersion >= ASYNC_TAB_MINIMUM_VERSION) {
if (this.minecraftVersion >= PAPER_BRIGADIER_VERSION) { if (this.minecraftVersion >= PAPER_BRIGADIER_VERSION) {
return EnumSet.of(CloudBukkitCapabilities.NATIVE_BRIGADIER, return EnumSet.of(CloudBukkitCapabilities.NATIVE_BRIGADIER,
CloudBukkitCapabilities.ASYNCHRONOUS_COMPLETION, CloudBukkitCapabilities.ASYNCHRONOUS_COMPLETION,
CloudBukkitCapabilities.BRIGADIER); CloudBukkitCapabilities.BRIGADIER);
} else { } else if (this.minecraftVersion >= BRIGADIER_MINIMUM_VERSION) {
return EnumSet.of(CloudBukkitCapabilities.COMMODORE_BRIGADIER, return EnumSet.of(CloudBukkitCapabilities.COMMODORE_BRIGADIER,
CloudBukkitCapabilities.ASYNCHRONOUS_COMPLETION,
CloudBukkitCapabilities.BRIGADIER); CloudBukkitCapabilities.BRIGADIER);
} else {
return EnumSet.of(CloudBukkitCapabilities.ASYNCHRONOUS_COMPLETION);
} }
} else {
return EnumSet.of(CloudBukkitCapabilities.ASYNCHRONOUS_COMPLETION);
} }
} else { } else {
if (this.minecraftVersion >= BRIGADIER_MINIMAL_VERSION) { if (this.minecraftVersion >= BRIGADIER_MINIMUM_VERSION) {
return EnumSet.of(CloudBukkitCapabilities.COMMODORE_BRIGADIER, return EnumSet.of(CloudBukkitCapabilities.COMMODORE_BRIGADIER,
CloudBukkitCapabilities.BRIGADIER); CloudBukkitCapabilities.BRIGADIER);
} }
@ -234,7 +236,7 @@ public class BukkitCommandManager<C> extends CommandManager<C> {
* Attempt to register the Brigadier mapper, and return it. * Attempt to register the Brigadier mapper, and return it.
* *
* @throws BrigadierFailureException If Brigadier isn't * @throws BrigadierFailureException If Brigadier isn't
* supported by the platform * supported by the platform
*/ */
public void registerBrigadier() throws BrigadierFailureException { public void registerBrigadier() throws BrigadierFailureException {
this.checkBrigadierCompatibility(); this.checkBrigadierCompatibility();
@ -260,7 +262,9 @@ public class BukkitCommandManager<C> extends CommandManager<C> {
* Reasons to explain why Brigadier failed to initialize * Reasons to explain why Brigadier failed to initialize
*/ */
public enum BrigadierFailureReason { public enum BrigadierFailureReason {
COMMODORE_NOT_PRESENT, VERSION_TOO_LOW, PAPER_BRIGADIER_INITIALIZATION_FAILURE COMMODORE_NOT_PRESENT,
VERSION_TOO_LOW,
PAPER_BRIGADIER_INITIALIZATION_FAILURE
} }