From 8937cc8182570442c7f93aa554d7acff900f3322 Mon Sep 17 00:00:00 2001 From: Adrian Bergqvist Date: Sun, 26 Mar 2023 21:40:28 +0200 Subject: [PATCH] Available Commands via plugin message --- build.gradle.kts | 2 +- .../org/adde0109/ambassador/Ambassador.java | 2 +- .../VelocityForgeBackendConnectionPhase.java | 17 +++++++++++++++++ .../VelocityForgeClientConnectionPhase.java | 3 ++- .../client/FML2CRPMResetCompleteDecoder.java | 4 +++- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d80a4ac..b3fac45 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "org.adde0109" -version = "1.3.0-beta-rc1" +version = "1.3.0-beta" repositories { mavenCentral() diff --git a/src/main/java/org/adde0109/ambassador/Ambassador.java b/src/main/java/org/adde0109/ambassador/Ambassador.java index a83cecd..50d7f9c 100644 --- a/src/main/java/org/adde0109/ambassador/Ambassador.java +++ b/src/main/java/org/adde0109/ambassador/Ambassador.java @@ -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.proxy.protocol.packet.brigadier.ArgumentIdentifier.mapSet; -@Plugin(id = "ambassador", name = "Ambassador", version = "1.2.0-beta", authors = {"adde0109"}) +@Plugin(id = "ambassador", name = "Ambassador", version = "1.3.0-beta", authors = {"adde0109"}) public class Ambassador { public ProxyServer server; diff --git a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeBackendConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeBackendConnectionPhase.java index 9541ce7..301b5d0 100644 --- a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeBackendConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeBackendConnectionPhase.java @@ -4,7 +4,11 @@ import com.velocitypowered.proxy.connection.MinecraftConnection; import com.velocitypowered.proxy.connection.backend.BackendConnectionPhase; import com.velocitypowered.proxy.connection.backend.VelocityServerConnection; import com.velocitypowered.proxy.connection.client.ConnectedPlayer; +import com.velocitypowered.proxy.protocol.MinecraftPacket; +import com.velocitypowered.proxy.protocol.ProtocolUtils; +import com.velocitypowered.proxy.protocol.packet.AvailableCommands; import com.velocitypowered.proxy.protocol.packet.LoginPluginMessage; +import com.velocitypowered.proxy.protocol.packet.PluginMessage; import org.adde0109.ambassador.forge.pipeline.ForgeLoginWrapperDecoder; public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhase { @@ -77,8 +81,21 @@ public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhas return phaseToTransitionTo; } + @Override + public boolean handle(VelocityServerConnection server, ConnectedPlayer player, PluginMessage message) { + if (message.getChannel().equals("ambassador:commands")) { + AvailableCommands packet = new AvailableCommands(); + packet.decode(message.content(), ProtocolUtils.Direction.CLIENTBOUND,server.getConnection().getProtocolVersion()); + server.getConnection().getSessionHandler().handle(packet); + return true; + } + return false; + } + public boolean consideredComplete() { return false; } + + } diff --git a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java index 6025c3a..94066c6 100644 --- a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java @@ -14,6 +14,7 @@ import io.netty.buffer.Unpooled; import org.adde0109.ambassador.Ambassador; import org.adde0109.ambassador.forge.packet.IForgeLoginWrapperPacket; import org.adde0109.ambassador.forge.packet.ModListReplyPacket; +import org.adde0109.ambassador.forge.pipeline.ForgeLoginWrapperDecoder; import org.adde0109.ambassador.velocity.client.FML2CRPMResetCompleteDecoder; import org.adde0109.ambassador.velocity.client.OutboundForgeHandshakeHolder; import org.adde0109.ambassador.velocity.client.OutboundSuccessHolder; @@ -50,7 +51,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase connection.getChannel().pipeline().addBefore(Connections.MINECRAFT_DECODER, ForgeConstants.RESET_LISTENER,new FML2CRPMResetCompleteDecoder()); connection.getChannel().pipeline().addAfter(Connections.MINECRAFT_ENCODER, ForgeConstants.FORGE_HANDSHAKE_HOLDER,new OutboundForgeHandshakeHolder()); - + ((ForgeLoginWrapperDecoder) connection.getChannel().pipeline().get(ForgeConstants.FORGE_HANDSHAKE_DECODER)).registerLoginWrapperID(98); connection.write(new PluginMessage("fml:handshake", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generatePluginResetPacket()))); diff --git a/src/main/java/org/adde0109/ambassador/velocity/client/FML2CRPMResetCompleteDecoder.java b/src/main/java/org/adde0109/ambassador/velocity/client/FML2CRPMResetCompleteDecoder.java index d68ef16..732bcaa 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/client/FML2CRPMResetCompleteDecoder.java +++ b/src/main/java/org/adde0109/ambassador/velocity/client/FML2CRPMResetCompleteDecoder.java @@ -6,6 +6,8 @@ import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import org.adde0109.ambassador.forge.packet.GenericForgeLoginWrapperPacket; +import org.adde0109.ambassador.forge.packet.IForgeLoginWrapperPacket; public class FML2CRPMResetCompleteDecoder extends ChannelInboundHandlerAdapter { @@ -25,7 +27,7 @@ public class FML2CRPMResetCompleteDecoder extends ChannelInboundHandlerAdapter { boolean success = buf.readBoolean(); if (id == 98) { try { - MinecraftPacket packet = new LoginPluginResponse(id,success,buf.readRetainedSlice(buf.readableBytes())); + IForgeLoginWrapperPacket packet = new GenericForgeLoginWrapperPacket(buf, id); ctx.fireChannelRead(packet); } finally { buf.release();