Velocity 1.20.2 Support but NOT Forge 1.20.2 support. Also compatible with Protocolize and Geyser
This commit is contained in:
parent
4510f15ebb
commit
594aa4ccea
2
Velocity
2
Velocity
|
|
@ -1 +1 @@
|
||||||
Subproject commit 19abb9094e581bc4d21107e839901e5d68090b19
|
Subproject commit eb594fc799281ff418dc2c161c2d8a8eb0c89a19
|
||||||
|
|
@ -23,6 +23,7 @@ import com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentIdentifier;
|
||||||
import com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentPropertyRegistry;
|
import com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentPropertyRegistry;
|
||||||
import com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentPropertySerializer;
|
import com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentPropertySerializer;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.channel.Channel;
|
||||||
import io.netty.channel.ChannelInitializer;
|
import io.netty.channel.ChannelInitializer;
|
||||||
import org.adde0109.ambassador.velocity.VelocityBackendChannelInitializer;
|
import org.adde0109.ambassador.velocity.VelocityBackendChannelInitializer;
|
||||||
import org.adde0109.ambassador.velocity.VelocityServerChannelInitializer;
|
import org.adde0109.ambassador.velocity.VelocityServerChannelInitializer;
|
||||||
|
|
@ -39,7 +40,7 @@ import java.util.concurrent.TimeUnit;
|
||||||
import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19;
|
import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19;
|
||||||
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.4.2-beta", authors = {"adde0109"})
|
@Plugin(id = "ambassador", name = "Ambassador", version = "1.4.2-beta-unofficial", authors = {"adde0109"})
|
||||||
public class Ambassador {
|
public class Ambassador {
|
||||||
|
|
||||||
public ProxyServer server;
|
public ProxyServer server;
|
||||||
|
|
@ -103,11 +104,13 @@ public class Ambassador {
|
||||||
Field cmField = VelocityServer.class.getDeclaredField("cm");
|
Field cmField = VelocityServer.class.getDeclaredField("cm");
|
||||||
cmField.setAccessible(true);
|
cmField.setAccessible(true);
|
||||||
|
|
||||||
ChannelInitializer<?> original = ((ConnectionManager) cmField.get(server)).getServerChannelInitializer().get();
|
ConnectionManager connectionManager = (ConnectionManager) cmField.get(server);
|
||||||
((ConnectionManager) cmField.get(server)).getServerChannelInitializer().set(new VelocityServerChannelInitializer(original,(VelocityServer) server));
|
|
||||||
|
|
||||||
ChannelInitializer<?> originalBackend = ((ConnectionManager) cmField.get(server)).getBackendChannelInitializer().get();
|
ChannelInitializer<Channel> original = connectionManager.getServerChannelInitializer().get();
|
||||||
((ConnectionManager) cmField.get(server)).getBackendChannelInitializer().set(new VelocityBackendChannelInitializer(originalBackend,(VelocityServer) server));
|
connectionManager.getServerChannelInitializer().set(new VelocityServerChannelInitializer(original, (VelocityServer) server));
|
||||||
|
|
||||||
|
ChannelInitializer<Channel> originalBackend = connectionManager.getBackendChannelInitializer().get();
|
||||||
|
connectionManager.getBackendChannelInitializer().set(new VelocityBackendChannelInitializer(originalBackend, (VelocityServer) server, logger));
|
||||||
|
|
||||||
Method argumentRegistry = ArgumentPropertyRegistry.class.getDeclaredMethod("register", ArgumentIdentifier.class, Class.class, ArgumentPropertySerializer.class);
|
Method argumentRegistry = ArgumentPropertyRegistry.class.getDeclaredMethod("register", ArgumentIdentifier.class, Class.class, ArgumentPropertySerializer.class);
|
||||||
argumentRegistry.setAccessible(true);
|
argumentRegistry.setAccessible(true);
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
|
||||||
import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
|
import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
|
||||||
import com.velocitypowered.proxy.network.Connections;
|
import com.velocitypowered.proxy.network.Connections;
|
||||||
import com.velocitypowered.proxy.protocol.ProtocolUtils;
|
import com.velocitypowered.proxy.protocol.ProtocolUtils;
|
||||||
|
import com.velocitypowered.proxy.protocol.StateRegistry;
|
||||||
import com.velocitypowered.proxy.protocol.packet.AvailableCommands;
|
import com.velocitypowered.proxy.protocol.packet.AvailableCommands;
|
||||||
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessage;
|
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessage;
|
||||||
import com.velocitypowered.proxy.protocol.packet.PluginMessage;
|
import com.velocitypowered.proxy.protocol.packet.PluginMessage;
|
||||||
|
|
@ -75,6 +76,8 @@ public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhas
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message.retain();
|
message.retain();
|
||||||
|
// dirty hack for 1.20.2 velocity!
|
||||||
|
player.getConnection().setState(StateRegistry.LOGIN);
|
||||||
player.getConnection().write(message);
|
player.getConnection().write(message);
|
||||||
//Forge server
|
//Forge server
|
||||||
//To avoid unnecessary resets, we wait until we get the handshake even if we know that we should
|
//To avoid unnecessary resets, we wait until we get the handshake even if we know that we should
|
||||||
|
|
@ -109,7 +112,7 @@ public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhas
|
||||||
if (message.getChannel().equals("ambassador:commands")) {
|
if (message.getChannel().equals("ambassador:commands")) {
|
||||||
AvailableCommands packet = new AvailableCommands();
|
AvailableCommands packet = new AvailableCommands();
|
||||||
packet.decode(message.content(), ProtocolUtils.Direction.CLIENTBOUND,server.getConnection().getProtocolVersion());
|
packet.decode(message.content(), ProtocolUtils.Direction.CLIENTBOUND,server.getConnection().getProtocolVersion());
|
||||||
server.getConnection().getSessionHandler().handle(packet);
|
server.getConnection().getActiveSessionHandler().handle(packet);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
|
||||||
//Don't handle anything from the server until the reset has completed.
|
//Don't handle anything from the server until the reset has completed.
|
||||||
//player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(false);
|
//player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(false);
|
||||||
|
|
||||||
if (connection.getState() == StateRegistry.PLAY) {
|
if (connection.getState() == StateRegistry.PLAY || connection.getState() == StateRegistry.CONFIG) {
|
||||||
connection.write(new PluginMessage("fml:handshake", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generatePluginResetPacket())));
|
connection.write(new PluginMessage("fml:handshake", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generatePluginResetPacket())));
|
||||||
connection.setState(StateRegistry.LOGIN);
|
connection.setState(StateRegistry.LOGIN);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -7,22 +7,27 @@ import io.netty.channel.ChannelInitializer;
|
||||||
import org.adde0109.ambassador.forge.ForgeConstants;
|
import org.adde0109.ambassador.forge.ForgeConstants;
|
||||||
import org.adde0109.ambassador.velocity.backend.FMLMarkerAdder;
|
import org.adde0109.ambassador.velocity.backend.FMLMarkerAdder;
|
||||||
import org.adde0109.ambassador.velocity.backend.VelocityForgeBackendHandshakeHandler;
|
import org.adde0109.ambassador.velocity.backend.VelocityForgeBackendHandshakeHandler;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
public class VelocityBackendChannelInitializer extends BackendChannelInitializer {
|
public class VelocityBackendChannelInitializer extends BackendChannelInitializer {
|
||||||
|
|
||||||
private Method INIT_CHANNEL;
|
private final Method INIT_CHANNEL;
|
||||||
|
|
||||||
private final ChannelInitializer<?> delegate;
|
private final ChannelInitializer<Channel> delegate;
|
||||||
private final VelocityServer server;
|
private final VelocityServer server;
|
||||||
|
|
||||||
public VelocityBackendChannelInitializer(ChannelInitializer<?> delegate, VelocityServer server) {
|
private final Logger logger;
|
||||||
|
|
||||||
|
public VelocityBackendChannelInitializer(ChannelInitializer<Channel> delegate, VelocityServer server, Logger logger) {
|
||||||
super(server);
|
super(server);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
this.logger = logger;
|
||||||
try {
|
try {
|
||||||
|
logger.info("Respecting the previous registered BackendChannelInitializer: " + delegate.getClass().getName());
|
||||||
INIT_CHANNEL = delegate.getClass().getDeclaredMethod("initChannel", Channel.class);
|
INIT_CHANNEL = delegate.getClass().getDeclaredMethod("initChannel", Channel.class);
|
||||||
INIT_CHANNEL.setAccessible(true);
|
INIT_CHANNEL.setAccessible(true);
|
||||||
} catch (ReflectiveOperationException e) {
|
} catch (ReflectiveOperationException e) {
|
||||||
|
|
@ -33,7 +38,8 @@ public class VelocityBackendChannelInitializer extends BackendChannelInitializer
|
||||||
@Override
|
@Override
|
||||||
protected void initChannel(Channel ch) {
|
protected void initChannel(Channel ch) {
|
||||||
try {
|
try {
|
||||||
INIT_CHANNEL.invoke(delegate,ch);
|
logger.info("Calling the underlying backend channel initializer: " + delegate.getClass().getName());
|
||||||
|
INIT_CHANNEL.invoke(delegate, ch);
|
||||||
} catch (ReflectiveOperationException e) {
|
} catch (ReflectiveOperationException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.velocitypowered.proxy.connection.MinecraftConnection;
|
||||||
import com.velocitypowered.proxy.connection.client.HandshakeSessionHandler;
|
import com.velocitypowered.proxy.connection.client.HandshakeSessionHandler;
|
||||||
import com.velocitypowered.proxy.network.Connections;
|
import com.velocitypowered.proxy.network.Connections;
|
||||||
import com.velocitypowered.proxy.network.ServerChannelInitializer;
|
import com.velocitypowered.proxy.network.ServerChannelInitializer;
|
||||||
|
import com.velocitypowered.proxy.protocol.StateRegistry;
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import io.netty.channel.ChannelHandler;
|
import io.netty.channel.ChannelHandler;
|
||||||
import io.netty.channel.ChannelInitializer;
|
import io.netty.channel.ChannelInitializer;
|
||||||
|
|
@ -42,8 +43,8 @@ public class VelocityServerChannelInitializer extends ServerChannelInitializer {
|
||||||
if (ch.pipeline().get(MinecraftConnection.class) == null)
|
if (ch.pipeline().get(MinecraftConnection.class) == null)
|
||||||
super.initChannel(ch);
|
super.initChannel(ch);
|
||||||
MinecraftConnection handler = ch.pipeline().get(MinecraftConnection.class);
|
MinecraftConnection handler = ch.pipeline().get(MinecraftConnection.class);
|
||||||
HandshakeSessionHandler originalSessionHandler = (HandshakeSessionHandler) handler.getSessionHandler();
|
HandshakeSessionHandler originalSessionHandler = (HandshakeSessionHandler) handler.getActiveSessionHandler();
|
||||||
handler.setSessionHandler(new VelocityHandshakeSessionHandler(originalSessionHandler, handler, server));
|
handler.setActiveSessionHandler(StateRegistry.HANDSHAKE, new VelocityHandshakeSessionHandler(originalSessionHandler, handler, server));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.velocitypowered.proxy.connection.MinecraftConnection;
|
||||||
import com.velocitypowered.proxy.connection.backend.LoginSessionHandler;
|
import com.velocitypowered.proxy.connection.backend.LoginSessionHandler;
|
||||||
import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
|
import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
|
||||||
import com.velocitypowered.proxy.network.Connections;
|
import com.velocitypowered.proxy.network.Connections;
|
||||||
|
import com.velocitypowered.proxy.protocol.StateRegistry;
|
||||||
import io.netty.channel.*;
|
import io.netty.channel.*;
|
||||||
import org.adde0109.ambassador.forge.ForgeFMLConnectionType;
|
import org.adde0109.ambassador.forge.ForgeFMLConnectionType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
@ -25,7 +26,8 @@ public class VelocityForgeBackendHandshakeHandler extends ChannelInboundHandlerA
|
||||||
ctx.pipeline().remove(this);
|
ctx.pipeline().remove(this);
|
||||||
|
|
||||||
if (serverConnection.getPlayer().getConnection().getType() instanceof ForgeFMLConnectionType) {
|
if (serverConnection.getPlayer().getConnection().getType() instanceof ForgeFMLConnectionType) {
|
||||||
connection.setSessionHandler(new ForgeLoginSessionHandler((LoginSessionHandler) connection.getSessionHandler(),serverConnection,server));
|
ForgeLoginSessionHandler forgeLoginSessionHandler = new ForgeLoginSessionHandler((LoginSessionHandler) connection.getActiveSessionHandler(), serverConnection,server);
|
||||||
|
connection.setActiveSessionHandler(StateRegistry.LOGIN, forgeLoginSessionHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.pipeline().fireChannelActive();
|
ctx.pipeline().fireChannelActive();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user