Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ac891c1ef1 | |||
| f8185ddb0d | |||
|
|
349ce41f5f | ||
|
|
e7df1270e0 | ||
|
|
1567e538a0 | ||
|
|
e167a198ae | ||
|
|
8ead34ca6a | ||
|
|
21d0c11159 | ||
|
|
424c12aad4 | ||
|
|
f1b8b7ead1 |
2
Velocity
2
Velocity
|
|
@ -1 +1 @@
|
||||||
Subproject commit eb594fc799281ff418dc2c161c2d8a8eb0c89a19
|
Subproject commit ecf936f35665f9fd0f65ee114062cfbda2b89bf6
|
||||||
|
|
@ -5,7 +5,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "org.adde0109"
|
group = "org.adde0109"
|
||||||
version = "1.4.3-beta"
|
version = "1.4.5-fix2"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||||
import com.velocitypowered.proxy.VelocityServer;
|
import com.velocitypowered.proxy.VelocityServer;
|
||||||
import com.velocitypowered.proxy.connection.MinecraftConnection;
|
|
||||||
import com.velocitypowered.proxy.network.ConnectionManager;
|
import com.velocitypowered.proxy.network.ConnectionManager;
|
||||||
import com.velocitypowered.proxy.protocol.StateRegistry;
|
|
||||||
import com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentIdentifier;
|
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;
|
||||||
|
|
@ -42,11 +40,11 @@ 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.3-beta", authors = {"adde0109"})
|
@Plugin(id = "ambassador", name = "Ambassador", version = "1.4.5", authors = {"adde0109"})
|
||||||
public class Ambassador {
|
public class Ambassador {
|
||||||
|
|
||||||
//Don't forget to update checkCompatibleVersion() when changing this value
|
//Don't forget to update checkCompatibleVersion() when changing this value
|
||||||
private static final String minVelocityVersion = "velocity-3.2.0-SNAPSHOT-266";
|
private static final String minVelocityVersion = "velocity-3.2.0-SNAPSHOT-330";
|
||||||
|
|
||||||
public ProxyServer server;
|
public ProxyServer server;
|
||||||
public final Logger logger;
|
public final Logger logger;
|
||||||
|
|
@ -75,8 +73,8 @@ public class Ambassador {
|
||||||
boolean checkCompatibleVersion() {
|
boolean checkCompatibleVersion() {
|
||||||
//Update this when changing minVelocityVersion
|
//Update this when changing minVelocityVersion
|
||||||
try {
|
try {
|
||||||
MinecraftConnection.class.getDeclaredMethod("setActiveSessionHandler", StateRegistry.class);
|
Class.forName("com.velocitypowered.proxy.protocol.packet.DisconnectPacket");
|
||||||
} catch (NoSuchMethodException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -134,8 +132,8 @@ public class Ambassador {
|
||||||
|
|
||||||
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);
|
||||||
argumentRegistry.invoke(null,ArgumentIdentifier.id("forge:enum", mapSet(MINECRAFT_1_19, 50)), EnumArgumentProperty.class, EnumArgumentPropertySerializer.ENUM);
|
argumentRegistry.invoke(null,ArgumentIdentifier.id("forge:enum", mapSet(MINECRAFT_1_19, -255)), EnumArgumentProperty.class, EnumArgumentPropertySerializer.ENUM);
|
||||||
argumentRegistry.invoke(null,ArgumentIdentifier.id("forge:modid", mapSet(MINECRAFT_1_19, 51)), ModIdArgumentProperty.class,
|
argumentRegistry.invoke(null,ArgumentIdentifier.id("forge:modid", mapSet(MINECRAFT_1_19, -254)), ModIdArgumentProperty.class,
|
||||||
new ArgumentPropertySerializer<>() {
|
new ArgumentPropertySerializer<>() {
|
||||||
@Override
|
@Override
|
||||||
public ModIdArgumentProperty deserialize(ByteBuf buf, ProtocolVersion protocolVersion) {
|
public ModIdArgumentProperty deserialize(ByteBuf buf, ProtocolVersion protocolVersion) {
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ 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.StateRegistry;
|
||||||
import com.velocitypowered.proxy.protocol.packet.AvailableCommands;
|
import com.velocitypowered.proxy.protocol.packet.AvailableCommandsPacket;
|
||||||
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessage;
|
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessagePacket;
|
||||||
import com.velocitypowered.proxy.protocol.packet.PluginMessage;
|
import com.velocitypowered.proxy.protocol.packet.PluginMessagePacket;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import org.adde0109.ambassador.forge.pipeline.CommandDecoderErrorCatcher;
|
import org.adde0109.ambassador.forge.pipeline.CommandDecoderErrorCatcher;
|
||||||
import org.adde0109.ambassador.forge.pipeline.ForgeLoginWrapperDecoder;
|
import org.adde0109.ambassador.forge.pipeline.ForgeLoginWrapperDecoder;
|
||||||
|
|
@ -59,7 +59,7 @@ public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhas
|
||||||
VelocityForgeBackendConnectionPhase() {
|
VelocityForgeBackendConnectionPhase() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handle(VelocityServerConnection server, ConnectedPlayer player, LoginPluginMessage message) {
|
public void handle(VelocityServerConnection server, ConnectedPlayer player, LoginPluginMessagePacket message) {
|
||||||
|
|
||||||
VelocityForgeBackendConnectionPhase newPhase = getNewPhase(server,message);
|
VelocityForgeBackendConnectionPhase newPhase = getNewPhase(server,message);
|
||||||
|
|
||||||
|
|
@ -97,7 +97,7 @@ public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhas
|
||||||
}
|
}
|
||||||
|
|
||||||
private VelocityForgeBackendConnectionPhase getNewPhase(VelocityServerConnection serverConnection,
|
private VelocityForgeBackendConnectionPhase getNewPhase(VelocityServerConnection serverConnection,
|
||||||
LoginPluginMessage packet) {
|
LoginPluginMessagePacket packet) {
|
||||||
VelocityForgeBackendConnectionPhase phaseToTransitionTo = nextPhase();
|
VelocityForgeBackendConnectionPhase phaseToTransitionTo = nextPhase();
|
||||||
if (phaseToTransitionTo != this) {
|
if (phaseToTransitionTo != this) {
|
||||||
phaseToTransitionTo.onTransitionToNewPhase(serverConnection);
|
phaseToTransitionTo.onTransitionToNewPhase(serverConnection);
|
||||||
|
|
@ -106,9 +106,9 @@ public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhas
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(VelocityServerConnection server, ConnectedPlayer player, PluginMessage message) {
|
public boolean handle(VelocityServerConnection server, ConnectedPlayer player, PluginMessagePacket message) {
|
||||||
if (message.getChannel().equals("ambassador:commands")) {
|
if (message.getChannel().equals("ambassador:commands")) {
|
||||||
AvailableCommands packet = new AvailableCommands();
|
AvailableCommandsPacket packet = new AvailableCommandsPacket();
|
||||||
packet.decode(message.content(), ProtocolUtils.Direction.CLIENTBOUND,server.getConnection().getProtocolVersion());
|
packet.decode(message.content(), ProtocolUtils.Direction.CLIENTBOUND,server.getConnection().getProtocolVersion());
|
||||||
server.getConnection().getActiveSessionHandler().handle(packet);
|
server.getConnection().getActiveSessionHandler().handle(packet);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ 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.StateRegistry;
|
||||||
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessage;
|
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessagePacket;
|
||||||
import com.velocitypowered.proxy.protocol.packet.PluginMessage;
|
import com.velocitypowered.proxy.protocol.packet.PluginMessagePacket;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
@ -62,10 +62,10 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
|
||||||
//player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(false);
|
//player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(false);
|
||||||
|
|
||||||
if (connection.getState() == StateRegistry.PLAY || connection.getState() == StateRegistry.CONFIG) {
|
if (connection.getState() == StateRegistry.PLAY || connection.getState() == StateRegistry.CONFIG) {
|
||||||
connection.write(new PluginMessage("fml:handshake", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generatePluginResetPacket())));
|
connection.write(new PluginMessagePacket("fml:handshake", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generatePluginResetPacket())));
|
||||||
connection.setState(StateRegistry.LOGIN);
|
connection.setState(StateRegistry.LOGIN);
|
||||||
} else {
|
} else {
|
||||||
connection.write(new LoginPluginMessage(98,"fml:loginwrapper", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generateResetPacket())));
|
connection.write(new LoginPluginMessagePacket(98,"fml:loginwrapper", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generateResetPacket())));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Prepare to receive reset ACK
|
//Prepare to receive reset ACK
|
||||||
|
|
@ -135,7 +135,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
|
||||||
ProtocolUtils.writeVarInt(buf, 0);
|
ProtocolUtils.writeVarInt(buf, 0);
|
||||||
buf.writeBytes((player.getVirtualHost().get().getHostName() + ":"
|
buf.writeBytes((player.getVirtualHost().get().getHostName() + ":"
|
||||||
+ player.getVirtualHost().get().getPort()).getBytes(StandardCharsets.UTF_8));
|
+ player.getVirtualHost().get().getPort()).getBytes(StandardCharsets.UTF_8));
|
||||||
player.getConnection().write(new PluginMessage("srvredirect:red", buf));
|
player.getConnection().write(new PluginMessagePacket("srvredirect:red", buf));
|
||||||
} else {
|
} else {
|
||||||
player.disconnect(Ambassador.getInstance().config.getDisconnectResetMessage());
|
player.disconnect(Ambassador.getInstance().config.getDisconnectResetMessage());
|
||||||
}
|
}
|
||||||
|
|
@ -170,7 +170,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendVanillaModlist(ConnectedPlayer player) {
|
public void sendVanillaModlist(ConnectedPlayer player) {
|
||||||
player.getConnection().write(new LoginPluginMessage(0, "fml:loginwrapper",
|
player.getConnection().write(new LoginPluginMessagePacket(0, "fml:loginwrapper",
|
||||||
Unpooled.wrappedBuffer(player.getConnection().getType() == ForgeConstants.ForgeFML3 ?
|
Unpooled.wrappedBuffer(player.getConnection().getType() == ForgeConstants.ForgeFML3 ?
|
||||||
ForgeHandshakeUtils.emptyModlistFML3 : ForgeHandshakeUtils.emptyModlistFML2)));
|
ForgeHandshakeUtils.emptyModlistFML3 : ForgeHandshakeUtils.emptyModlistFML2)));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package org.adde0109.ambassador.forge.packet;
|
package org.adde0109.ambassador.forge.packet;
|
||||||
|
|
||||||
import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse;
|
import com.velocitypowered.proxy.protocol.packet.LoginPluginResponsePacket;
|
||||||
import com.velocitypowered.proxy.protocol.util.DeferredByteBufHolder;
|
import com.velocitypowered.proxy.protocol.util.DeferredByteBufHolder;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
|
|
@ -15,8 +15,8 @@ public class GenericForgeLoginWrapperPacket extends DeferredByteBufHolder implem
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoginPluginResponse encode() {
|
public LoginPluginResponsePacket encode() {
|
||||||
return new LoginPluginResponse(id, true, content());
|
return new LoginPluginResponsePacket(id, true, content());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package org.adde0109.ambassador.forge.packet;
|
package org.adde0109.ambassador.forge.packet;
|
||||||
|
|
||||||
import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse;
|
import com.velocitypowered.proxy.protocol.packet.LoginPluginResponsePacket;
|
||||||
|
|
||||||
public interface IForgeLoginWrapperPacket {
|
public interface IForgeLoginWrapperPacket {
|
||||||
public LoginPluginResponse encode();
|
public LoginPluginResponsePacket encode();
|
||||||
public int getId();
|
public int getId();
|
||||||
|
|
||||||
public boolean getSuccess();
|
public boolean getSuccess();
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,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.proxy.protocol.ProtocolUtils;
|
import com.velocitypowered.proxy.protocol.ProtocolUtils;
|
||||||
import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse;
|
import com.velocitypowered.proxy.protocol.packet.LoginPluginResponsePacket;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
|
|
||||||
|
|
@ -31,7 +31,7 @@ public class ModListReplyPacket implements IForgeLoginWrapperPacket {
|
||||||
this.success = success;
|
this.success = success;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ModListReplyPacket read(LoginPluginResponse msg) {
|
public static ModListReplyPacket read(LoginPluginResponsePacket msg) {
|
||||||
ByteBuf input = msg.content();
|
ByteBuf input = msg.content();
|
||||||
|
|
||||||
List<String> mods = new ArrayList<>();
|
List<String> mods = new ArrayList<>();
|
||||||
|
|
@ -54,7 +54,7 @@ public class ModListReplyPacket implements IForgeLoginWrapperPacket {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoginPluginResponse encode() {
|
public LoginPluginResponsePacket encode() {
|
||||||
ByteBuf buf = Unpooled.buffer();
|
ByteBuf buf = Unpooled.buffer();
|
||||||
|
|
||||||
ProtocolUtils.writeVarInt(buf, 2);
|
ProtocolUtils.writeVarInt(buf, 2);
|
||||||
|
|
@ -79,7 +79,7 @@ public class ModListReplyPacket implements IForgeLoginWrapperPacket {
|
||||||
ProtocolUtils.writeVarInt(output, buf.readableBytes());
|
ProtocolUtils.writeVarInt(output, buf.readableBytes());
|
||||||
output.writeBytes(buf);
|
output.writeBytes(buf);
|
||||||
|
|
||||||
return new LoginPluginResponse(id, true, output);
|
return new LoginPluginResponsePacket(id, true, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import com.velocitypowered.proxy.protocol.MinecraftPacket;
|
||||||
import com.velocitypowered.proxy.protocol.ProtocolUtils;
|
import com.velocitypowered.proxy.protocol.ProtocolUtils;
|
||||||
import com.velocitypowered.proxy.protocol.StateRegistry;
|
import com.velocitypowered.proxy.protocol.StateRegistry;
|
||||||
import com.velocitypowered.proxy.protocol.netty.MinecraftDecoder;
|
import com.velocitypowered.proxy.protocol.netty.MinecraftDecoder;
|
||||||
import com.velocitypowered.proxy.protocol.packet.AvailableCommands;
|
import com.velocitypowered.proxy.protocol.packet.AvailableCommandsPacket;
|
||||||
import com.velocitypowered.proxy.util.except.QuietRuntimeException;
|
import com.velocitypowered.proxy.util.except.QuietRuntimeException;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
|
@ -43,7 +43,7 @@ public class CommandDecoderErrorCatcher extends ChannelInboundHandlerAdapter {
|
||||||
int packetId = ProtocolUtils.readVarInt(buf);
|
int packetId = ProtocolUtils.readVarInt(buf);
|
||||||
MinecraftPacket packet = registry.createPacket(packetId);
|
MinecraftPacket packet = registry.createPacket(packetId);
|
||||||
buf.readerIndex(originalReaderIndex);
|
buf.readerIndex(originalReaderIndex);
|
||||||
if (packet instanceof AvailableCommands) {
|
if (packet instanceof AvailableCommandsPacket) {
|
||||||
try {
|
try {
|
||||||
((MinecraftDecoder) ctx.pipeline().get(Connections.MINECRAFT_DECODER)).channelRead(ctx, msg);
|
((MinecraftDecoder) ctx.pipeline().get(Connections.MINECRAFT_DECODER)).channelRead(ctx, msg);
|
||||||
} catch (QuietRuntimeException | CorruptedFrameException e) {
|
} catch (QuietRuntimeException | CorruptedFrameException e) {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package org.adde0109.ambassador.forge.pipeline;
|
package org.adde0109.ambassador.forge.pipeline;
|
||||||
|
|
||||||
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.LoginPluginResponsePacket;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.handler.codec.MessageToMessageDecoder;
|
import io.netty.handler.codec.MessageToMessageDecoder;
|
||||||
|
|
@ -11,12 +11,12 @@ import org.adde0109.ambassador.forge.packet.ModListReplyPacket;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ForgeLoginWrapperDecoder extends MessageToMessageDecoder<LoginPluginResponse> {
|
public class ForgeLoginWrapperDecoder extends MessageToMessageDecoder<LoginPluginResponsePacket> {
|
||||||
|
|
||||||
private final List<Integer> loginWrapperIDs = new ArrayList<>();
|
private final List<Integer> loginWrapperIDs = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void decode(ChannelHandlerContext ctx, LoginPluginResponse msg, List<Object> out) throws Exception {
|
protected void decode(ChannelHandlerContext ctx, LoginPluginResponsePacket msg, List<Object> out) throws Exception {
|
||||||
ByteBuf buf = msg.content();
|
ByteBuf buf = msg.content();
|
||||||
if (!loginWrapperIDs.remove((Integer) msg.getId())) {
|
if (!loginWrapperIDs.remove((Integer) msg.getId())) {
|
||||||
out.add(msg.retain());
|
out.add(msg.retain());
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import com.velocitypowered.proxy.connection.ConnectionTypes;
|
||||||
import com.velocitypowered.proxy.connection.MinecraftConnection;
|
import com.velocitypowered.proxy.connection.MinecraftConnection;
|
||||||
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.packet.Handshake;
|
import com.velocitypowered.proxy.protocol.packet.HandshakePacket;
|
||||||
import io.netty.channel.*;
|
import io.netty.channel.*;
|
||||||
import io.netty.handler.codec.MessageToMessageEncoder;
|
import io.netty.handler.codec.MessageToMessageEncoder;
|
||||||
import org.adde0109.ambassador.forge.ForgeConstants;
|
import org.adde0109.ambassador.forge.ForgeConstants;
|
||||||
|
|
@ -16,17 +16,17 @@ import java.util.List;
|
||||||
|
|
||||||
import static com.velocitypowered.proxy.connection.forge.legacy.LegacyForgeConstants.HANDSHAKE_HOSTNAME_TOKEN;
|
import static com.velocitypowered.proxy.connection.forge.legacy.LegacyForgeConstants.HANDSHAKE_HOSTNAME_TOKEN;
|
||||||
|
|
||||||
public class FMLMarkerAdder extends MessageToMessageEncoder<Handshake> {
|
public class FMLMarkerAdder extends MessageToMessageEncoder<HandshakePacket> {
|
||||||
|
|
||||||
final VelocityServer server;
|
final VelocityServer server;
|
||||||
|
|
||||||
public FMLMarkerAdder(VelocityServer server) {
|
public FMLMarkerAdder(VelocityServer server) {
|
||||||
super(Handshake.class);
|
super(HandshakePacket.class);
|
||||||
this.server = server;
|
this.server = server;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void encode(ChannelHandlerContext ctx, Handshake msg, List<Object> out) {
|
protected void encode(ChannelHandlerContext ctx, HandshakePacket msg, List<Object> out) {
|
||||||
MinecraftConnection connection = (MinecraftConnection) ctx.pipeline().get(Connections.HANDLER);
|
MinecraftConnection connection = (MinecraftConnection) ctx.pipeline().get(Connections.HANDLER);
|
||||||
VelocityServerConnection serverConnection = (VelocityServerConnection) connection.getAssociation();
|
VelocityServerConnection serverConnection = (VelocityServerConnection) connection.getAssociation();
|
||||||
PlayerInfoForwarding forwardingMode = server.getConfiguration().getPlayerInfoForwardingMode();
|
PlayerInfoForwarding forwardingMode = server.getConfiguration().getPlayerInfoForwardingMode();
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@ import com.velocitypowered.proxy.connection.MinecraftSessionHandler;
|
||||||
import com.velocitypowered.proxy.connection.backend.*;
|
import com.velocitypowered.proxy.connection.backend.*;
|
||||||
import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
|
import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
|
||||||
import com.velocitypowered.proxy.protocol.MinecraftPacket;
|
import com.velocitypowered.proxy.protocol.MinecraftPacket;
|
||||||
import com.velocitypowered.proxy.protocol.packet.Disconnect;
|
import com.velocitypowered.proxy.protocol.packet.DisconnectPacket;
|
||||||
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessage;
|
import com.velocitypowered.proxy.protocol.packet.LoginPluginMessagePacket;
|
||||||
import com.velocitypowered.proxy.protocol.packet.ServerLoginSuccess;
|
import com.velocitypowered.proxy.protocol.packet.ServerLoginSuccessPacket;
|
||||||
import com.velocitypowered.proxy.util.except.QuietRuntimeException;
|
import com.velocitypowered.proxy.util.except.QuietRuntimeException;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import org.adde0109.ambassador.forge.*;
|
import org.adde0109.ambassador.forge.*;
|
||||||
|
|
@ -26,7 +26,7 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(LoginPluginMessage packet) {
|
public boolean handle(LoginPluginMessagePacket packet) {
|
||||||
if (packet.getChannel().equals("fml:loginwrapper")) {
|
if (packet.getChannel().equals("fml:loginwrapper")) {
|
||||||
if (serverConnection.getPhase() == BackendConnectionPhases.UNKNOWN) {
|
if (serverConnection.getPhase() == BackendConnectionPhases.UNKNOWN) {
|
||||||
VelocityForgeBackendConnectionPhase.NOT_STARTED.handle(serverConnection,serverConnection.getPlayer(),packet);
|
VelocityForgeBackendConnectionPhase.NOT_STARTED.handle(serverConnection,serverConnection.getPlayer(),packet);
|
||||||
|
|
@ -39,7 +39,7 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(ServerLoginSuccess packet) {
|
public boolean handle(ServerLoginSuccessPacket packet) {
|
||||||
if ((serverConnection.getPhase() instanceof VelocityForgeBackendConnectionPhase phase)) {
|
if ((serverConnection.getPhase() instanceof VelocityForgeBackendConnectionPhase phase)) {
|
||||||
phase.onLoginSuccess(serverConnection,serverConnection.getPlayer());
|
phase.onLoginSuccess(serverConnection,serverConnection.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
@ -65,7 +65,7 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(Disconnect packet) {
|
public boolean handle(DisconnectPacket packet) {
|
||||||
if (!serverConnection.getPlayer().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;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import com.velocitypowered.proxy.connection.MinecraftSessionHandler;
|
||||||
import com.velocitypowered.proxy.connection.backend.TransitionSessionHandler;
|
import com.velocitypowered.proxy.connection.backend.TransitionSessionHandler;
|
||||||
import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
|
import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
|
||||||
import com.velocitypowered.proxy.protocol.MinecraftPacket;
|
import com.velocitypowered.proxy.protocol.MinecraftPacket;
|
||||||
import com.velocitypowered.proxy.protocol.packet.JoinGame;
|
import com.velocitypowered.proxy.protocol.packet.JoinGamePacket;
|
||||||
import org.adde0109.ambassador.forge.VelocityForgeClientConnectionPhase;
|
import org.adde0109.ambassador.forge.VelocityForgeClientConnectionPhase;
|
||||||
|
|
||||||
public class ForgePlaySessionHandler implements MinecraftSessionHandler {
|
public class ForgePlaySessionHandler implements MinecraftSessionHandler {
|
||||||
|
|
@ -18,7 +18,7 @@ public class ForgePlaySessionHandler implements MinecraftSessionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(JoinGame packet) {
|
public boolean handle(JoinGamePacket packet) {
|
||||||
if (serverConnection.getPlayer().getPhase() instanceof VelocityForgeClientConnectionPhase clientPhase) {
|
if (serverConnection.getPlayer().getPhase() instanceof VelocityForgeClientConnectionPhase clientPhase) {
|
||||||
serverConnection.getPlayer().setPhase(VelocityForgeClientConnectionPhase.RESETTABLE);
|
serverConnection.getPlayer().setPhase(VelocityForgeClientConnectionPhase.RESETTABLE);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,20 +20,34 @@ public class FML2CRPMResetCompleteDecoder extends ChannelInboundHandlerAdapter {
|
||||||
|
|
||||||
int originalReaderIndex = buf.readerIndex();
|
int originalReaderIndex = buf.readerIndex();
|
||||||
int packetId = ProtocolUtils.readVarInt(buf);
|
int packetId = ProtocolUtils.readVarInt(buf);
|
||||||
if (packetId == 0x02 && buf.readableBytes() > 1) {
|
if (packetId != 0x02) {
|
||||||
|
buf.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (buf.readableBytes() > 1) {
|
||||||
try {
|
try {
|
||||||
int id = ProtocolUtils.readVarInt(buf);
|
int id = ProtocolUtils.readVarInt(buf);
|
||||||
boolean success = buf.readBoolean();
|
boolean success = buf.readBoolean();
|
||||||
if (id == 98) {
|
if (id == 98) {
|
||||||
try {
|
try {
|
||||||
IForgeLoginWrapperPacket packet = new GenericForgeLoginWrapperPacket(Unpooled.EMPTY_BUFFER, id, success);
|
int remainingBytes = buf.readableBytes();
|
||||||
ctx.fireChannelRead(packet);
|
if (remainingBytes > 0) {
|
||||||
} finally {
|
ByteBuf remainingData = Unpooled.buffer(remainingBytes);
|
||||||
buf.release();
|
remainingData.writeBytes(buf, remainingBytes);
|
||||||
|
IForgeLoginWrapperPacket packet = new GenericForgeLoginWrapperPacket(remainingData, id, success);
|
||||||
|
ctx.fireChannelRead(packet);
|
||||||
|
} else {
|
||||||
|
IForgeLoginWrapperPacket packet = new GenericForgeLoginWrapperPacket(Unpooled.EMPTY_BUFFER, id, success);
|
||||||
|
ctx.fireChannelRead(packet);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("[Ambassador] Error creating FML2CRPM packet: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
buf.release();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (Exception ignored) {}
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
buf.readerIndex(originalReaderIndex);
|
buf.readerIndex(originalReaderIndex);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
package org.adde0109.ambassador.velocity.client;
|
package org.adde0109.ambassador.velocity.client;
|
||||||
|
|
||||||
import com.velocitypowered.proxy.protocol.packet.ServerLoginSuccess;
|
import com.velocitypowered.proxy.protocol.packet.ServerLoginSuccessPacket;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.channel.ChannelOutboundHandlerAdapter;
|
import io.netty.channel.ChannelOutboundHandlerAdapter;
|
||||||
import io.netty.channel.ChannelPromise;
|
import io.netty.channel.ChannelPromise;
|
||||||
|
|
||||||
public class OutboundSuccessHolder extends ChannelOutboundHandlerAdapter {
|
public class OutboundSuccessHolder extends ChannelOutboundHandlerAdapter {
|
||||||
|
|
||||||
private ServerLoginSuccess packet;
|
private ServerLoginSuccessPacket packet;
|
||||||
private ChannelHandlerContext ctx;
|
private ChannelHandlerContext ctx;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -17,7 +17,7 @@ public class OutboundSuccessHolder 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 {
|
||||||
if ((msg instanceof ServerLoginSuccess packet)) {
|
if ((msg instanceof ServerLoginSuccessPacket packet)) {
|
||||||
this.packet = packet;
|
this.packet = packet;
|
||||||
} else {
|
} else {
|
||||||
ctx.write(msg, promise);
|
ctx.write(msg, promise);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import com.velocitypowered.proxy.connection.client.HandshakeSessionHandler;
|
||||||
import com.velocitypowered.proxy.network.Connections;
|
import com.velocitypowered.proxy.network.Connections;
|
||||||
import com.velocitypowered.proxy.protocol.MinecraftPacket;
|
import com.velocitypowered.proxy.protocol.MinecraftPacket;
|
||||||
import com.velocitypowered.proxy.protocol.StateRegistry;
|
import com.velocitypowered.proxy.protocol.StateRegistry;
|
||||||
import com.velocitypowered.proxy.protocol.packet.Handshake;
|
import com.velocitypowered.proxy.protocol.packet.HandshakePacket;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import org.adde0109.ambassador.forge.ForgeConstants;
|
import org.adde0109.ambassador.forge.ForgeConstants;
|
||||||
|
|
||||||
|
|
@ -22,7 +22,7 @@ public class VelocityHandshakeSessionHandler extends HandshakeSessionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(Handshake handshake) {
|
public boolean handle(HandshakePacket handshake) {
|
||||||
handshake.handle(original);
|
handshake.handle(original);
|
||||||
if (connection.getType() == ConnectionTypes.VANILLA) {
|
if (connection.getType() == ConnectionTypes.VANILLA) {
|
||||||
final String[] markerSplit = handshake.getServerAddress().split("\0");
|
final String[] markerSplit = handshake.getServerAddress().split("\0");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user