From 495e33e47ee5bd004c06944795032c39ab4c7fa6 Mon Sep 17 00:00:00 2001 From: Redrield Date: Tue, 18 Jul 2017 21:42:08 -0400 Subject: [PATCH] Added contexts for TextColor and TextStyle.Base (#61) --- .../aikar/commands/SpongeCommandContexts.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/sponge/src/main/java/co/aikar/commands/SpongeCommandContexts.java b/sponge/src/main/java/co/aikar/commands/SpongeCommandContexts.java index 021bd644..4ac52920 100644 --- a/sponge/src/main/java/co/aikar/commands/SpongeCommandContexts.java +++ b/sponge/src/main/java/co/aikar/commands/SpongeCommandContexts.java @@ -30,11 +30,17 @@ import org.jetbrains.annotations.Nullable; import org.spongepowered.api.Sponge; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.entity.living.player.Player; +import org.spongepowered.api.text.format.TextColor; +import org.spongepowered.api.text.format.TextColors; +import org.spongepowered.api.text.format.TextStyle; import org.spongepowered.api.world.World; +import javax.swing.plaf.ActionMapUIResource; import java.util.HashSet; import java.util.Set; import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; @SuppressWarnings("WeakerAccess") public class SpongeCommandContexts extends CommandContexts { @@ -44,6 +50,42 @@ public class SpongeCommandContexts extends CommandContexts new CommandResultSupplier()); registerContext(OnlinePlayer.class, c -> getOnlinePlayer(c.getIssuer(), c.popFirstArg(), c.hasAnnotation(Optional.class))); + registerContext(TextColor.class, c -> { + String first = c.popFirstArg(); + Stream colours = Sponge.getRegistry().getAllOf(TextColor.class).stream(); + String filter = c.getFlagValue("filter", (String)null); + if(filter != null) { + filter = ACFUtil.simplifyString(filter); + String finalFilter = filter; + colours = colours.filter(colour -> finalFilter.equals(ACFUtil.simplifyString(colour.getName()))); + } + Stream finalColours = colours; + TextColor match = Sponge.getRegistry().getType(TextColor.class, ACFUtil.simplifyString(first)).orElseThrow(() -> { + String valid = finalColours + .map(colour -> "" + ACFUtil.simplifyString(colour.getName()) + "") + .collect(Collectors.joining(", ")); + return new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_ONE_OF, valid); + }); + return match; + }); + registerContext(TextStyle.Base.class, c -> { + String first = c.popFirstArg(); + Stream styles = Sponge.getRegistry().getAllOf(TextStyle.Base.class).stream(); + String filter = c.getFlagValue("filter", (String)null); + if(filter != null) { + filter = ACFUtil.simplifyString(filter); + String finalFilter = filter; + styles = styles.filter(style -> finalFilter.equals(ACFUtil.simplifyString(style.getName()))); + } + Stream finalStyles = styles; + TextStyle.Base match = Sponge.getRegistry().getType(TextStyle.Base.class, ACFUtil.simplifyString(first)).orElseThrow(() -> { + String valid = finalStyles + .map(style -> "" + ACFUtil.simplifyString(style.getName()) + "") + .collect(Collectors.joining(", ")); + return new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_ONE_OF, valid); + }); + return match; + }); registerIssuerAwareContext(CommandSource.class, SpongeCommandExecutionContext::getSource); registerIssuerAwareContext(Player.class, (c) -> {