69 lines
2.6 KiB
Java
69 lines
2.6 KiB
Java
package me.rigamortis.seppuku.impl.module.misc;
|
|
|
|
import me.rigamortis.seppuku.api.event.EventStageable;
|
|
import me.rigamortis.seppuku.api.event.minecraft.EventDisplayGui;
|
|
import me.rigamortis.seppuku.api.event.minecraft.EventRunTick;
|
|
import me.rigamortis.seppuku.api.event.network.EventSendPacket;
|
|
import me.rigamortis.seppuku.api.module.Module;
|
|
import me.rigamortis.seppuku.api.util.Timer;
|
|
import me.rigamortis.seppuku.api.value.Value;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.gui.GuiDisconnected;
|
|
import net.minecraft.client.multiplayer.GuiConnecting;
|
|
import net.minecraft.network.EnumConnectionState;
|
|
import net.minecraft.network.handshake.client.C00Handshake;
|
|
import team.stiff.pomelo.impl.annotated.handler.annotation.Listener;
|
|
|
|
/**
|
|
* Author Seth
|
|
* 4/22/2019 @ 6:17 AM.
|
|
*/
|
|
public final class ReconnectModule extends Module {
|
|
|
|
public final Value<Float> delay = new Value<Float>("Delay", new String[]{"Del"}, "Delay in MS (milliseconds) between reconnect attempts", 3000.0f, 0.0f, 10000.0f, 500.0f);
|
|
private String lastIp;
|
|
private int lastPort;
|
|
private boolean reconnect;
|
|
private final Timer timer = new Timer();
|
|
|
|
public ReconnectModule() {
|
|
super("Reconnect", new String[]{"Rejoin", "Recon", "AutoReconnect"}, "Automatically reconnects to the last server after being kicked", "NONE", -1, ModuleType.MISC);
|
|
}
|
|
|
|
@Listener
|
|
public void sendPacket(EventSendPacket event) {
|
|
if (event.getStage() == EventStageable.EventStage.PRE) {
|
|
if (event.getPacket() instanceof C00Handshake) {
|
|
final C00Handshake packet = (C00Handshake) event.getPacket();
|
|
if (packet.getRequestedState() == EnumConnectionState.LOGIN) {
|
|
this.lastIp = packet.ip;
|
|
this.lastPort = packet.port;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Listener
|
|
public void runTick(EventRunTick event) {
|
|
if (event.getStage() == EventStageable.EventStage.POST) {
|
|
if (this.lastIp != null && this.lastPort > 0 && this.reconnect) {
|
|
if (this.timer.passed(this.delay.getValue())) {
|
|
Minecraft.getMinecraft().displayGuiScreen(new GuiConnecting(null, Minecraft.getMinecraft(), this.lastIp, this.lastPort));
|
|
this.timer.reset();
|
|
this.reconnect = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Listener
|
|
public void displayGui(EventDisplayGui event) {
|
|
if (event.getScreen() != null) {
|
|
if (event.getScreen() instanceof GuiDisconnected) {
|
|
this.reconnect = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|