diff --git a/src/main/java/io/github/syst3ms/skriptparser/Parser.java b/src/main/java/io/github/syst3ms/skriptparser/Parser.java index fb82bd2e..a3c2be28 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/Parser.java +++ b/src/main/java/io/github/syst3ms/skriptparser/Parser.java @@ -6,7 +6,7 @@ import io.github.syst3ms.skriptparser.registration.DefaultRegistration; import io.github.syst3ms.skriptparser.registration.SkriptAddon; import io.github.syst3ms.skriptparser.registration.SkriptRegistration; -import io.github.syst3ms.skriptparser.util.ConsoleColors; +import io.github.syst3ms.skriptparser.util.color.ConsoleColors; import io.github.syst3ms.skriptparser.util.FileUtils; import java.io.IOException; @@ -153,7 +153,7 @@ public static void printLogs(List logs, Calendar time, boolean tipsEna for (LogEntry log : logs) { ConsoleColors color = ConsoleColors.WHITE; if (log.getType() == LogType.WARNING) { - color = ConsoleColors.YELLOW; + color = ConsoleColors.ORANGE; } else if (log.getType() == LogType.ERROR) { color = ConsoleColors.RED; } else if (log.getType() == LogType.INFO) { diff --git a/src/main/java/io/github/syst3ms/skriptparser/expressions/ExprAsk.java b/src/main/java/io/github/syst3ms/skriptparser/expressions/ExprAsk.java new file mode 100644 index 00000000..a0b80471 --- /dev/null +++ b/src/main/java/io/github/syst3ms/skriptparser/expressions/ExprAsk.java @@ -0,0 +1,53 @@ +package io.github.syst3ms.skriptparser.expressions; + +import io.github.syst3ms.skriptparser.Parser; +import io.github.syst3ms.skriptparser.lang.Expression; +import io.github.syst3ms.skriptparser.lang.TriggerContext; +import io.github.syst3ms.skriptparser.lang.base.TaggedExpression; +import io.github.syst3ms.skriptparser.parsing.ParseContext; + +import java.util.Scanner; + +/** + * Ask for a specific input in the system console and wait for the answer of the user. + * This will therefore return what the user entered into a string. + * + * @name Ask + * @type EXPRESSION + * @pattern ask [for] %string% + * @since ALPHA + * @author ItsTheSky + */ +public class ExprAsk implements Expression { + + static { + Parser.getMainRegistration().addExpression( + ExprAsk.class, + String.class, + true, + "ask [for] %string%" + ); + } + + private Expression message; + + @SuppressWarnings("unchecked") + @Override + public boolean init(Expression[] expressions, int matchedPattern, ParseContext context) { + message = (Expression) expressions[0]; + return true; + } + + @Override + public String[] getValues(TriggerContext ctx) { + Scanner scanner = new Scanner(System.in); + for (String line : TaggedExpression.apply(message, ctx, "console")) + System.out.println(line); + return new String[]{scanner.nextLine()}; + } + + @Override + public String toString(TriggerContext ctx, boolean debug) { + return "ask for " + message.toString(ctx, debug); + } +} diff --git a/src/main/java/io/github/syst3ms/skriptparser/tags/TagColor.java b/src/main/java/io/github/syst3ms/skriptparser/tags/TagColor.java new file mode 100644 index 00000000..48e901de --- /dev/null +++ b/src/main/java/io/github/syst3ms/skriptparser/tags/TagColor.java @@ -0,0 +1,43 @@ +package io.github.syst3ms.skriptparser.tags; + +import io.github.syst3ms.skriptparser.Parser; +import io.github.syst3ms.skriptparser.registration.tags.ContinuousTag; +import io.github.syst3ms.skriptparser.util.color.ConsoleColors; + +import java.util.Locale; +import java.util.Optional; + +public class TagColor implements ContinuousTag { + + static { + Parser.getMainRegistration().addTag(TagColor.class); + } + + private ConsoleColors color; + + @Override + public boolean init(String key, String[] parameters) { + final Optional optional; + if (key.equalsIgnoreCase("color") && parameters.length != 0) { + optional = ConsoleColors.search(parameters[0]); + } else { + optional = ConsoleColors.search(key); + } + + if (optional.isEmpty()) + return false; + + color = optional.get(); + return color != ConsoleColors.RESET; + } + + @Override + public String getValue() { + return color.toString(); + } + + @Override + public String toString(boolean debug) { + return ""; + } +} diff --git a/src/main/java/io/github/syst3ms/skriptparser/tags/TagReset.java b/src/main/java/io/github/syst3ms/skriptparser/tags/TagReset.java index 31154fe1..eae8ed49 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/tags/TagReset.java +++ b/src/main/java/io/github/syst3ms/skriptparser/tags/TagReset.java @@ -2,6 +2,7 @@ import io.github.syst3ms.skriptparser.Parser; import io.github.syst3ms.skriptparser.registration.tags.Tag; +import io.github.syst3ms.skriptparser.util.color.ConsoleColors; /** * A tag that resets all currently ongoing tags. @@ -24,7 +25,7 @@ public boolean init(String key, String[] parameters) { } public String getValue(String affected) { - return affected; + return ConsoleColors.RESET + affected; } public String toString(boolean debug) { diff --git a/src/main/java/io/github/syst3ms/skriptparser/util/ConsoleColors.java b/src/main/java/io/github/syst3ms/skriptparser/util/ConsoleColors.java deleted file mode 100644 index d8b4d9a8..00000000 --- a/src/main/java/io/github/syst3ms/skriptparser/util/ConsoleColors.java +++ /dev/null @@ -1,87 +0,0 @@ -package io.github.syst3ms.skriptparser.util; - -public enum ConsoleColors { - // Reset - RESET("\033[0m"), // Text Reset - - // Regular Colors - BLACK("\033[0;30m"), // BLACK - RED("\033[0;31m"), // RED - GREEN("\033[0;32m"), // GREEN - YELLOW("\033[0;33m"), // YELLOW - BLUE("\033[0;34m"), // BLUE - PURPLE("\033[0;35m"), // PURPLE - CYAN("\033[0;36m"), // CYAN - WHITE("\033[0;37m"), // WHITE - - // Bold - BLACK_BOLD("\033[1;30m"), // BLACK - RED_BOLD("\033[1;31m"), // RED - GREEN_BOLD("\033[1;32m"), // GREEN - YELLOW_BOLD("\033[1;33m"), // YELLOW - BLUE_BOLD("\033[1;34m"), // BLUE - PURPLE_BOLD("\033[1;35m"), // PURPLE - CYAN_BOLD("\033[1;36m"), // CYAN - WHITE_BOLD("\033[1;37m"), // WHITE - - // Underline - BLACK_UNDERLINED("\033[4;30m"), // BLACK - RED_UNDERLINED("\033[4;31m"), // RED - GREEN_UNDERLINED("\033[4;32m"), // GREEN - YELLOW_UNDERLINED("\033[4;33m"), // YELLOW - BLUE_UNDERLINED("\033[4;34m"), // BLUE - PURPLE_UNDERLINED("\033[4;35m"), // PURPLE - CYAN_UNDERLINED("\033[4;36m"), // CYAN - WHITE_UNDERLINED("\033[4;37m"), // WHITE - - // Background - BLACK_BACKGROUND("\033[40m"), // BLACK - RED_BACKGROUND("\033[41m"), // RED - GREEN_BACKGROUND("\033[42m"), // GREEN - YELLOW_BACKGROUND("\033[43m"), // YELLOW - BLUE_BACKGROUND("\033[44m"), // BLUE - PURPLE_BACKGROUND("\033[45m"), // PURPLE - CYAN_BACKGROUND("\033[46m"), // CYAN - WHITE_BACKGROUND("\033[47m"), // WHITE - - // High Intensity - BLACK_BRIGHT("\033[0;90m"), // BLACK - RED_BRIGHT("\033[0;91m"), // RED - GREEN_BRIGHT("\033[0;92m"), // GREEN - YELLOW_BRIGHT("\033[0;93m"), // YELLOW - BLUE_BRIGHT("\033[0;94m"), // BLUE - PURPLE_BRIGHT("\033[0;95m"), // PURPLE - CYAN_BRIGHT("\033[0;96m"), // CYAN - WHITE_BRIGHT("\033[0;97m"), // WHITE - - // Bold High Intensity - BLACK_BOLD_BRIGHT("\033[1;90m"), // BLACK - RED_BOLD_BRIGHT("\033[1;91m"), // RED - GREEN_BOLD_BRIGHT("\033[1;92m"), // GREEN - YELLOW_BOLD_BRIGHT("\033[1;93m"), // YELLOW - BLUE_BOLD_BRIGHT("\033[1;94m"), // BLUE - PURPLE_BOLD_BRIGHT("\033[1;95m"), // PURPLE - CYAN_BOLD_BRIGHT("\033[1;96m"), // CYAN - WHITE_BOLD_BRIGHT("\033[1;97m"), // WHITE - - // High Intensity backgrounds - BLACK_BACKGROUND_BRIGHT("\033[0;100m"), // BLACK - RED_BACKGROUND_BRIGHT("\033[0;101m"), // RED - GREEN_BACKGROUND_BRIGHT("\033[0;102m"), // GREEN - YELLOW_BACKGROUND_BRIGHT("\033[0;103m"), // YELLOW - BLUE_BACKGROUND_BRIGHT("\033[0;104m"), // BLUE - PURPLE_BACKGROUND_BRIGHT("\033[0;105m"), // PURPLE - CYAN_BACKGROUND_BRIGHT("\033[0;106m"), // CYAN - WHITE_BACKGROUND_BRIGHT("\033[0;107m"); // WHITE - - private final String color; - - ConsoleColors(String color) { - this.color = color; - } - - public String toString() { - return this.color; - } - -} \ No newline at end of file diff --git a/src/main/java/io/github/syst3ms/skriptparser/util/color/ConsoleColors.java b/src/main/java/io/github/syst3ms/skriptparser/util/color/ConsoleColors.java new file mode 100644 index 00000000..6e553977 --- /dev/null +++ b/src/main/java/io/github/syst3ms/skriptparser/util/color/ConsoleColors.java @@ -0,0 +1,112 @@ +package io.github.syst3ms.skriptparser.util.color; + +import java.util.Optional; +import java.util.stream.Stream; + +public enum ConsoleColors { + + // Reset + RESET("0", true), + + // Normal Colors + BLACK("30", false), + RED("31", false), + GREEN("32", false, "dark_green"), + ORANGE("33", false, "orange", "amber"), + BLUE("34", false, "dark_blue"), + PURPLE("35", false, "dark_pink"), + CYAN("36", false, "dark_aqua"), + WHITE("37", false, "dark_gray"), + + // Bright Colors + BLACK_BRIGHT("90", false, "gray", "grey"), + RED_BRIGHT("91", false, "pink"), + GREEN_BRIGHT("92", false, "lime", "light_green"), + ORANGE_BRIGHT("93", false, "yellow"), + BLUE_BRIGHT("94", false, "light_blue"), + PURPLE_BRIGHT("95", false, "light_purple"), + CYAN_BRIGHT("96", false, "light_aqua", "aqua"), + WHITE_BRIGHT("97", false), + + // Colors background + BLACK_BACKGROUND(BLACK, "40"), + RED_BACKGROUND(RED, "41"), + GREEN_BACKGROUND(GREEN, "42"), + ORANGE_BACKGROUND(ORANGE, "43"), + BLUE_BACKGROUND(BLUE, "44"), + PURPLE_BACKGROUND(PURPLE, "45"), + CYAN_BACKGROUND(CYAN, "46"), + WHITE_BACKGROUND(WHITE, "47"), + + // Styles + BOLD("1", true, "b"), + ITALIC("3", true, "o", "it", "i"), + UNDERLINE("4", true, "n", "u"), + STRIKETHROUGH("9", true, "m", "strike", "s"), + ; + + private static final String ANSI_DELIMITER = "\033["; + + private final String code; + private final boolean style; + private final String[] aliases; + + /** + * Used for backgrounds colors only. + * It will generate values according to it. + * @param color + */ + ConsoleColors(ConsoleColors color, String code) { + this.code = code; + this.style = false; + this.aliases = Stream.of(color.getAliases()) + .map(alias -> alias + "_background") + .toArray(String[]::new); + } + + ConsoleColors(String code, boolean style, String... aliases) { + this.code = code; + this.style = style; + this.aliases = aliases; + } + + public static Optional search(String input) { + for (ConsoleColors color : values()) { + if (color.match(input)) + return Optional.of(color); + } + return Optional.empty(); + } + + public String format() { + return ANSI_DELIMITER + code + "m"; + } + + public boolean match(String other) { + if (other.replace(" ", "_").equalsIgnoreCase(name())) + return true; + // Checking for aliases + for (String alias : aliases) { + if (other.replace(" ", "_").equalsIgnoreCase(alias)) + return true; + } + + return false; + } + + public String toString() { + return format(); + } + + public String[] getAliases() { + return aliases; + } + + public String getCode() { + return code; + } + + public boolean isStyle() { + return style; + } +} \ No newline at end of file