From 7b4412227b711ad2c9c4ee53e0ada66e28d26974 Mon Sep 17 00:00:00 2001 From: ThebestkillerTBK <2593828650@qq.com> Date: Thu, 20 Oct 2022 21:48:30 +0800 Subject: [PATCH] SilentDisconnect --- .../anticope/rejects/MeteorRejectsAddon.java | 7 +++-- .../rejects/commands/ReconnectCommand.java | 31 +++++++++++++++++++ .../mixin/ClientPlayNetworkHandlerMixin.java | 15 +++++++++ .../rejects/modules/SilentDisconnect.java | 10 ++++++ 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/main/java/anticope/rejects/commands/ReconnectCommand.java create mode 100644 src/main/java/anticope/rejects/modules/SilentDisconnect.java diff --git a/src/main/java/anticope/rejects/MeteorRejectsAddon.java b/src/main/java/anticope/rejects/MeteorRejectsAddon.java index 60fbb2e..6591acc 100644 --- a/src/main/java/anticope/rejects/MeteorRejectsAddon.java +++ b/src/main/java/anticope/rejects/MeteorRejectsAddon.java @@ -81,13 +81,14 @@ public class MeteorRejectsAddon extends MeteorAddon { commands.add(new ClearChatCommand()); commands.add(new GhostCommand()); commands.add(new GiveCommand()); - commands.add(new SaveSkinCommand()); - commands.add(new SeedCommand()); commands.add(new HeadsCommand()); commands.add(new KickCommand()); // commands.add(new LocateCommand()); I wish it was that simple -_- - commands.add(new ServerCommand()); commands.add(new PanicCommand()); + commands.add(new ReconnectCommand()); + commands.add(new ServerCommand()); + commands.add(new SaveSkinCommand()); + commands.add(new SeedCommand()); commands.add(new SetBlockCommand()); commands.add(new SetVelocityCommand()); commands.add(new TeleportCommand()); diff --git a/src/main/java/anticope/rejects/commands/ReconnectCommand.java b/src/main/java/anticope/rejects/commands/ReconnectCommand.java new file mode 100644 index 0000000..51565f8 --- /dev/null +++ b/src/main/java/anticope/rejects/commands/ReconnectCommand.java @@ -0,0 +1,31 @@ +package anticope.rejects.commands; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import meteordevelopment.meteorclient.systems.commands.Command; +import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.misc.AutoReconnect; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.ConnectScreen; +import net.minecraft.client.gui.screen.TitleScreen; +import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; +import net.minecraft.client.network.ServerAddress; +import net.minecraft.command.CommandSource; + +import static com.mojang.brigadier.Command.SINGLE_SUCCESS; + +public class ReconnectCommand extends Command { + public ReconnectCommand() { + super("reconnect", "Reconnects server."); + } + + @Override + public void build(LiteralArgumentBuilder builder) { + builder.executes(context -> { + mc.world.disconnect(); + AutoReconnect autoReconnect = Modules.get().get(AutoReconnect.class); + ConnectScreen.connect(new MultiplayerScreen(new TitleScreen()), MinecraftClient.getInstance(), + ServerAddress.parse(autoReconnect.lastServerInfo.address), autoReconnect.lastServerInfo); + return SINGLE_SUCCESS; + }); + } +} diff --git a/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java index 4b8a63a..7cd7072 100644 --- a/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java @@ -2,15 +2,21 @@ package anticope.rejects.mixin; import anticope.rejects.events.ChunkPosDataEvent; import anticope.rejects.events.PlayerRespawnEvent; +import anticope.rejects.modules.SilentDisconnect; import meteordevelopment.meteorclient.MeteorClient; +import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.utils.player.ChatUtils; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.network.packet.s2c.play.ChunkDataS2CPacket; import net.minecraft.network.packet.s2c.play.PlayerRespawnS2CPacket; +import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import static meteordevelopment.meteorclient.MeteorClient.mc; + @Mixin(ClientPlayNetworkHandler.class) public class ClientPlayNetworkHandlerMixin { @@ -25,4 +31,13 @@ public class ClientPlayNetworkHandlerMixin { public void onPlayerRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) { MeteorClient.EVENT_BUS.post(PlayerRespawnEvent.get()); } + + @Inject(method = "onDisconnected", at = @At("HEAD"), cancellable = true) + private void onDisconnected(Text reason, CallbackInfo info) { + if (Modules.get().isActive(SilentDisconnect.class) && mc.world != null && mc.player != null) { + ChatUtils.info(Text.translatable("disconnect.lost").getString() + ":"); + ChatUtils.sendMsg(reason); + info.cancel(); + } + } } diff --git a/src/main/java/anticope/rejects/modules/SilentDisconnect.java b/src/main/java/anticope/rejects/modules/SilentDisconnect.java new file mode 100644 index 0000000..5f65daf --- /dev/null +++ b/src/main/java/anticope/rejects/modules/SilentDisconnect.java @@ -0,0 +1,10 @@ +package anticope.rejects.modules; + +import anticope.rejects.MeteorRejectsAddon; +import meteordevelopment.meteorclient.systems.modules.Module; + +public class SilentDisconnect extends Module { + public SilentDisconnect() { + super(MeteorRejectsAddon.CATEGORY, "silent-disconnect", "Won't show a disconnect screen when you disconnects."); + } +}