From 667486b95f0182e918e76ea308e085bcf72edfb2 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Mon, 17 Jun 2024 20:12:51 -0500 Subject: [PATCH] Mark Command.Builder#permission(String, TriState) as experimental. Improve javadoc and HelpCommand. --- .../java/org/geysermc/geyser/api/command/Command.java | 8 +++++--- .../event/lifecycle/GeyserRegisterPermissionsEvent.java | 5 ++++- .../java/org/geysermc/geyser/command/GeyserCommand.java | 2 ++ .../org/geysermc/geyser/command/defaults/HelpCommand.java | 3 ++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/command/Command.java b/api/src/main/java/org/geysermc/geyser/api/command/Command.java index 348c89f1e..29922ae1e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/command/Command.java +++ b/api/src/main/java/org/geysermc/geyser/api/command/Command.java @@ -167,14 +167,16 @@ public interface Command { /** * Sets the permission node and its default value. The usage of the default value is platform dependant * and may or may not be used. For example, it may be registered to an underlying server. -
- * Extensions may instead listen for {@link GeyserRegisterPermissionsEvent} to register permissions, which - * should be used if the same permission is required by multiple commands. + *
+ * Extensions may instead listen for {@link GeyserRegisterPermissionsEvent} to register permissions,
+ * especially if the same permission is required by multiple commands. Also see this event for TriState meanings.
*
* @param permission the permission node
* @param defaultValue the node's default value
* @return this builder
+ * @deprecated this method is experimental and may be removed in the future
*/
+ @Deprecated
Builder
+ * {@link TriState#TRUE} corresponds to all players having the permission by default.
+ * {@link TriState#NOT_SET} corresponds to only server operators having the permission by default (if such a concept exists on the platform).
+ * {@link TriState#FALSE} corresponds to no players having the permission by default.
*
* @param permission the permission node to register
* @param defaultValue the default value of the node
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 86a08be13..b5a052624 100644
--- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java
+++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java
@@ -27,6 +27,7 @@ package org.geysermc.geyser.command;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
+import org.geysermc.geyser.api.event.lifecycle.GeyserRegisterPermissionsEvent;
import org.geysermc.geyser.api.util.TriState;
import org.geysermc.geyser.text.GeyserLocale;
import org.incendo.cloud.Command;
@@ -62,6 +63,7 @@ public abstract class GeyserCommand implements org.geysermc.geyser.api.command.C
/**
* The default value of the permission node.
* A null value indicates that the permission node should not be registered whatsoever.
+ * See {@link GeyserRegisterPermissionsEvent#register(String, TriState)} for TriState meanings.
*/
@Nullable
private final TriState permissionDefault;
diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java
index af945a52c..9911863ab 100644
--- a/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java
+++ b/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java
@@ -25,6 +25,7 @@
package org.geysermc.geyser.command.defaults;
+import com.google.common.base.Predicates;
import org.geysermc.geyser.api.command.Command;
import org.geysermc.geyser.api.util.TriState;
import org.geysermc.geyser.command.GeyserCommand;
@@ -71,7 +72,7 @@ public class HelpCommand extends GeyserCommand {
this.commands.stream()
.distinct() // remove aliases
- .filter(cmd -> !cmd.isBedrockOnly() || bedrockPlayer) // remove bedrock only commands if not a bedrock player
+ .filter(bedrockPlayer ? Predicates.alwaysTrue() : cmd -> !cmd.isBedrockOnly()) // remove bedrock only commands if not a bedrock player
.filter(cmd -> source.hasPermission(cmd.permission()))
.sorted(Comparator.comparing(Command::name))
.forEachOrdered(cmd -> {