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.OutboundSuccessHolder;
import org.adde0109.ambassador.velocity.client.ClientPacketQueue; import org.adde0109.ambassador.velocity.client.ClientPacketQueue;
import java.util.concurrent.TimeUnit;
public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase { public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase {
NOT_STARTED { NOT_STARTED {
@ -114,7 +116,10 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
@Override @Override
public void resetConnectionPhase(ConnectedPlayer player) { 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 @Override
@ -123,6 +128,8 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
} }
}; };
public ModListReplyPacket clientModList;
public boolean handle(ConnectedPlayer player, IForgeLoginWrapperPacket msg, VelocityServerConnection server) { public boolean handle(ConnectedPlayer player, IForgeLoginWrapperPacket msg, VelocityServerConnection server) {
player.setPhase(nextPhase()); player.setPhase(nextPhase());
@ -130,6 +137,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
ModInfo modInfo = new ModInfo("FML2", replyPacket.getMods().stream().map( ModInfo modInfo = new ModInfo("FML2", replyPacket.getMods().stream().map(
(v) -> new ModInfo.Mod(v,"1")).toList()); (v) -> new ModInfo.Mod(v,"1")).toList());
player.setModInfo(modInfo); player.setModInfo(modInfo);
this.clientModList = replyPacket;
if (!(server.getConnection().getType() instanceof ForgeFMLConnectionType)) { if (!(server.getConnection().getType() instanceof ForgeFMLConnectionType)) {
complete(player); complete(player);
player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(true); player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(true);
@ -160,9 +168,11 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
if (isResettable(player)) { if (isResettable(player)) {
player.setPhase(RESETTABLE); player.setPhase(RESETTABLE);
RESETTABLE.onTransitionToNewPhase(player); RESETTABLE.onTransitionToNewPhase(player);
RESETTABLE.clientModList = clientModList;
} else { } else {
player.setPhase(COMPLETE); player.setPhase(COMPLETE);
COMPLETE.onTransitionToNewPhase(player); 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.ChannelIdentifier;
import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier;
import com.velocitypowered.api.util.ModInfo;
import com.velocitypowered.proxy.protocol.ProtocolUtils; import com.velocitypowered.proxy.protocol.ProtocolUtils;
import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse; import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;

View File

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

View File

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