Fixed pluginloginpacket queue
This commit is contained in:
parent
2ee56603da
commit
08bdfe9b22
|
|
@ -5,7 +5,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "org.adde0109"
|
group = "org.adde0109"
|
||||||
version = "1.3.1-beta"
|
version = "1.3.2-beta-rc8"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19;
|
||||||
import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19_3;
|
import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19_3;
|
||||||
import static com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentIdentifier.mapSet;
|
import static com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentIdentifier.mapSet;
|
||||||
|
|
||||||
@Plugin(id = "ambassador", name = "Ambassador", version = "1.3.1-beta", authors = {"adde0109"})
|
@Plugin(id = "ambassador", name = "Ambassador", version = "1.3.2-beta-rc4", authors = {"adde0109"})
|
||||||
public class Ambassador {
|
public class Ambassador {
|
||||||
|
|
||||||
public ProxyServer server;
|
public ProxyServer server;
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,9 @@ public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhas
|
||||||
//Reset client if not ready to receive new handshake
|
//Reset client if not ready to receive new handshake
|
||||||
VelocityForgeClientConnectionPhase clientPhase = (VelocityForgeClientConnectionPhase) player.getPhase();
|
VelocityForgeClientConnectionPhase clientPhase = (VelocityForgeClientConnectionPhase) player.getPhase();
|
||||||
clientPhase.resetConnectionPhase(player);
|
clientPhase.resetConnectionPhase(player);
|
||||||
|
//Forge server
|
||||||
|
//To avoid unnecessary resets, we wait until we get the handshake even if we know that we should
|
||||||
|
//reset because that the previous server was Forge.
|
||||||
player.getConnection().write(message.retain());
|
player.getConnection().write(message.retain());
|
||||||
|
|
||||||
ForgeLoginWrapperDecoder decoder = (ForgeLoginWrapperDecoder) player.getConnection()
|
ForgeLoginWrapperDecoder decoder = (ForgeLoginWrapperDecoder) player.getConnection()
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
|
||||||
player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(true);
|
player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(true);
|
||||||
|
|
||||||
if (!(server.getConnection().getType() instanceof ForgeFMLConnectionType)) {
|
if (!(server.getConnection().getType() instanceof ForgeFMLConnectionType)) {
|
||||||
|
//Forge -> Vanilla
|
||||||
MinecraftConnection connection = player.getConnection();
|
MinecraftConnection connection = player.getConnection();
|
||||||
((OutboundSuccessHolder) connection.getChannel().pipeline().get(ForgeConstants.SERVER_SUCCESS_LISTENER))
|
((OutboundSuccessHolder) connection.getChannel().pipeline().get(ForgeConstants.SERVER_SUCCESS_LISTENER))
|
||||||
.sendPacket();
|
.sendPacket();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package org.adde0109.ambassador.velocity.backend;
|
package org.adde0109.ambassador.velocity.backend;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.network.ProtocolVersion;
|
||||||
import com.velocitypowered.proxy.VelocityServer;
|
import com.velocitypowered.proxy.VelocityServer;
|
||||||
import com.velocitypowered.proxy.connection.MinecraftConnection;
|
import com.velocitypowered.proxy.connection.MinecraftConnection;
|
||||||
import com.velocitypowered.proxy.connection.MinecraftSessionHandler;
|
import com.velocitypowered.proxy.connection.MinecraftSessionHandler;
|
||||||
|
|
@ -15,6 +16,7 @@ import org.adde0109.ambassador.Ambassador;
|
||||||
import org.adde0109.ambassador.forge.ForgeConstants;
|
import org.adde0109.ambassador.forge.ForgeConstants;
|
||||||
import org.adde0109.ambassador.forge.ForgeFMLConnectionType;
|
import org.adde0109.ambassador.forge.ForgeFMLConnectionType;
|
||||||
import org.adde0109.ambassador.forge.VelocityForgeBackendConnectionPhase;
|
import org.adde0109.ambassador.forge.VelocityForgeBackendConnectionPhase;
|
||||||
|
import org.adde0109.ambassador.forge.VelocityForgeClientConnectionPhase;
|
||||||
import org.adde0109.ambassador.velocity.client.OutboundSuccessHolder;
|
import org.adde0109.ambassador.velocity.client.OutboundSuccessHolder;
|
||||||
|
|
||||||
public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
|
public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
|
||||||
|
|
@ -49,15 +51,20 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
ConnectedPlayer player = serverConnection.getPlayer();
|
ConnectedPlayer player = serverConnection.getPlayer();
|
||||||
if (!(serverConnection.getConnection().getType() instanceof ForgeFMLConnectionType) && player.getConnectedServer() != null &&
|
if (player.getConnectedServer() != null && player.getConnectedServer().getConnection().getType() instanceof ForgeFMLConnectionType) {
|
||||||
player.getConnectedServer().getConnection().getType() instanceof ForgeFMLConnectionType) {
|
//Forge -> vanilla
|
||||||
|
//Has not already been reset
|
||||||
|
//Not for Vanilla -> Vanilla
|
||||||
player.getPhase().resetConnectionPhase(player);
|
player.getPhase().resetConnectionPhase(player);
|
||||||
} else if (player.getConnectedServer() == null) {
|
} else if (player.getConnection().getState() == StateRegistry.LOGIN) {
|
||||||
|
//Initial vanilla
|
||||||
|
//Vanilla -> Forge
|
||||||
MinecraftConnection connection = player.getConnection();
|
MinecraftConnection connection = player.getConnection();
|
||||||
((OutboundSuccessHolder) connection.getChannel().pipeline().get(ForgeConstants.SERVER_SUCCESS_LISTENER))
|
((OutboundSuccessHolder) connection.getChannel().pipeline().get(ForgeConstants.SERVER_SUCCESS_LISTENER))
|
||||||
.sendPacket();
|
.sendPacket();
|
||||||
connection.setState(StateRegistry.PLAY);
|
connection.setState(StateRegistry.PLAY);
|
||||||
connection.getChannel().pipeline().remove(ForgeConstants.PLUGIN_PACKET_QUEUE);
|
if (connection.getChannel().pipeline().toMap().containsKey(ForgeConstants.PLUGIN_PACKET_QUEUE))
|
||||||
|
connection.getChannel().pipeline().remove(ForgeConstants.PLUGIN_PACKET_QUEUE);
|
||||||
((VelocityServer) Ambassador.getInstance().server).registerConnection(player);
|
((VelocityServer) Ambassador.getInstance().server).registerConnection(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,12 +87,17 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disconnected() {
|
public void disconnected() {
|
||||||
if (!serverConnection.getPhase().consideredComplete()) {
|
if (!serverConnection.getPhase().consideredComplete()
|
||||||
serverConnection.getPlayer().handleConnectionException(serverConnection.getServer(),
|
&& serverConnection.getPlayer().getPhase() != VelocityForgeClientConnectionPhase.NOT_STARTED) {
|
||||||
Disconnect.create(Component.text("Ambassador: Backend server disconnected during handshake could be: " +
|
int protocolVersion = serverConnection.getConnection().getProtocolVersion().getProtocol();
|
||||||
"mismatched mods OR bad player-forwarding config"),
|
if (protocolVersion <= ProtocolVersion.MINECRAFT_1_16_4.getProtocol()) {
|
||||||
serverConnection.getPlayer().getProtocolVersion()),false);
|
serverConnection.getPlayer().handleConnectionException(serverConnection.getServer(),
|
||||||
return;
|
Disconnect.create(Component.text("Ambassador: Backend server disconnected during handshake." +
|
||||||
|
((protocolVersion <= ProtocolVersion.MINECRAFT_1_16_4.getProtocol()) ?
|
||||||
|
"Could be mismatched mods." : "")),
|
||||||
|
serverConnection.getPlayer().getProtocolVersion()),false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
original.disconnected();
|
original.disconnected();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,14 @@
|
||||||
package org.adde0109.ambassador.velocity.client;
|
package org.adde0109.ambassador.velocity.client;
|
||||||
|
|
||||||
|
import com.velocitypowered.proxy.connection.MinecraftConnection;
|
||||||
|
import com.velocitypowered.proxy.protocol.MinecraftPacket;
|
||||||
|
import com.velocitypowered.proxy.protocol.ProtocolUtils;
|
||||||
|
import com.velocitypowered.proxy.protocol.StateRegistry;
|
||||||
import com.velocitypowered.proxy.protocol.netty.MinecraftEncoder;
|
import com.velocitypowered.proxy.protocol.netty.MinecraftEncoder;
|
||||||
|
import com.velocitypowered.proxy.protocol.util.DeferredByteBufHolder;
|
||||||
import io.netty.channel.*;
|
import io.netty.channel.*;
|
||||||
import io.netty.handler.codec.EncoderException;
|
import io.netty.handler.codec.EncoderException;
|
||||||
|
import io.netty.util.ReferenceCountUtil;
|
||||||
|
|
||||||
|
|
||||||
public class PluginLoginPacketQueue extends ChannelOutboundHandlerAdapter {
|
public class PluginLoginPacketQueue extends ChannelOutboundHandlerAdapter {
|
||||||
|
|
@ -16,13 +22,17 @@ public class PluginLoginPacketQueue extends ChannelOutboundHandlerAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
|
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
|
||||||
MinecraftEncoder encoder = ctx.pipeline().get(MinecraftEncoder.class);
|
MinecraftConnection connection = ctx.pipeline().get(MinecraftConnection.class);
|
||||||
try {
|
if (connection.getState() == StateRegistry.LOGIN && msg instanceof MinecraftPacket packet) {
|
||||||
encoder.write(ctx, msg, promise);
|
try {
|
||||||
} catch (EncoderException e) {
|
StateRegistry.LOGIN.getProtocolRegistry(ProtocolUtils.Direction.CLIENTBOUND ,
|
||||||
if (e.getCause() instanceof IllegalArgumentException) {
|
connection.getProtocolVersion()).getPacketId(packet);
|
||||||
queue.add(msg,promise);
|
ctx.write(msg,promise);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
queue.add(msg, promise);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
ctx.write(msg,promise);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user