From e754f586230db7a4e729ff17bb084383aaac1487 Mon Sep 17 00:00:00 2001 From: Adrian Bergqvist Date: Sun, 7 May 2023 15:59:50 +0200 Subject: [PATCH] Reset kick --- .../forge/VelocityForgeClientConnectionPhase.java | 12 +++++++++++- .../ambassador/forge/packet/ModListReplyPacket.java | 1 + .../ambassador/velocity/VelocityEventHandler.java | 3 +++ .../velocity/backend/ForgeLoginSessionHandler.java | 4 ++-- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java index 4bdf19c..4e3ff70 100644 --- a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java @@ -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; } } diff --git a/src/main/java/org/adde0109/ambassador/forge/packet/ModListReplyPacket.java b/src/main/java/org/adde0109/ambassador/forge/packet/ModListReplyPacket.java index d68f94e..2d14eb3 100644 --- a/src/main/java/org/adde0109/ambassador/forge/packet/ModListReplyPacket.java +++ b/src/main/java/org/adde0109/ambassador/forge/packet/ModListReplyPacket.java @@ -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; diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java index f74eff4..354b8db 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java @@ -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(); } diff --git a/src/main/java/org/adde0109/ambassador/velocity/backend/ForgeLoginSessionHandler.java b/src/main/java/org/adde0109/ambassador/velocity/backend/ForgeLoginSessionHandler.java index 2aee101..5fdd2b1 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/backend/ForgeLoginSessionHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/backend/ForgeLoginSessionHandler.java @@ -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"