diff options
author | Chris Xiong <chirs241097@gmail.com> | 2024-05-18 01:24:05 -0400 |
---|---|---|
committer | Chris Xiong <chirs241097@gmail.com> | 2024-05-18 01:24:05 -0400 |
commit | 04b4941e65693f8d6b55f924781d7dd7cd26b1d5 (patch) | |
tree | c78ff16924c246c3c0073c0f880a5582689c4a37 /src/main/java/org/chrisoft/trashyaddon/commands/argument/ColorCodeArgumentType.java | |
parent | 2b0c0f25b9e9ca690bb334479f798794fec6dd38 (diff) | |
download | meteor-trashy-addon-dev.tar.xz |
Diffstat (limited to 'src/main/java/org/chrisoft/trashyaddon/commands/argument/ColorCodeArgumentType.java')
-rw-r--r-- | src/main/java/org/chrisoft/trashyaddon/commands/argument/ColorCodeArgumentType.java | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/main/java/org/chrisoft/trashyaddon/commands/argument/ColorCodeArgumentType.java b/src/main/java/org/chrisoft/trashyaddon/commands/argument/ColorCodeArgumentType.java new file mode 100644 index 0000000..e56ade3 --- /dev/null +++ b/src/main/java/org/chrisoft/trashyaddon/commands/argument/ColorCodeArgumentType.java @@ -0,0 +1,79 @@ +package org.chrisoft.trashyaddon.commands.argument; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.arguments.ArgumentType; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.command.CommandSource; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.util.Arrays; +import java.util.Collection; +import java.util.concurrent.CompletableFuture; + +public class ColorCodeArgumentType implements ArgumentType<Color> { + private static final Collection<String> EXAMPLES = Arrays.asList("#000", "#FFFFFF", "#AA667788", "red"); + private static final SimpleCommandExceptionType BAD_COLOR_CODE = new SimpleCommandExceptionType(Text.literal("Invalid color code.")); + private ColorCodeArgumentType() {} + public static ColorCodeArgumentType colorCode() { return new ColorCodeArgumentType(); } + + @Override + public Color parse(StringReader reader) throws CommandSyntaxException { + if (reader.peek() == '#') { + reader.read(); + String v = reader.readString(); + switch (v.length()) { + case 3: + try { + int iv = Integer.parseInt(v, 16); + int r = iv & 0xF00 >> 8; + int g = iv & 0xF0 >> 4; + int b = iv & 0xF; + return new Color((r << 4) | r, (g << 4) | g, (b << 4) | b); + } catch (NumberFormatException __) { + throw BAD_COLOR_CODE.create(); + } + case 6: + try { + int iv = Integer.parseInt(v, 16); + int p = 0xFF000000 | iv; + return new Color(p); + } catch (NumberFormatException __) { + throw BAD_COLOR_CODE.create(); + } + case 8: + try { + int iv = Integer.parseUnsignedInt(v, 16); + return new Color(iv); + } catch (NumberFormatException __) { + throw BAD_COLOR_CODE.create(); + } + default: throw BAD_COLOR_CODE.create(); + } + } + String str = reader.readUnquotedString(); + Formatting lv = Formatting.byName(str); + if (lv != null && lv.isColor()) { + return new Color(lv.getColorValue()).a(255); + } + throw BAD_COLOR_CODE.create(); + } + + @Override + public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) { + StringReader stringReader = new StringReader(builder.getRemaining()); + if (stringReader.canRead(1) && stringReader.peek() == '#') + return builder.buildFuture(); + return CommandSource.suggestMatching(Formatting.getNames(true, false).stream().filter(x -> !x.equals("reset")), builder); + } + + @Override + public Collection<String> getExamples() { + return EXAMPLES; + } +} |