Added Server Redirect support

This commit is contained in:
Adrian Bergqvist 2023-05-12 19:25:25 +02:00
parent b8c905e619
commit 1b59fbae1a
No known key found for this signature in database
GPG Key ID: 3B3DA43224B79417
3 changed files with 18 additions and 6 deletions

View File

@ -5,7 +5,7 @@ plugins {
}
group = "org.adde0109"
version = "1.4.0-beta-rc1"
version = "1.4.0-beta-rc2"
repositories {
mavenCentral()

View File

@ -8,9 +8,11 @@ import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
import com.velocitypowered.proxy.connection.client.ClientConnectionPhase;
import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
import com.velocitypowered.proxy.network.Connections;
import com.velocitypowered.proxy.protocol.ProtocolUtils;
import com.velocitypowered.proxy.protocol.StateRegistry;
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessage;
import com.velocitypowered.proxy.protocol.packet.PluginMessage;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.kyori.adventure.text.Component;
import org.adde0109.ambassador.Ambassador;
@ -21,6 +23,7 @@ import org.adde0109.ambassador.velocity.client.FML2CRPMResetCompleteDecoder;
import org.adde0109.ambassador.velocity.client.OutboundSuccessHolder;
import org.adde0109.ambassador.velocity.client.ClientPacketQueue;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit;
public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase {
@ -118,9 +121,18 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
public void resetConnectionPhase(ConnectedPlayer player) {
Ambassador.getTemporaryForced().put(player.getUsername(), player.getConnectionInFlight().getServer(),
Ambassador.getInstance().config.getServerSwitchCancellationTime(), TimeUnit.SECONDS);
//Disconnect - Reset Timeout
//Disconnect - Reset
if(player.getKnownChannels().contains("srvredirect:red") && player.getVirtualHost().isPresent()) {
ByteBuf buf = Unpooled.buffer();
ProtocolUtils.writeVarInt(buf, 0);
buf.writeBytes((player.getVirtualHost().get().getHostName() + ":"
+ player.getVirtualHost().get().getPort()).getBytes(StandardCharsets.UTF_8));
player.getConnection().write(new PluginMessage("srvredirect:red", buf));
player.getConnection().close();
} else {
player.disconnect(Ambassador.getInstance().config.getDisconnectResetMessage());
}
}
@Override
public boolean consideredComplete() {

View File

@ -51,9 +51,9 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
if (player.getConnectedServer() == null) {
//Initial Vanilla
//Send empty mod list in order to get client mod list
((VelocityForgeClientConnectionPhase) player.getPhase()).sendVanillaModlist(player);
player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(false);
//((VelocityForgeClientConnectionPhase) player.getPhase()).complete(player);
//((VelocityForgeClientConnectionPhase) player.getPhase()).sendVanillaModlist(player);
//player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(false);
((VelocityForgeClientConnectionPhase) player.getPhase()).complete(player);
} else if (player.getConnectedServer().getConnection().getType() instanceof ForgeFMLConnectionType) {
//Forge -> vanilla
player.getPhase().resetConnectionPhase(player);