From a44b81935315e01444118064cf72a045cdbcb726 Mon Sep 17 00:00:00 2001 From: Cloudburst Date: Thu, 3 Jun 2021 10:28:59 +0200 Subject: [PATCH] Add .tp --- .../rejects/MeteorRejectsAddon.java | 1 + .../arguments/ClientPosArgumentType.java | 73 +++++++++++++++++++ .../rejects/commands/TeleportCommand.java | 35 +++++++++ 3 files changed, 109 insertions(+) create mode 100644 src/main/java/cloudburst/rejects/arguments/ClientPosArgumentType.java create mode 100644 src/main/java/cloudburst/rejects/commands/TeleportCommand.java diff --git a/src/main/java/cloudburst/rejects/MeteorRejectsAddon.java b/src/main/java/cloudburst/rejects/MeteorRejectsAddon.java index 5cad279..5e08bd2 100644 --- a/src/main/java/cloudburst/rejects/MeteorRejectsAddon.java +++ b/src/main/java/cloudburst/rejects/MeteorRejectsAddon.java @@ -45,6 +45,7 @@ public class MeteorRejectsAddon extends MeteorAddon { commands.add(new BookDupeCommand()); commands.add(new GiveCommand()); commands.add(new SaveSkinCommand()); + commands.add(new TeleportCommand()); commands.add(new TerrainExport()); } diff --git a/src/main/java/cloudburst/rejects/arguments/ClientPosArgumentType.java b/src/main/java/cloudburst/rejects/arguments/ClientPosArgumentType.java new file mode 100644 index 0000000..52b0d0c --- /dev/null +++ b/src/main/java/cloudburst/rejects/arguments/ClientPosArgumentType.java @@ -0,0 +1,73 @@ +package cloudburst.rejects.arguments; + +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.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import net.minecraft.client.MinecraftClient; +import net.minecraft.command.CommandSource; +import net.minecraft.command.argument.*; +import net.minecraft.server.command.CommandManager; +import net.minecraft.util.math.Vec3d; + +import java.util.*; +import java.util.concurrent.CompletableFuture; + +public class ClientPosArgumentType implements ArgumentType { + private static final Collection EXAMPLES = Arrays.asList("0 0 0", "~ ~ ~", "~0.5 ~1 ~-5"); + private static final MinecraftClient mc = MinecraftClient.getInstance(); + + public ClientPosArgumentType() { + } + + public static ClientPosArgumentType blockPos() { + return new ClientPosArgumentType(); + } + + public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { + if (!(context.getSource() instanceof CommandSource)) { + return Suggestions.empty(); + } else { + String string = builder.getRemaining(); + Object collection2 = ((CommandSource)context.getSource()).getBlockPositionSuggestions(); + + return CommandSource.suggestPositions(string, (Collection)collection2, builder, CommandManager.getCommandValidator(this::parse)); + } + } + + public static Vec3d getPos(final CommandContext context, final String name) { + return context.getArgument(name, Vec3d.class); + } + + + public Vec3d parse(StringReader reader) throws CommandSyntaxException { + int i = reader.getCursor(); + double x,y,z; + CoordinateArgument coordinateArgument = CoordinateArgument.parse(reader); + CoordinateArgument coordinateArgument2; + CoordinateArgument coordinateArgument3; + if (reader.canRead() && reader.peek() == ' ') { + reader.skip(); + coordinateArgument2 = CoordinateArgument.parse(reader); + if (reader.canRead() && reader.peek() == ' ') { + reader.skip(); + coordinateArgument3 = CoordinateArgument.parse(reader); + } else { + reader.setCursor(i); + throw Vec3ArgumentType.INCOMPLETE_EXCEPTION.createWithContext(reader); + } + } else { + reader.setCursor(i); + throw Vec3ArgumentType.INCOMPLETE_EXCEPTION.createWithContext(reader); + } + + x = coordinateArgument.toAbsoluteCoordinate(mc.player.getX()); + y = coordinateArgument2.toAbsoluteCoordinate(mc.player.getY()); + z = coordinateArgument3.toAbsoluteCoordinate(mc.player.getZ()); + + return new Vec3d(x,y,z); + } + +} diff --git a/src/main/java/cloudburst/rejects/commands/TeleportCommand.java b/src/main/java/cloudburst/rejects/commands/TeleportCommand.java new file mode 100644 index 0000000..1d0247f --- /dev/null +++ b/src/main/java/cloudburst/rejects/commands/TeleportCommand.java @@ -0,0 +1,35 @@ +package cloudburst.rejects.commands; + +import cloudburst.rejects.arguments.ClientPosArgumentType; +import com.mojang.brigadier.arguments.FloatArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import minegame159.meteorclient.systems.commands.Command; +import net.minecraft.command.CommandSource; +import net.minecraft.util.math.Vec3d; + +import static com.mojang.brigadier.Command.SINGLE_SUCCESS; + +public class TeleportCommand extends Command { + + + public TeleportCommand() { + super("teleport","Sends a packet to the server with new position. Allows to teleport small distances.", "tp"); + } + + @Override + public void build(LiteralArgumentBuilder builder) { + builder.then(argument("pos", ClientPosArgumentType.blockPos()).executes(ctx -> { + Vec3d pos = ClientPosArgumentType.getPos(ctx, "pos"); + mc.player.updatePosition(pos.getX(), pos.getY(), pos.getZ()); + return SINGLE_SUCCESS; + })); + + builder.then(argument("pos", ClientPosArgumentType.blockPos()).then(argument("yaw", FloatArgumentType.floatArg()).then(argument("pitch",FloatArgumentType.floatArg()).executes(ctx -> { + Vec3d pos = ClientPosArgumentType.getPos(ctx, "pos"); + float yaw = FloatArgumentType.getFloat(ctx, "yaw"); + float pitch = FloatArgumentType.getFloat(ctx, "pitch"); + mc.player.updatePositionAndAngles(pos.getX(), pos.getY(), pos.getZ(), yaw, pitch); + return SINGLE_SUCCESS; + })))); + } +}