Reset kick

This commit is contained in:
Adrian Bergqvist 2023-05-07 15:59:50 +02:00
parent 7f434a8c5e
commit e754f58623
No known key found for this signature in database
GPG Key ID: 3B3DA43224B79417
4 changed files with 17 additions and 3 deletions

View File

@ -21,6 +21,8 @@ import org.adde0109.ambassador.velocity.client.FML2CRPMResetCompleteDecoder;
import org.adde0109.ambassador.velocity.client.OutboundSuccessHolder;
import org.adde0109.ambassador.velocity.client.ClientPacketQueue;
import java.util.concurrent.TimeUnit;
public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase {
NOT_STARTED {
@ -114,7 +116,10 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
@Override
public void resetConnectionPhase(ConnectedPlayer player) {
player.disconnect(Component.text("reconnect"));
Ambassador.getTemporaryForced().put(player.getUsername(), player.getConnectionInFlight().getServer(),
Ambassador.getInstance().config.getServerSwitchCancellationTime(), TimeUnit.SECONDS);
//Disconnect - Reset Timeout
player.disconnect(Ambassador.getInstance().config.getDisconnectResetMessage());
}
@Override
@ -123,6 +128,8 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
}
};
public ModListReplyPacket clientModList;
public boolean handle(ConnectedPlayer player, IForgeLoginWrapperPacket msg, VelocityServerConnection server) {
player.setPhase(nextPhase());
@ -130,6 +137,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
ModInfo modInfo = new ModInfo("FML2", replyPacket.getMods().stream().map(
(v) -> new ModInfo.Mod(v,"1")).toList());
player.setModInfo(modInfo);
this.clientModList = replyPacket;
if (!(server.getConnection().getType() instanceof ForgeFMLConnectionType)) {
complete(player);
player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(true);
@ -160,9 +168,11 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
if (isResettable(player)) {
player.setPhase(RESETTABLE);
RESETTABLE.onTransitionToNewPhase(player);
RESETTABLE.clientModList = clientModList;
} else {
player.setPhase(COMPLETE);
COMPLETE.onTransitionToNewPhase(player);
COMPLETE.clientModList = clientModList;
}
}

View File

@ -2,6 +2,7 @@ package org.adde0109.ambassador.forge.packet;
import com.velocitypowered.api.proxy.messages.ChannelIdentifier;
import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier;
import com.velocitypowered.api.util.ModInfo;
import com.velocitypowered.proxy.protocol.ProtocolUtils;
import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse;
import io.netty.buffer.ByteBuf;

View File

@ -41,6 +41,7 @@ public class VelocityEventHandler {
ForgeConstants.FORGE_HANDSHAKE_HANDLER, new ForgeLoginWrapperHandler(player));
});
}
//event.getPlayer().sendMessage(Component.text("login event"));
continuation.resume();
}
@ -48,6 +49,7 @@ public class VelocityEventHandler {
public void onPostLoginEvent(PostLoginEvent event, Continuation continuation) {
if (((ConnectedPlayer) event.getPlayer()).getPhase() instanceof VelocityForgeClientConnectionPhase)
((VelocityServer) Ambassador.getInstance().server).unregisterConnection((ConnectedPlayer) event.getPlayer());
//event.getPlayer().sendMessage(Component.text("post login event"));
continuation.resume();
}
@ -61,6 +63,7 @@ public class VelocityEventHandler {
RegisteredServer chosenServer = Ambassador.getTemporaryForced().remove(player.getUsername());
if (chosenServer != null)
event.setInitialServer(chosenServer);
//event.getPlayer().sendMessage(Component.text("choose server event"));
continuation.resume();
}

View File

@ -69,7 +69,7 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
@Override
public boolean handle(Disconnect packet) {
if (!serverConnection.getPhase().consideredComplete()) {
if (!serverConnection.getPlayer().getPhase().consideredComplete()) {
serverConnection.getPlayer().handleConnectionException(serverConnection.getServer(), packet, false);
return true;
}
@ -79,7 +79,7 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
@Override
public void disconnected() {
//Same as default just not safe.
if (!serverConnection.getPhase().consideredComplete()) {
if (!serverConnection.getPlayer().getPhase().consideredComplete()) {
if (server.getConfiguration().getPlayerInfoForwardingMode() == PlayerInfoForwarding.LEGACY) {
serverConnection.getPlayer().handleConnectionException(serverConnection.getServer(),
new QuietRuntimeException("The connection to the remote server was unexpectedly closed.\n"