From 04b4941e65693f8d6b55f924781d7dd7cd26b1d5 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sat, 18 May 2024 01:24:05 -0400 Subject: commands: EntityHighlight, improved MapLocate. --- .../commands/argument/ColorCodeArgumentType.java | 79 ++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/main/java/org/chrisoft/trashyaddon/commands/argument/ColorCodeArgumentType.java (limited to 'src/main/java/org/chrisoft/trashyaddon/commands/argument/ColorCodeArgumentType.java') 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 { + private static final Collection 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 CompletableFuture listSuggestions(CommandContext 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 getExamples() { + return EXAMPLES; + } +} -- cgit v1.2.3