From 3cdf9736ec8d91a8e1cdf1c0f993294f69e7e7f0 Mon Sep 17 00:00:00 2001 From: Ben Woo <30431861+benwoo1110@users.noreply.github.com> Date: Thu, 7 Sep 2023 23:31:54 +0800 Subject: [PATCH] Refactor a better method of registering and using command flags --- .../commandtools/MultiverseCommand.java | 21 +++++++++++++++++++ .../flags/ParsedCommandFlags.java | 12 +++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/main/java/com/onarandombox/MultiverseCore/commandtools/MultiverseCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commandtools/MultiverseCommand.java index b198166b..8d8658f1 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/commandtools/MultiverseCommand.java +++ b/src/main/java/com/onarandombox/MultiverseCore/commandtools/MultiverseCommand.java @@ -1,9 +1,12 @@ package com.onarandombox.MultiverseCore.commandtools; import co.aikar.commands.BaseCommand; +import com.dumptruckman.minecraft.util.Logging; +import com.onarandombox.MultiverseCore.commandtools.flags.CommandFlag; import com.onarandombox.MultiverseCore.commandtools.flags.CommandFlagGroup; import com.onarandombox.MultiverseCore.commandtools.flags.CommandFlagsManager; import com.onarandombox.MultiverseCore.commandtools.flags.ParsedCommandFlags; +import jakarta.annotation.PostConstruct; import org.jetbrains.annotations.NotNull; import org.jvnet.hk2.annotations.Contract; @@ -12,21 +15,39 @@ public abstract class MultiverseCommand extends BaseCommand { protected final MVCommandManager commandManager; private String flagGroupName; + private CommandFlagGroup.Builder flagGroupBuilder; protected MultiverseCommand(@NotNull MVCommandManager commandManager) { this.commandManager = commandManager; } + @PostConstruct + private void postConstruct() { + if (flagGroupBuilder != null) { + registerFlagGroup(flagGroupBuilder.build()); + flagGroupBuilder = null; + } + } + protected CommandFlagsManager getFlagsManager() { return commandManager.getFlagsManager(); } + protected CommandFlag flag(CommandFlag flag) { + if (flagGroupBuilder == null) { + flagGroupBuilder = CommandFlagGroup.builder("mv" + getClass().getSimpleName().toLowerCase()); + } + flagGroupBuilder.add(flag); + return flag; + } + protected void registerFlagGroup(@NotNull CommandFlagGroup flagGroup) { if (flagGroupName != null) { throw new IllegalStateException("Flag group already registered! (name: " + flagGroupName + ")"); } getFlagsManager().registerFlagGroup(flagGroup); flagGroupName = flagGroup.getName(); + Logging.fine("Registered flag group: " + flagGroupName); } protected @NotNull ParsedCommandFlags parseFlags(@NotNull String[] flags) { diff --git a/src/main/java/com/onarandombox/MultiverseCore/commandtools/flags/ParsedCommandFlags.java b/src/main/java/com/onarandombox/MultiverseCore/commandtools/flags/ParsedCommandFlags.java index 4f522925..be45a877 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/commandtools/flags/ParsedCommandFlags.java +++ b/src/main/java/com/onarandombox/MultiverseCore/commandtools/flags/ParsedCommandFlags.java @@ -29,6 +29,10 @@ public class ParsedCommandFlags flagValues.put(key, value); } + public boolean hasFlag(@NotNull CommandFlag flag) { + return hasFlag(flag.getKey()); + } + /** * Check if a flag is present. * @@ -43,6 +47,10 @@ public class ParsedCommandFlags return flagValue(key, Object.class) != null; } + public @Nullable T flagValue(@NotNull CommandFlag flag, @NotNull Class type) { + return flagValue(flag.getKey(), type); + } + /** * Get the value of a flag. * @@ -54,6 +62,10 @@ public class ParsedCommandFlags return (T) value; } + public @Nullable T flagValue(@NotNull CommandFlag flag, @NotNull T defaultValue, @NotNull Class type) { + return flagValue(flag.getKey(), defaultValue, type); + } + public @NotNull T flagValue(@Nullable String key, @NotNull T defaultValue, @NotNull Class type) { T value = flagValue(key, type); return value != null ? value : defaultValue;