+ * Date: 19.11.2023
+ *
+ * @author Rubenicos
+ */
+@Getter
+@Setter
+@Accessors(fluent = true)
+@AllArgsConstructor
+@ToString
+public abstract class AbstractPacketEvent {
+
+ protected final ProtocolizePlayer player;
+ protected final Object server;
+ protected T packet;
+ protected boolean cancelled;
+
+ /**
+ * The protocolize player instance.
+ *
+ * @return The player instance or null if Protocolize was unable to track down the player
+ * during early communication phases like HANDSHAKE or STATUS.
+ */
+ public ProtocolizePlayer player() {
+ return player;
+ }
+
+ /**
+ * The platform dependent server info instance.
+ *
+ * @param The type of the server info
+ * @return The platform dependent server info instance or null if Protocolize was unable to track down the server
+ * during early communication phases like HANDSHAKE or STATUS.
+ */
+ public S server() {
+ return (S) server;
+ }
+}
diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/AbstractPacketListener.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/AbstractPacketListener.java
index 7b11daf9..95edfa3b 100644
--- a/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/AbstractPacketListener.java
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/AbstractPacketListener.java
@@ -2,8 +2,11 @@
import dev.simplix.protocolize.api.Direction;
import lombok.Getter;
+import lombok.Setter;
import lombok.experimental.Accessors;
+import java.util.function.Consumer;
+
/**
* Used for listening to incoming and outgoing packets.
*
@@ -13,6 +16,7 @@
* @author Exceptionflug
*/
@Getter
+@Setter
@Accessors(fluent = true)
public abstract class AbstractPacketListener {
@@ -20,6 +24,11 @@ public abstract class AbstractPacketListener {
private final Direction direction;
private final int priority;
+ private Consumer> onReceive;
+ private Consumer> onSend;
+
+ private transient boolean registered;
+
/**
* Creates an instance of your listener.
*
@@ -38,13 +47,33 @@ protected AbstractPacketListener(Class type, Direction direction, int priorit
*
* @param event The event containing information about the packet
*/
- public abstract void packetReceive(PacketReceiveEvent event);
+ public void packetReceive(PacketReceiveEvent event) {
+ if (onReceive == null) {
+ packetEvent(event);
+ } else {
+ onReceive.accept(event);
+ }
+ }
/**
* Gets called when a packet has been processed by the Protocolize encoder handler.
*
* @param event The event containing information about the packet
*/
- public abstract void packetSend(PacketSendEvent event);
+ public void packetSend(PacketSendEvent event) {
+ if (onSend == null) {
+ packetEvent(event);
+ } else {
+ onSend.accept(event);
+ }
+ }
+ /**
+ * Gets called when a packet has been processed by any Protocolize handler.
+ *
+ * @param event The event containing information about the packet
+ */
+ public void packetEvent(AbstractPacketEvent event) {
+ // empty default method
+ }
}
diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/PacketReceiveEvent.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/PacketReceiveEvent.java
index 3dfc8f52..74254652 100644
--- a/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/PacketReceiveEvent.java
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/PacketReceiveEvent.java
@@ -1,7 +1,6 @@
package dev.simplix.protocolize.api.listener;
import dev.simplix.protocolize.api.player.ProtocolizePlayer;
-import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@@ -17,35 +16,14 @@
@Getter
@Setter
@Accessors(fluent = true)
-@AllArgsConstructor
@ToString
-public class PacketReceiveEvent {
+public class PacketReceiveEvent extends AbstractPacketEvent {
- private final ProtocolizePlayer player;
- private final Object server;
- private T packet;
- private boolean cancelled;
private boolean dirty;
- /**
- * The platform {@link ProtocolizePlayer} instance.
- *
- * @return The player instance or null if Protocolize was unable to track down the player
- * during early communication phases like HANDSHAKE or STATUS.
- */
- public ProtocolizePlayer player() {
- return player;
- }
-
- /**
- * The platform dependent server info instance.
- *
- * @param The type of the server info
- * @return The platform dependent server info instance or null if Protocolize was unable to track down the server
- * during early communication phases like HANDSHAKE or STATUS.
- */
- public S server() {
- return (S) server;
+ public PacketReceiveEvent(ProtocolizePlayer player, Object server, T packet, boolean cancelled, boolean dirty) {
+ super(player, server, packet, cancelled);
+ this.dirty = dirty;
}
/**
diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/PacketSendEvent.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/PacketSendEvent.java
index 3ba6950e..86e97776 100644
--- a/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/PacketSendEvent.java
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/PacketSendEvent.java
@@ -1,7 +1,6 @@
package dev.simplix.protocolize.api.listener;
import dev.simplix.protocolize.api.player.ProtocolizePlayer;
-import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@@ -17,34 +16,11 @@
@Getter
@Setter
@Accessors(fluent = true)
-@AllArgsConstructor
@ToString
-public class PacketSendEvent {
+public class PacketSendEvent extends AbstractPacketEvent {
- private final ProtocolizePlayer player;
- private final Object server;
- private T packet;
- private boolean cancelled;
-
- /**
- * The protocolize player instance.
- *
- * @return The player instance or null if Protocolize was unable to track down the player
- * during early communication phases like HANDSHAKE or STATUS.
- */
- public ProtocolizePlayer player() {
- return player;
- }
-
- /**
- * The platform dependent server info instance.
- *
- * @param The type of the server info
- * @return The platform dependent server info instance or null if Protocolize was unable to track down the server
- * during early communication phases like HANDSHAKE or STATUS.
- */
- public S server() {
- return (S) server;
+ public PacketSendEvent(ProtocolizePlayer player, Object server, T packet, boolean cancelled) {
+ super(player, server, packet, cancelled);
}
/**
diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/providers/AbstractPacketListenerProvider.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/providers/AbstractPacketListenerProvider.java
new file mode 100644
index 00000000..c421b77a
--- /dev/null
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/providers/AbstractPacketListenerProvider.java
@@ -0,0 +1,66 @@
+package dev.simplix.protocolize.api.providers;
+
+import com.google.common.base.Preconditions;
+import dev.simplix.protocolize.api.listener.AbstractPacketListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Date: 19.11.2023
+ *
+ * @author Rubenicos
+ */
+public abstract class AbstractPacketListenerProvider implements PacketListenerProvider {
+
+ protected final List> listeners = new ArrayList<>();
+
+ @Override
+ public > A registerListener(A listener) {
+ Preconditions.checkNotNull(listener, "The listener cannot be null!");
+ if (listeners.contains(listener)) {
+ throw new IllegalStateException("Listener already registered.");
+ }
+ addListener(listener);
+ return listener;
+ }
+
+ protected void addListener(AbstractPacketListener> listener) {
+ listeners.add(listener);
+ listener.registered(true);
+ }
+
+ @Override
+ public > A unregisterListener(A listener) throws IllegalArgumentException {
+ if (listeners.contains(listener)) {
+ listeners.remove(listener);
+ listener.registered(false);
+ return listener;
+ } else {
+ throw new IllegalArgumentException("Did not find " + listener.getClass().getName() + " as a registered listener");
+ }
+ }
+
+ @Override
+ public String debugInformation() {
+ StringBuilder builder = new StringBuilder("Generated export of " + getClass().getName() + ":\n\n");
+ for (AbstractPacketListener> listener : listeners) {
+ builder.append(" - ").append(listener.getClass().getName()).append(" listening for ")
+ .append(listener.type().getName()).append(" on ").append(listener.direction().name())
+ .append(" with priority ").append(listener.priority()).append("\n");
+ }
+ return builder.toString();
+ }
+
+ @Override
+ public List> listenersForType(Class> clazz) {
+ Preconditions.checkNotNull(clazz, "The clazz cannot be null!");
+ List> out = new ArrayList<>();
+ for (AbstractPacketListener> listener : listeners) {
+ if (listener.type().equals(clazz)) {
+ out.add(listener);
+ }
+ }
+ return out;
+ }
+}
diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/providers/PacketListenerProvider.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/providers/PacketListenerProvider.java
index 25470af8..973589ce 100644
--- a/protocolize-api/src/main/java/dev/simplix/protocolize/api/providers/PacketListenerProvider.java
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/providers/PacketListenerProvider.java
@@ -1,5 +1,6 @@
package dev.simplix.protocolize.api.providers;
+import dev.simplix.protocolize.api.Direction;
import dev.simplix.protocolize.api.listener.AbstractPacketListener;
import java.util.List;
@@ -11,9 +12,17 @@
*/
public interface PacketListenerProvider {
- void registerListener(AbstractPacketListener> listener);
+ default AbstractPacketListener registerListener(Class packet, Direction direction) {
+ return registerListener(packet, direction, 0);
+ }
- void unregisterListener(AbstractPacketListener> listener) throws IllegalArgumentException;
+ default AbstractPacketListener registerListener(Class packet, Direction direction, int priority) {
+ return registerListener(new AbstractPacketListener(packet, direction, priority) { });
+ }
+
+ > A registerListener(A listener);
+
+ > A unregisterListener(A listener) throws IllegalArgumentException;
List> listenersForType(Class> type);
diff --git a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/providers/BungeeCordPacketListenerProvider.java b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/providers/BungeeCordPacketListenerProvider.java
index 738f7843..1cdb6175 100644
--- a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/providers/BungeeCordPacketListenerProvider.java
+++ b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/providers/BungeeCordPacketListenerProvider.java
@@ -7,7 +7,7 @@
import dev.simplix.protocolize.api.listener.PacketReceiveEvent;
import dev.simplix.protocolize.api.listener.PacketSendEvent;
import dev.simplix.protocolize.api.packet.AbstractPacket;
-import dev.simplix.protocolize.api.providers.PacketListenerProvider;
+import dev.simplix.protocolize.api.providers.AbstractPacketListenerProvider;
import dev.simplix.protocolize.api.providers.ProtocolizePlayerProvider;
import dev.simplix.protocolize.bungee.packet.BungeeCordProtocolizePacket;
import dev.simplix.protocolize.bungee.util.ReflectionUtil;
@@ -28,41 +28,16 @@
*
* @author Exceptionflug
*/
-public final class BungeeCordPacketListenerProvider implements PacketListenerProvider {
+public final class BungeeCordPacketListenerProvider extends AbstractPacketListenerProvider {
private static final ProtocolizePlayerProvider PLAYER_PROVIDER = Protocolize.playerProvider();
- private final List> listeners = new ArrayList<>();
@Override
- public void registerListener(AbstractPacketListener> listener) {
- Preconditions.checkNotNull(listener, "The listener cannot be null!");
- if (listeners.contains(listener)) {
- throw new IllegalStateException("Listener already registered.");
- }
+ protected void addListener(AbstractPacketListener> listener) {
if (!AbstractPacket.class.isAssignableFrom(listener.type()) && !DefinedPacket.class.isAssignableFrom(listener.type())) {
throw new IllegalStateException("The packet type is not a valid packet type. Allowed: AbstractPacket and DefinedPacket");
}
- listeners.add(listener);
- }
-
- @Override
- public void unregisterListener(AbstractPacketListener> listener) throws IllegalArgumentException {
- if (listeners.contains(listener)) {
- listeners.remove(listener);
- } else {
- throw new IllegalArgumentException("Did not find " + listener.getClass().getName() + " as a registered listener");
- }
- }
-
- @Override
- public String debugInformation() {
- StringBuilder builder = new StringBuilder("Generated export of " + getClass().getName() + ":\n\n");
- for (AbstractPacketListener> listener : listeners) {
- builder.append(" - ").append(listener.getClass().getName()).append(" listening for ")
- .append(listener.type().getName()).append(" on ").append(listener.direction().name())
- .append(" with priority ").append(listener.priority()).append("\n");
- }
- return builder.toString();
+ super.addListener(listener);
}
/**
@@ -216,16 +191,4 @@ private ProxiedPlayer player(Connection connection) {
return null;
}
- @Override
- public List> listenersForType(Class> clazz) {
- Preconditions.checkNotNull(clazz, "The clazz cannot be null!");
- List> out = new ArrayList<>();
- for (AbstractPacketListener> listener : listeners) {
- if (listener.type().equals(clazz)) {
- out.add(listener);
- }
- }
- return out;
- }
-
}
diff --git a/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/providers/VelocityPacketListenerProvider.java b/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/providers/VelocityPacketListenerProvider.java
index e5d96d0b..94dfbe38 100644
--- a/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/providers/VelocityPacketListenerProvider.java
+++ b/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/providers/VelocityPacketListenerProvider.java
@@ -15,7 +15,7 @@
import dev.simplix.protocolize.api.listener.PacketReceiveEvent;
import dev.simplix.protocolize.api.listener.PacketSendEvent;
import dev.simplix.protocolize.api.packet.AbstractPacket;
-import dev.simplix.protocolize.api.providers.PacketListenerProvider;
+import dev.simplix.protocolize.api.providers.AbstractPacketListenerProvider;
import dev.simplix.protocolize.api.providers.ProtocolRegistrationProvider;
import dev.simplix.protocolize.api.providers.ProtocolizePlayerProvider;
import dev.simplix.protocolize.api.util.ReflectionUtil;
@@ -36,11 +36,10 @@
* @author Exceptionflug
*/
@Slf4j
-public final class VelocityPacketListenerProvider implements PacketListenerProvider {
+public final class VelocityPacketListenerProvider extends AbstractPacketListenerProvider {
private static final ProtocolizePlayerProvider PLAYER_PROVIDER = Protocolize.playerProvider();
private final ProtocolRegistrationProvider registrationProvider = Protocolize.protocolRegistration();
- private final List> listeners = new ArrayList<>();
private Field packetIdToSupplierField;
private Field serverboundField;
@@ -63,11 +62,7 @@ public final class VelocityPacketListenerProvider implements PacketListenerProvi
}
@Override
- public void registerListener(AbstractPacketListener> listener) {
- Preconditions.checkNotNull(listener, "The listener cannot be null!");
- if (listeners.contains(listener)) {
- throw new IllegalStateException("Listener already registered.");
- }
+ protected void addListener(AbstractPacketListener> listener) {
if (!AbstractPacket.class.isAssignableFrom(listener.type()) && !MinecraftPacket.class.isAssignableFrom(listener.type())) {
throw new IllegalStateException("The packet type is not a valid packet type. Allowed: AbstractPacket and MinecraftPacket");
}
@@ -78,7 +73,7 @@ public void registerListener(AbstractPacketListener> listener) {
log.error("Unable to register additional suppliers for velocity packet " + listener.type().getName(), e);
}
}
- listeners.add(listener);
+ super.addListener(listener);
}
private void ensureAlsoEncode(Class extends MinecraftPacket> type) throws Exception {
@@ -118,26 +113,6 @@ private void addDefaultSupplier(StateRegistry.PacketRegistry.ProtocolRegistry re
});
}
- @Override
- public void unregisterListener(AbstractPacketListener> listener) throws IllegalArgumentException {
- if (listeners.contains(listener)) {
- listeners.remove(listener);
- } else {
- throw new IllegalArgumentException("Did not find " + listener.getClass().getName() + " as a registered listener");
- }
- }
-
- @Override
- public String debugInformation() {
- StringBuilder builder = new StringBuilder("Generated export of " + getClass().getName() + ":\n\n");
- for (AbstractPacketListener> listener : listeners) {
- builder.append(" - ").append(listener.getClass().getName()).append(" listening for ")
- .append(listener.type().getName()).append(" on ").append(listener.direction().name())
- .append(" with priority ").append(listener.priority()).append("\n");
- }
- return builder.toString();
- }
-
public Map.Entry handleInboundPacket(MinecraftPacket packet, ServerConnection serverConnection, InboundConnection connection) {
Preconditions.checkNotNull(packet, "Packet cannot be null");
boolean sentByServer = serverConnection != null;
@@ -189,18 +164,6 @@ private PacketReceiveEvent> createReceiveEvent(InboundConnection connection, S
}
}
- @Override
- public List> listenersForType(Class> clazz) {
- Preconditions.checkNotNull(clazz, "The clazz cannot be null!");
- List> out = new ArrayList<>();
- for (AbstractPacketListener> listener : listeners) {
- if (listener.type().equals(clazz)) {
- out.add(listener);
- }
- }
- return out;
- }
-
public MinecraftPacket handleOutboundPacket(MinecraftPacket packet, InboundConnection inboundConnection, ServerConnection serverConnection) {
Preconditions.checkNotNull(packet, "Packet cannot be null");
Class> clazz;
From a90ea348d03fe9f83fe5d467a09ce452a60f603f Mon Sep 17 00:00:00 2001
From: Rubenicos <44579213+Rubenicos@users.noreply.github.com>
Date: Sun, 19 Nov 2023 09:44:08 -0600
Subject: [PATCH 2/7] Add protocol type to sending packets
---
.../api/player/ProtocolizePlayer.java | 16 +++++++++++-----
.../player/BungeeCordProtocolizePlayer.java | 8 ++++----
...nitialInboundConnectionProtocolizePlayer.java | 9 +++++++--
.../player/VelocityProtocolizePlayer.java | 8 ++++----
4 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/player/ProtocolizePlayer.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/player/ProtocolizePlayer.java
index b6c64f02..5b31f0d2 100644
--- a/protocolize-api/src/main/java/dev/simplix/protocolize/api/player/ProtocolizePlayer.java
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/player/ProtocolizePlayer.java
@@ -1,9 +1,7 @@
package dev.simplix.protocolize.api.player;
import com.google.common.collect.Lists;
-import dev.simplix.protocolize.api.Location;
-import dev.simplix.protocolize.api.PlayerInteract;
-import dev.simplix.protocolize.api.SoundCategory;
+import dev.simplix.protocolize.api.*;
import dev.simplix.protocolize.api.inventory.Inventory;
import dev.simplix.protocolize.api.inventory.PlayerInventory;
import dev.simplix.protocolize.api.item.BaseItemStack;
@@ -28,9 +26,17 @@ public interface ProtocolizePlayer {
PlayerInventory proxyInventory();
- void sendPacket(Object packet);
+ default void sendPacket(Object packet) {
+ sendPacket(packet, Protocol.PLAY);
+ }
+
+ void sendPacket(Object packet, Protocol protocol);
+
+ default void sendPacketToServer(Object packet) {
+ sendPacketToServer(packet, Protocol.PLAY);
+ }
- void sendPacketToServer(Object packet);
+ void sendPacketToServer(Object packet, Protocol protocol);
Map registeredInventories();
diff --git a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/player/BungeeCordProtocolizePlayer.java b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/player/BungeeCordProtocolizePlayer.java
index ff86d7ae..035ca38e 100644
--- a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/player/BungeeCordProtocolizePlayer.java
+++ b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/player/BungeeCordProtocolizePlayer.java
@@ -45,10 +45,10 @@ public BungeeCordProtocolizePlayer(UUID uniqueId) {
}
@Override
- public void sendPacket(Object packet) {
+ public void sendPacket(Object packet, Protocol protocol) {
if (packet instanceof AbstractPacket) {
BungeeCordProtocolizePacket pack = (BungeeCordProtocolizePacket) REGISTRATION_PROVIDER.createPacket((Class extends AbstractPacket>) packet.getClass(),
- Protocol.PLAY, PacketDirection.CLIENTBOUND, protocolVersion());
+ protocol, PacketDirection.CLIENTBOUND, protocolVersion());
pack.wrapper((AbstractPacket) packet);
packet = pack;
}
@@ -59,10 +59,10 @@ public void sendPacket(Object packet) {
}
@Override
- public void sendPacketToServer(Object packet) {
+ public void sendPacketToServer(Object packet, Protocol protocol) {
if (packet instanceof AbstractPacket) {
BungeeCordProtocolizePacket pack = (BungeeCordProtocolizePacket) REGISTRATION_PROVIDER.createPacket((Class extends AbstractPacket>) packet.getClass(),
- Protocol.PLAY, PacketDirection.SERVERBOUND, protocolVersion());
+ protocol, PacketDirection.SERVERBOUND, protocolVersion());
pack.wrapper((AbstractPacket) packet);
packet = pack;
}
diff --git a/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/player/InitialInboundConnectionProtocolizePlayer.java b/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/player/InitialInboundConnectionProtocolizePlayer.java
index d56cd5a7..cc6c5cbe 100644
--- a/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/player/InitialInboundConnectionProtocolizePlayer.java
+++ b/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/player/InitialInboundConnectionProtocolizePlayer.java
@@ -50,9 +50,14 @@ public PlayerInventory proxyInventory() {
@Override
public void sendPacket(Object packet) {
+ sendPacket(packet, Protocol.STATUS);
+ }
+
+ @Override
+ public void sendPacket(Object packet, Protocol protocol) {
if (packet instanceof AbstractPacket) {
VelocityProtocolizePacket pack = (VelocityProtocolizePacket) REGISTRATION_PROVIDER.createPacket((Class extends AbstractPacket>) packet.getClass(),
- Protocol.STATUS, PacketDirection.CLIENTBOUND, protocolVersion());
+ protocol, PacketDirection.CLIENTBOUND, protocolVersion());
if (pack == null) {
throw new IllegalStateException("Cannot send " + packet.getClass().getName() + " to players with protocol version " + protocolVersion());
}
@@ -69,7 +74,7 @@ public void sendPacket(Object packet) {
}
@Override
- public void sendPacketToServer(Object packet) {
+ public void sendPacketToServer(Object packet, Protocol protocol) {
throw new IllegalStateException("Not possible for initial inbound connections");
}
diff --git a/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/player/VelocityProtocolizePlayer.java b/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/player/VelocityProtocolizePlayer.java
index 2392ffec..c18b6eda 100644
--- a/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/player/VelocityProtocolizePlayer.java
+++ b/protocolize-velocity/src/main/java/dev/simplix/protocolize/velocity/player/VelocityProtocolizePlayer.java
@@ -46,10 +46,10 @@ public VelocityProtocolizePlayer(ProxyServer proxyServer, UUID uniqueId) {
}
@Override
- public void sendPacket(Object packet) {
+ public void sendPacket(Object packet, Protocol protocol) {
if (packet instanceof AbstractPacket) {
VelocityProtocolizePacket pack = (VelocityProtocolizePacket) REGISTRATION_PROVIDER.createPacket((Class extends AbstractPacket>) packet.getClass(),
- Protocol.PLAY, PacketDirection.CLIENTBOUND, protocolVersion());
+ protocol, PacketDirection.CLIENTBOUND, protocolVersion());
if (pack == null) {
throw new IllegalStateException("Cannot send " + packet.getClass().getName() + " to players with protocol version " + protocolVersion());
}
@@ -63,10 +63,10 @@ public void sendPacket(Object packet) {
}
@Override
- public void sendPacketToServer(Object packet) {
+ public void sendPacketToServer(Object packet, Protocol protocol) {
if (packet instanceof AbstractPacket) {
VelocityProtocolizePacket pack = (VelocityProtocolizePacket) REGISTRATION_PROVIDER.createPacket((Class extends AbstractPacket>) packet.getClass(),
- Protocol.PLAY, PacketDirection.SERVERBOUND, protocolVersion());
+ protocol, PacketDirection.SERVERBOUND, protocolVersion());
if (pack == null) {
throw new IllegalStateException("Cannot send " + packet.getClass().getName() + " to players with protocol version " + protocolVersion());
}
From 4c42e6de9b23f44884e3d887d6bb7c833267bc0b Mon Sep 17 00:00:00 2001
From: Rubenicos <44579213+Rubenicos@users.noreply.github.com>
Date: Sun, 19 Nov 2023 11:11:30 -0600
Subject: [PATCH 3/7] Add player protocol getter
---
.../api/player/ProtocolizePlayer.java | 4 ++
.../ProtocolizeDecoderChannelHandler.java | 19 +------
.../player/BungeeCordProtocolizePlayer.java | 13 +++++
...ungeeCordProtocolRegistrationProvider.java | 26 ++--------
.../bungee/util/ConversionUtils.java | 47 +++++++++++++++++
.../bungee/util/ReflectionUtil.java | 46 +++++++++++++----
...ialInboundConnectionProtocolizePlayer.java | 30 +++++++++++
.../player/VelocityProtocolizePlayer.java | 50 +++++++++++++++++++
.../VelocityProtocolRegistrationProvider.java | 39 +++------------
.../velocity/util/ConversionUtils.java | 18 ++++++-
10 files changed, 210 insertions(+), 82 deletions(-)
create mode 100644 protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/util/ConversionUtils.java
diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/player/ProtocolizePlayer.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/player/ProtocolizePlayer.java
index 5b31f0d2..d8b7aaa1 100644
--- a/protocolize-api/src/main/java/dev/simplix/protocolize/api/player/ProtocolizePlayer.java
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/player/ProtocolizePlayer.java
@@ -44,6 +44,10 @@ default void sendPacketToServer(Object packet) {
int protocolVersion();
+ Protocol decodeProtocol();
+
+ Protocol encodeProtocol();
+
T handle();
Location location();
diff --git a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/netty/ProtocolizeDecoderChannelHandler.java b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/netty/ProtocolizeDecoderChannelHandler.java
index f7e0e8cf..93bcbce0 100644
--- a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/netty/ProtocolizeDecoderChannelHandler.java
+++ b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/netty/ProtocolizeDecoderChannelHandler.java
@@ -7,6 +7,7 @@
import dev.simplix.protocolize.bungee.ProtocolizePlugin;
import dev.simplix.protocolize.bungee.providers.BungeeCordPacketListenerProvider;
import dev.simplix.protocolize.bungee.util.CancelSendSignal;
+import dev.simplix.protocolize.bungee.util.ConversionUtils;
import dev.simplix.protocolize.bungee.util.ReflectionUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
@@ -86,7 +87,7 @@ protected void decode(final ChannelHandlerContext ctx, final PacketWrapper msg,
try {
// Try packet rewrite
final ByteBuf buf = Unpooled.directBuffer();
- int packetID = REGISTRATION_PROVIDER.packetId(packet, protocolizeProtocol(),
+ int packetID = REGISTRATION_PROVIDER.packetId(packet, ConversionUtils.protocolizeProtocol(protocol),
direction == Direction.TO_CLIENT ? PacketDirection.CLIENTBOUND : PacketDirection.SERVERBOUND,
protocolVersion);
if (packetID != -1) {
@@ -107,22 +108,6 @@ protected void decode(final ChannelHandlerContext ctx, final PacketWrapper msg,
}
}
- private dev.simplix.protocolize.api.Protocol protocolizeProtocol() {
- switch (protocol) {
- case GAME:
- return dev.simplix.protocolize.api.Protocol.PLAY;
- case LOGIN:
- return dev.simplix.protocolize.api.Protocol.LOGIN;
- case STATUS:
- return dev.simplix.protocolize.api.Protocol.STATUS;
- case HANDSHAKE:
- return dev.simplix.protocolize.api.Protocol.HANDSHAKE;
- case CONFIGURATION:
- return dev.simplix.protocolize.api.Protocol.CONFIGURATION;
- }
- return null;
- }
-
@Override
public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) throws Exception {
if (cause.getClass().equals(CancelSendSignal.INSTANCE.getClass()))
diff --git a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/player/BungeeCordProtocolizePlayer.java b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/player/BungeeCordProtocolizePlayer.java
index 035ca38e..4caaa3aa 100644
--- a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/player/BungeeCordProtocolizePlayer.java
+++ b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/player/BungeeCordProtocolizePlayer.java
@@ -7,6 +7,7 @@
import dev.simplix.protocolize.api.player.ProtocolizePlayer;
import dev.simplix.protocolize.api.providers.ProtocolRegistrationProvider;
import dev.simplix.protocolize.bungee.packet.BungeeCordProtocolizePacket;
+import dev.simplix.protocolize.bungee.util.ConversionUtils;
import dev.simplix.protocolize.bungee.util.ReflectionUtil;
import lombok.Getter;
import lombok.experimental.Accessors;
@@ -91,6 +92,18 @@ public int protocolVersion() {
return ReflectionUtil.getProtocolVersion(player());
}
+ @Override
+ public Protocol decodeProtocol() {
+ net.md_5.bungee.protocol.Protocol protocol = ReflectionUtil.getDecodeProtocol(player());
+ return protocol == null ? null : ConversionUtils.protocolizeProtocol(protocol);
+ }
+
+ @Override
+ public Protocol encodeProtocol() {
+ net.md_5.bungee.protocol.Protocol protocol = ReflectionUtil.getEncodeProtocol(player());
+ return protocol == null ? null : ConversionUtils.protocolizeProtocol(protocol);
+ }
+
@Override
public T handle() {
return (T) player();
diff --git a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/providers/BungeeCordProtocolRegistrationProvider.java b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/providers/BungeeCordProtocolRegistrationProvider.java
index d216342a..ba8bb7a7 100644
--- a/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/providers/BungeeCordProtocolRegistrationProvider.java
+++ b/protocolize-bungeecord/src/main/java/dev/simplix/protocolize/bungee/providers/BungeeCordProtocolRegistrationProvider.java
@@ -12,6 +12,7 @@
import dev.simplix.protocolize.api.util.ReflectionUtil;
import dev.simplix.protocolize.bungee.packet.BungeeCordProtocolizePacket;
import dev.simplix.protocolize.bungee.strategy.PacketRegistrationStrategy;
+import dev.simplix.protocolize.bungee.util.ConversionUtils;
import gnu.trove.map.TIntObjectMap;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -19,16 +20,13 @@
import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.implementation.bind.annotation.RuntimeType;
import net.bytebuddy.matcher.ElementMatchers;
-import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.protocol.DefinedPacket;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.util.AbstractMap;
import java.util.List;
-import java.util.logging.Level;
/**
* Date: 20.08.2021
@@ -91,7 +89,7 @@ public void registerPacket(List mappings, Protocol protocol,
try {
Class extends DefinedPacket> definedPacketClass = generateBungeePacket(packetClass);
TIntObjectMap