aboutsummaryrefslogblamecommitdiff
path: root/src/main/java/org/chrisoft/trashyaddon/commands/MapLocateCommand.java
blob: a96b52b8110db4d1691024a4ecdc79eab2c0c61d (plain) (tree)
1
2
3
4
5
6
7
8
9

                                          
                                         

                                                           
                                                              
                                                       
                                                               
                                           

                                            




                                                                        
 
                           

                               


                                                          





                                                                                                   


                                                                     






















                                                                                                                                                                               



                                                                      








                                                                                      
                                  
             

     
package org.chrisoft.trashyaddon.commands;

import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import meteordevelopment.meteorclient.commands.Command;
import meteordevelopment.meteorclient.utils.render.color.Color;
import net.minecraft.command.CommandSource;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.Entity;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import org.chrisoft.trashyaddon.commands.argument.CEntityArgumentType;
import org.chrisoft.trashyaddon.commands.argument.ColorCodeArgumentType;

import java.util.Formatter;
import java.util.List;
import java.util.stream.Stream;

import static com.mojang.brigadier.Command.SINGLE_SUCCESS;

/*
Usage:
ml <id> [color]  :  highlight item frames with map #<id> using [color] (defaults to bright magenta)
Note: Use .eh clear to remove highlight from all item frames.
 */

public class MapLocateCommand extends Command {
    private final MinecraftClient mc = MinecraftClient.getInstance();
    public MapLocateCommand() {
        super("ml", "Locate item frames with a specific map.");
    }

    private void exec(int id, Color color) {
        try {
            CEntityArgumentType dummyArgIF = CEntityArgumentType.entities();
            CEntitySelector esIF = dummyArgIF.parse(new StringReader(new Formatter().format("@e[type=minecraft:item_frame,nbt={Item:{tag:{map:%d}}}]", id).toString()));
            CEntityArgumentType dummyArgGIF = CEntityArgumentType.entities();
            CEntitySelector esGIF = dummyArgGIF.parse(new StringReader(new Formatter().format("@e[type=minecraft:glow_item_frame,nbt={Item:{tag:{map:%d}}}]", id).toString()));
            List<? extends Entity> l1 = esIF.getClientSideEntityMatches(mc.world, mc.player.getPos());
            List<? extends Entity> l2 = esGIF.getClientSideEntityMatches(mc.world, mc.player.getPos());
            if (l1.isEmpty() && l2.isEmpty()) {
                info(Text.literal(new Formatter().format("Map #%d not found", id).toString()).setStyle(Style.EMPTY.withColor(Formatting.RED)));
                return;
            }
            info(new Formatter().format("Map #%d found at:", id).toString());
            Stream.concat(l1.stream(), l2.stream()).forEach(e -> {
                EntityHighlightCommand.setEntityColor(e, color);
                info(new Formatter().format("  %.1f %.1f %.1f", e.getPos().x, e.getPos().y, e.getPos().z).toString());
            });
        } catch (CommandSyntaxException e) {
            error("This should never happen. The author of this garbage is probably an idiot.");
        }
    }

    @Override
    public void build(LiteralArgumentBuilder<CommandSource> builder) {
        builder.then(argument("id", IntegerArgumentType.integer()).executes(ctx -> {
            int targetID = IntegerArgumentType.getInteger(ctx, "id");
            Color color = new Color(0xff7fff);
            exec(targetID, color);
            return SINGLE_SUCCESS;
        }).then(argument("color", ColorCodeArgumentType.colorCode()).executes(ctx -> {
            int targetID = IntegerArgumentType.getInteger(ctx, "id");
            Color color = ctx.getArgument("color", Color.class);
            exec(targetID, color);
            return SINGLE_SUCCESS;
        })));
    }
}