From d656f1cb9b6ec204eff9b4b61f6e0850f43b97f4 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Fri, 12 Dec 2025 17:40:37 +0800 Subject: [PATCH] fix world parser --- .../command/feature/GetDateCommand.java | 21 ++++++++++++++++--- .../command/feature/GetSeasonCommand.java | 20 ++++++++++++++++-- .../command/feature/SetDateCommand.java | 19 +++++++++++++++-- .../command/feature/SetSeasonCommand.java | 16 ++++++++++++-- 4 files changed, 67 insertions(+), 9 deletions(-) diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/GetDateCommand.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/GetDateCommand.java index db163c5..d7e6b49 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/GetDateCommand.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/GetDateCommand.java @@ -23,11 +23,19 @@ import net.momirealms.customcrops.api.integration.SeasonProvider; import net.momirealms.customcrops.bukkit.command.BukkitCommandFeature; import net.momirealms.customcrops.common.command.CustomCropsCommandManager; import net.momirealms.customcrops.common.locale.MessageConstants; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.checkerframework.checker.nullness.qual.NonNull; import org.incendo.cloud.Command; import org.incendo.cloud.CommandManager; -import org.incendo.cloud.bukkit.parser.WorldParser; +import org.incendo.cloud.context.CommandContext; +import org.incendo.cloud.context.CommandInput; +import org.incendo.cloud.parser.standard.StringParser; +import org.incendo.cloud.suggestion.Suggestion; +import org.incendo.cloud.suggestion.SuggestionProvider; + +import java.util.concurrent.CompletableFuture; public class GetDateCommand extends BukkitCommandFeature { @@ -38,9 +46,16 @@ public class GetDateCommand extends BukkitCommandFeature { @Override public Command.Builder assembleCommand(CommandManager manager, Command.Builder builder) { return builder - .required("world", WorldParser.worldParser()) + .required("world", StringParser.stringComponent(StringParser.StringMode.GREEDY).suggestionProvider(new SuggestionProvider<>() { + @Override + public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { + return CompletableFuture.completedFuture(Bukkit.getWorlds().stream().map(World::getName).map(Suggestion::suggestion).toList()); + } + })) .handler(context -> { - World world = context.get("world"); + String worldName = context.get("world"); + World world = Bukkit.getWorld(worldName); + if (world == null) return; SeasonProvider provider = BukkitCustomCropsPlugin.getInstance().getWorldManager().seasonProvider(); if (provider.identifier().equals("CustomCrops")) { int date = BukkitCustomCropsPlugin.getInstance().getWorldManager().getDate(world); diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/GetSeasonCommand.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/GetSeasonCommand.java index ff71e8f..cf93c2f 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/GetSeasonCommand.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/GetSeasonCommand.java @@ -23,11 +23,20 @@ import net.momirealms.customcrops.api.core.world.Season; import net.momirealms.customcrops.bukkit.command.BukkitCommandFeature; import net.momirealms.customcrops.common.command.CustomCropsCommandManager; import net.momirealms.customcrops.common.locale.MessageConstants; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.checkerframework.checker.nullness.qual.NonNull; import org.incendo.cloud.Command; import org.incendo.cloud.CommandManager; import org.incendo.cloud.bukkit.parser.WorldParser; +import org.incendo.cloud.context.CommandContext; +import org.incendo.cloud.context.CommandInput; +import org.incendo.cloud.parser.standard.StringParser; +import org.incendo.cloud.suggestion.Suggestion; +import org.incendo.cloud.suggestion.SuggestionProvider; + +import java.util.concurrent.CompletableFuture; public class GetSeasonCommand extends BukkitCommandFeature { @@ -38,9 +47,16 @@ public class GetSeasonCommand extends BukkitCommandFeature { @Override public Command.Builder assembleCommand(CommandManager manager, Command.Builder builder) { return builder - .required("world", WorldParser.worldParser()) + .required("world", StringParser.stringComponent(StringParser.StringMode.GREEDY).suggestionProvider(new SuggestionProvider<>() { + @Override + public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { + return CompletableFuture.completedFuture(Bukkit.getWorlds().stream().map(World::getName).map(Suggestion::suggestion).toList()); + } + })) .handler(context -> { - World world = context.get("world"); + String worldName = context.get("world"); + World world = Bukkit.getWorld(worldName); + if (world == null) return; Season season = BukkitCustomCropsPlugin.getInstance().getWorldManager().getSeason(world); if (season != Season.DISABLE) { handleFeedback(context, MessageConstants.COMMAND_GET_SEASON_SUCCESS, Component.text(world.getName()), Component.text(season.translation())); diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/SetDateCommand.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/SetDateCommand.java index 3a9207e..46f9594 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/SetDateCommand.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/SetDateCommand.java @@ -25,14 +25,22 @@ import net.momirealms.customcrops.api.integration.SeasonProvider; import net.momirealms.customcrops.bukkit.command.BukkitCommandFeature; import net.momirealms.customcrops.common.command.CustomCropsCommandManager; import net.momirealms.customcrops.common.locale.MessageConstants; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.checkerframework.checker.nullness.qual.NonNull; import org.incendo.cloud.Command; import org.incendo.cloud.CommandManager; import org.incendo.cloud.bukkit.parser.WorldParser; +import org.incendo.cloud.context.CommandContext; +import org.incendo.cloud.context.CommandInput; import org.incendo.cloud.parser.standard.IntegerParser; +import org.incendo.cloud.parser.standard.StringParser; +import org.incendo.cloud.suggestion.Suggestion; +import org.incendo.cloud.suggestion.SuggestionProvider; import java.util.Optional; +import java.util.concurrent.CompletableFuture; public class SetDateCommand extends BukkitCommandFeature { @@ -43,10 +51,17 @@ public class SetDateCommand extends BukkitCommandFeature { @Override public Command.Builder assembleCommand(CommandManager manager, Command.Builder builder) { return builder - .required("world", WorldParser.worldParser()) + .required("world", StringParser.stringComponent(StringParser.StringMode.GREEDY).suggestionProvider(new SuggestionProvider<>() { + @Override + public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { + return CompletableFuture.completedFuture(Bukkit.getWorlds().stream().map(World::getName).map(Suggestion::suggestion).toList()); + } + })) .required("date", IntegerParser.integerParser()) .handler(context -> { - World world = context.get("world"); + String worldName = context.get("world"); + World world = Bukkit.getWorld(worldName); + if (world == null) return; SeasonProvider provider = BukkitCustomCropsPlugin.getInstance().getWorldManager().seasonProvider(); if (provider.identifier().equals("CustomCrops")) { Optional> optionalWorld = BukkitCustomCropsPlugin.getInstance().getWorldManager().getWorld(world); diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/SetSeasonCommand.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/SetSeasonCommand.java index df337be..b3a0878 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/SetSeasonCommand.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/command/feature/SetSeasonCommand.java @@ -26,17 +26,22 @@ import net.momirealms.customcrops.api.integration.SeasonProvider; import net.momirealms.customcrops.bukkit.command.BukkitCommandFeature; import net.momirealms.customcrops.common.command.CustomCropsCommandManager; import net.momirealms.customcrops.common.locale.MessageConstants; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.checkerframework.checker.nullness.qual.NonNull; import org.incendo.cloud.Command; import org.incendo.cloud.CommandManager; import org.incendo.cloud.bukkit.parser.WorldParser; +import org.incendo.cloud.context.CommandContext; +import org.incendo.cloud.context.CommandInput; import org.incendo.cloud.parser.standard.StringParser; import org.incendo.cloud.suggestion.Suggestion; import org.incendo.cloud.suggestion.SuggestionProvider; import java.util.Locale; import java.util.Optional; +import java.util.concurrent.CompletableFuture; public class SetSeasonCommand extends BukkitCommandFeature { @@ -47,12 +52,19 @@ public class SetSeasonCommand extends BukkitCommandFeature { @Override public Command.Builder assembleCommand(CommandManager manager, Command.Builder builder) { return builder - .required("world", WorldParser.worldParser()) + .required("world", StringParser.stringComponent(StringParser.StringMode.GREEDY).suggestionProvider(new SuggestionProvider<>() { + @Override + public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { + return CompletableFuture.completedFuture(Bukkit.getWorlds().stream().map(World::getName).map(Suggestion::suggestion).toList()); + } + })) .required("season", StringParser.stringComponent().suggestionProvider(SuggestionProvider.suggesting( Suggestion.suggestion("spring"), Suggestion.suggestion("summer"),Suggestion.suggestion("autumn"),Suggestion.suggestion("winter") ))) .handler(context -> { - World world = context.get("world"); + String worldName = context.get("world"); + World world = Bukkit.getWorld(worldName); + if (world == null) return; SeasonProvider provider = BukkitCustomCropsPlugin.getInstance().getWorldManager().seasonProvider(); if (provider.identifier().equals("CustomCrops")) {