diff --git a/src/main/java/meteordevelopment/meteorclient/commands/Commands.java b/src/main/java/meteordevelopment/meteorclient/commands/Commands.java index c80c9054ad..671bfc7617 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/Commands.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/Commands.java @@ -55,6 +55,7 @@ public static void init() { add(new SpectateCommand()); add(new GamemodeCommand()); add(new SaveMapCommand()); + add(new LogoutCommand()); add(new MacroCommand()); add(new ModulesCommand()); add(new BindsCommand()); diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/LogoutCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/LogoutCommand.java new file mode 100644 index 0000000000..a0ce3c9f92 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/LogoutCommand.java @@ -0,0 +1,53 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.commands.commands; + +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import meteordevelopment.meteorclient.commands.Command; +import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.render.LogoutSpots; +import meteordevelopment.meteorclient.utils.player.ChatUtils; +import net.minecraft.command.CommandSource; + +public class LogoutCommand extends Command { + public LogoutCommand() { + super("logout-spots", "Manage logout spots - clear all spots or remove specific players", "logout"); + } + + @Override + public void build(LiteralArgumentBuilder builder) { + builder.then(literal("clear") + .executes(context -> { + LogoutSpots logoutSpots = Modules.get().get(LogoutSpots.class); + logoutSpots.clearLogoutSpots(); + + ChatUtils.info("Cleared all logout spots"); + return SINGLE_SUCCESS; + }) + ); + + builder.then(literal("remove") + .then(argument("name", StringArgumentType.word()) + .executes(context -> { + String playerName = StringArgumentType.getString(context, "name"); + LogoutSpots logoutSpots = Modules.get().get(LogoutSpots.class); + + boolean removed = logoutSpots.removeLogoutSpot(playerName); + + if (removed) { + ChatUtils.info("Removed logout spot for player: " + playerName); + } else { + ChatUtils.error("No logout spot found for player: " + playerName); + } + return SINGLE_SUCCESS; + }) + ) + ); + + + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java index cdfaa7adda..f4197ce823 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java @@ -9,6 +9,10 @@ import meteordevelopment.meteorclient.events.render.Render2DEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.events.world.TickEvent; +import meteordevelopment.meteorclient.gui.GuiTheme; +import meteordevelopment.meteorclient.gui.widgets.WWidget; +import meteordevelopment.meteorclient.gui.widgets.containers.WVerticalList; +import meteordevelopment.meteorclient.gui.widgets.pressable.WButton; import meteordevelopment.meteorclient.renderer.Renderer2D; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.renderer.text.TextRenderer; @@ -105,6 +109,17 @@ public LogoutSpots() { lineColor.onChanged(); } + @Override + public WWidget getWidget(GuiTheme theme) { + WVerticalList list = theme.verticalList(); + + WButton clear = list.add(theme.button("Clear Logout Spots")).expandX().widget(); + + clear.action = this::clearLogoutSpots; + + return list; + } + @Override public void onActivate() { lastPlayerList.addAll(mc.getNetworkHandler().getPlayerList()); @@ -114,12 +129,7 @@ public void onActivate() { lastDimension = mc.world.getDimension(); } - @Override - public void onDeactivate() { - players.clear(); - lastPlayerList.clear(); - } - + private void updateLastPlayers() { lastPlayers.clear(); for (Entity entity : mc.world.getEntities()) { @@ -195,6 +205,15 @@ public String getInfoString() { return Integer.toString(players.size()); } + public void clearLogoutSpots() { + players.clear(); + lastPlayerList.clear(); + } + + public boolean removeLogoutSpot(String playerName) { + return players.removeIf(entry -> entry.name.equalsIgnoreCase(playerName)); + } + private static final Vector3d pos = new Vector3d(); private class Entry {