Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / ArgumentAnchor.java
package net.minecraft.server;

import com.google.common.collect.Maps;
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.DynamicCommandExceptionType;
import com.mojang.brigadier.suggestion.Suggestions;
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiFunction;
import javax.annotation.Nullable;

public class ArgumentAnchor implements ArgumentType<ArgumentAnchor.Anchor> {

    private static final Collection<String> a = Arrays.asList("eyes", "feet");
    private static final DynamicCommandExceptionType b = new DynamicCommandExceptionType((object) -> {
        return new ChatMessage("argument.anchor.invalid", new Object[]{object});
    });

    public ArgumentAnchor() {}

    public static ArgumentAnchor.Anchor a(CommandContext<CommandListenerWrapper> commandcontext, String s) {
        return (ArgumentAnchor.Anchor) commandcontext.getArgument(s, ArgumentAnchor.Anchor.class);
    }

    public static ArgumentAnchor a() {
        return new ArgumentAnchor();
    }

    public ArgumentAnchor.Anchor parse(StringReader stringreader) throws CommandSyntaxException {
        int i = stringreader.getCursor();
        String s = stringreader.readUnquotedString();
        ArgumentAnchor.Anchor argumentanchor_anchor = ArgumentAnchor.Anchor.a(s);

        if (argumentanchor_anchor == null) {
            stringreader.setCursor(i);
            throw ArgumentAnchor.b.createWithContext(stringreader, s);
        } else {
            return argumentanchor_anchor;
        }
    }

    public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> commandcontext, SuggestionsBuilder suggestionsbuilder) {
        return ICompletionProvider.b((Iterable) ArgumentAnchor.Anchor.c.keySet(), suggestionsbuilder);
    }

    public Collection<String> getExamples() {
        return ArgumentAnchor.a;
    }

    public static enum Anchor {

        FEET("feet", (vec3d, entity) -> {
            return vec3d;
        }), EYES("eyes", (vec3d, entity) -> {
            return new Vec3D(vec3d.x, vec3d.y + (double) entity.getHeadHeight(), vec3d.z);
        });

        private static final Map<String, ArgumentAnchor.Anchor> c = (Map) SystemUtils.a((Object) Maps.newHashMap(), (hashmap) -> {
            ArgumentAnchor.Anchor[] aargumentanchor_anchor = values();
            int i = aargumentanchor_anchor.length;

            for (int j = 0; j < i; ++j) {
                ArgumentAnchor.Anchor argumentanchor_anchor = aargumentanchor_anchor[j];

                hashmap.put(argumentanchor_anchor.d, argumentanchor_anchor);
            }

        });
        private final String d;
        private final BiFunction<Vec3D, Entity, Vec3D> e;

        private Anchor(String s, BiFunction bifunction) {
            this.d = s;
            this.e = bifunction;
        }

        @Nullable
        public static ArgumentAnchor.Anchor a(String s) {
            return (ArgumentAnchor.Anchor) ArgumentAnchor.Anchor.c.get(s);
        }

        public Vec3D a(Entity entity) {
            return (Vec3D) this.e.apply(entity.getPositionVector(), entity);
        }

        public Vec3D a(CommandListenerWrapper commandlistenerwrapper) {
            Entity entity = commandlistenerwrapper.getEntity();

            return entity == null ? commandlistenerwrapper.getPosition() : (Vec3D) this.e.apply(commandlistenerwrapper.getPosition(), entity);
        }
    }
}