From b2a22505f9111d39b2352ba987517f9032019d0e Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Sat, 6 Jul 2024 20:27:40 +0200 Subject: [PATCH] Handle blank permissions properly --- .../platform/bungeecord/command/BungeeCommandSource.java | 3 ++- .../platform/neoforge/GeyserNeoForgeCommandRegistry.java | 3 ++- .../geyser/platform/spigot/command/SpigotCommandSource.java | 1 - .../platform/velocity/command/VelocityCommandSource.java | 3 ++- .../java/org/geysermc/geyser/command/CommandRegistry.java | 3 ++- .../java/org/geysermc/geyser/command/GeyserCommand.java | 1 + .../command/standalone/StandaloneCloudCommandManager.java | 6 +++++- 7 files changed, 14 insertions(+), 6 deletions(-) diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java index db87a4fe6..8685c8cfe 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java @@ -97,7 +97,8 @@ public class BungeeCommandSource implements GeyserCommandSource { @Override public boolean hasPermission(String permission) { - return handle.hasPermission(permission); + // Handle blank permissions ourselves, as cloud only handles empty ones + return permission.isBlank() || handle.hasPermission(permission); } @Override diff --git a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeCommandRegistry.java b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeCommandRegistry.java index a8854d5d9..e3c0872d1 100644 --- a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeCommandRegistry.java +++ b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeCommandRegistry.java @@ -93,7 +93,8 @@ public class GeyserNeoForgeCommandRegistry extends CommandRegistry { // We can't realistically ensure that every permission is registered (calls by API users), so we catch this. // This works for our calls, but not for cloud's internal usage. For that case, see above. try { - return super.hasPermission(source, permission); + // Handle blank permissions ourselves, as cloud only handles empty ones + return permission.isBlank() || super.hasPermission(source, permission); } catch (PermissionNotRegisteredException e) { return false; } diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java index e92ed7f6c..247f0f0c8 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java @@ -36,7 +36,6 @@ import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.platform.spigot.PaperAdventure; import org.geysermc.geyser.text.GeyserLocale; -import java.util.Optional; import java.util.UUID; public class SpigotCommandSource implements GeyserCommandSource { diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java index 66e714417..feab4358b 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java @@ -93,7 +93,8 @@ public class VelocityCommandSource implements GeyserCommandSource { @Override public boolean hasPermission(String permission) { - return handle.hasPermission(permission); + // Handle blank permissions ourselves, as cloud only handles empty ones + return permission.isBlank() || handle.hasPermission(permission); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java index 3cd62c9ed..f07092afd 100644 --- a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java @@ -266,7 +266,8 @@ public class CommandRegistry implements EventRegistrar { } public boolean hasPermission(GeyserCommandSource source, String permission) { - return cloud.hasPermission(source, permission); + // Handle blank permissions ourselves, as cloud only handles empty ones + return permission.isBlank() || cloud.hasPermission(source, permission); } /** diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java index b5a052624..93bb6e38b 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java @@ -91,6 +91,7 @@ public abstract class GeyserCommand implements org.geysermc.geyser.api.command.C throw new IllegalArgumentException("Command cannot be null or blank!"); } if (permission.isBlank()) { + permission = ""; // Cloud treats empty permissions as available to everyone, but not blank permissions. permissionDefault = null; } diff --git a/core/src/main/java/org/geysermc/geyser/command/standalone/StandaloneCloudCommandManager.java b/core/src/main/java/org/geysermc/geyser/command/standalone/StandaloneCloudCommandManager.java index 39b320482..375319575 100644 --- a/core/src/main/java/org/geysermc/geyser/command/standalone/StandaloneCloudCommandManager.java +++ b/core/src/main/java/org/geysermc/geyser/command/standalone/StandaloneCloudCommandManager.java @@ -103,11 +103,15 @@ public class StandaloneCloudCommandManager extends CommandManager