seppuku/src/main/java/me/rigamortis/seppuku/impl/module/misc/ReconnectModule.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;
}
}
}
}