From 6ba51fa573275ba820f109512ea136a5db4352fc Mon Sep 17 00:00:00 2001 From: Ben Woo <30431861+benwoo1110@users.noreply.github.com> Date: Wed, 20 Sep 2023 12:25:03 +0800 Subject: [PATCH] Implement lowercased enum completion and fix some checkstyles --- .../core/commands/CreateCommand.java | 2 +- .../core/commands/ImportCommand.java | 2 +- .../commandtools/MVCommandCompletions.java | 28 +++++++++++++++---- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/CreateCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/CreateCommand.java index 435aa9c6..e05f6125 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/CreateCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/CreateCommand.java @@ -71,7 +71,7 @@ class CreateCommand extends MultiverseCommand { @Subcommand("create") @CommandPermission("multiverse.core.create") - @CommandCompletion("@empty @flags:groupName=mvcreatecommand") + @CommandCompletion("@empty @environments @flags:groupName=mvcreatecommand") @Syntax(" --seed [seed] --generator [generator[:id]] --world-type [worldtype] --adjust-spawn --no-structures") @Description("{@@mv-core.create.description}") void onCreateCommand( diff --git a/src/main/java/org/mvplugins/multiverse/core/commands/ImportCommand.java b/src/main/java/org/mvplugins/multiverse/core/commands/ImportCommand.java index 63c91751..859de2dd 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commands/ImportCommand.java +++ b/src/main/java/org/mvplugins/multiverse/core/commands/ImportCommand.java @@ -54,7 +54,7 @@ class ImportCommand extends MultiverseCommand { @Subcommand("import") @CommandPermission("multiverse.core.import") - @CommandCompletion("@mvworlds:scope=potential @flags:groupName=mvimportcommand") + @CommandCompletion("@mvworlds:scope=potential @environments @flags:groupName=mvimportcommand") @Syntax(" --generator [generator[:id]] --adjust-spawn") @Description("{@@mv-core.import.description") void onImportCommand( diff --git a/src/main/java/org/mvplugins/multiverse/core/commandtools/MVCommandCompletions.java b/src/main/java/org/mvplugins/multiverse/core/commandtools/MVCommandCompletions.java index 2e605c3f..b1f126f9 100644 --- a/src/main/java/org/mvplugins/multiverse/core/commandtools/MVCommandCompletions.java +++ b/src/main/java/org/mvplugins/multiverse/core/commandtools/MVCommandCompletions.java @@ -3,6 +3,7 @@ package org.mvplugins.multiverse.core.commandtools; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.EnumSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -18,7 +19,10 @@ import com.dumptruckman.minecraft.util.Logging; import com.google.common.collect.Sets; import io.vavr.control.Try; import jakarta.inject.Inject; +import org.bukkit.Difficulty; +import org.bukkit.GameMode; import org.bukkit.GameRule; +import org.bukkit.World; import org.jetbrains.annotations.NotNull; import org.jvnet.hk2.annotations.Service; @@ -30,19 +34,18 @@ import org.mvplugins.multiverse.core.world.MultiverseWorld; import org.mvplugins.multiverse.core.world.WorldManager; @Service -public class MVCommandCompletions extends PaperCommandCompletions { +class MVCommandCompletions extends PaperCommandCompletions { - protected final MVCommandManager commandManager; + private final MVCommandManager commandManager; private final WorldManager worldManager; private final DestinationsProvider destinationsProvider; @Inject - public MVCommandCompletions( + MVCommandCompletions( @NotNull MVCommandManager mvCommandManager, @NotNull WorldManager worldManager, @NotNull DestinationsProvider destinationsProvider, - @NotNull MVCoreConfig config - ) { + @NotNull MVCoreConfig config) { super(mvCommandManager); this.commandManager = mvCommandManager; this.worldManager = worldManager; @@ -50,13 +53,19 @@ public class MVCommandCompletions extends PaperCommandCompletions { registerAsyncCompletion("commands", this::suggestCommands); registerAsyncCompletion("destinations", this::suggestDestinations); + registerStaticCompletion("difficulties", suggestEnums(Difficulty.class)); + registerStaticCompletion("environments", suggestEnums(World.Environment.class)); registerAsyncCompletion("flags", this::suggestFlags); + registerStaticCompletion("gamemodes", suggestEnums(GameMode.class)); registerStaticCompletion("gamerules", this::suggestGamerules); registerStaticCompletion("mvconfigs", config.getNodes().getNames()); registerAsyncCompletion("mvworlds", this::suggestMVWorlds); setDefaultCompletion("destinations", ParsedDestination.class); + setDefaultCompletion("difficulties", Difficulty.class); + setDefaultCompletion("environments", World.Environment.class); setDefaultCompletion("flags", String[].class); + setDefaultCompletion("gamemodes", GameMode.class); setDefaultCompletion("gamerules", GameRule.class); setDefaultCompletion("mvworlds", LoadedMultiverseWorld.class); } @@ -94,7 +103,7 @@ public class MVCommandCompletions extends PaperCommandCompletions { } return this.destinationsProvider - .suggestDestinations((BukkitCommandIssuer)context.getIssuer(), context.getInput()); + .suggestDestinations((BukkitCommandIssuer) context.getIssuer(), context.getInput()); } private Collection suggestFlags(@NotNull BukkitCommandCompletionContext context) { @@ -152,4 +161,11 @@ public class MVCommandCompletions extends PaperCommandCompletions { Logging.severe("Invalid MVWorld scope: " + scope); return Collections.emptyList(); } + + private > Collection suggestEnums(Class enumClass) { + return EnumSet.allOf(enumClass).stream() + .map(Enum::name) + .map(String::toLowerCase) + .toList(); + } }