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 permission(@NonNull String permission, @NonNull TriState defaultValue); /** diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterPermissionsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterPermissionsEvent.java index 42a5dfc51..4f06c4e5f 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterPermissionsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterPermissionsEvent.java @@ -39,7 +39,10 @@ import org.geysermc.geyser.api.util.TriState; public interface GeyserRegisterPermissionsEvent extends Event { /** - * Registers a permission node and its default value with the firer. + * Registers a permission node and its default value with the firer.

+ * {@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 -> {