diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/AbstractPacketEvent.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/AbstractPacketEvent.java
new file mode 100644
index 00000000..78c6423f
--- /dev/null
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/listener/AbstractPacketEvent.java
@@ -0,0 +1,49 @@
+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;
+import lombok.experimental.Accessors;
+
+/**
+ * This class is containing information about the packet event.
+ *
+ * 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..33c45d15 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,44 @@
@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 PacketReceiveEvent(ProtocolizePlayer player, Object server, T packet, boolean cancelled, boolean dirty) {
+ super(player, server, packet, cancelled);
+ this.dirty = dirty;
+ }
+
+ @Override
public ProtocolizePlayer player() {
- return player;
+ return super.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.
- */
+ @Override
public S server() {
- return (S) server;
+ return super.server();
+ }
+
+ @Override
+ public T packet() {
+ return super.packet();
+ }
+
+ @Override
+ public AbstractPacketEvent packet(T packet) {
+ return super.packet(packet);
+ }
+
+ @Override
+ public boolean cancelled() {
+ return super.cancelled();
+ }
+
+ @Override
+ public AbstractPacketEvent cancelled(boolean cancelled) {
+ return super.cancelled(cancelled);
}
/**
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..e4edf396 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,41 @@
@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;
+ public PacketSendEvent(ProtocolizePlayer player, Object server, T packet, boolean cancelled) {
+ super(player, server, packet, 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.
- */
+ @Override
public ProtocolizePlayer player() {
- return player;
+ return super.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.
- */
+ @Override
public S server() {
- return (S) server;
+ return super.server();
+ }
+
+ @Override
+ public T packet() {
+ return super.packet();
+ }
+
+ @Override
+ public AbstractPacketEvent packet(T packet) {
+ return super.packet(packet);
+ }
+
+ @Override
+ public boolean cancelled() {
+ return super.cancelled();
+ }
+
+ @Override
+ public AbstractPacketEvent cancelled(boolean cancelled) {
+ return super.cancelled(cancelled);
}
/**
diff --git a/protocolize-api/src/main/java/dev/simplix/protocolize/api/packet/RegisteredPacket.java b/protocolize-api/src/main/java/dev/simplix/protocolize/api/packet/RegisteredPacket.java
index 82c97a72..f6859d5c 100644
--- a/protocolize-api/src/main/java/dev/simplix/protocolize/api/packet/RegisteredPacket.java
+++ b/protocolize-api/src/main/java/dev/simplix/protocolize/api/packet/RegisteredPacket.java
@@ -1,6 +1,7 @@
package dev.simplix.protocolize.api.packet;
import dev.simplix.protocolize.api.PacketDirection;
+import dev.simplix.protocolize.api.Protocol;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -15,6 +16,7 @@
@Accessors(fluent = true)
public class RegisteredPacket {
+ private final Protocol protocol;
private final PacketDirection direction;
private final Class extends AbstractPacket> packetClass;
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 15b92238..56d65787 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();
@@ -38,6 +44,10 @@ public interface ProtocolizePlayer {
int protocolVersion();
+ Protocol decodeProtocol();
+
+ Protocol encodeProtocol();
+
T handle();
Location location();
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..1c56d9c4
--- /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 register(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 unregister(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..e4127c49 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,25 @@
*/
public interface PacketListenerProvider {
- void registerListener(AbstractPacketListener> listener);
+ default AbstractPacketListener register(Class packet, Direction direction) {
+ return register(packet, direction, 0);
+ }
- void unregisterListener(AbstractPacketListener> listener) throws IllegalArgumentException;
+ default AbstractPacketListener register(Class packet, Direction direction, int priority) {
+ return register(new AbstractPacketListener(packet, direction, priority) { });
+ }
+
+ > A register(A listener);
+
+ default void registerListener(AbstractPacketListener> listener) {
+ register(listener);
+ }
+
+ > A unregister(A listener) throws IllegalArgumentException;
+
+ default void unregisterListener(AbstractPacketListener> listener) throws IllegalArgumentException {
+ unregister(listener);
+ }
List> listenersForType(Class> type);
diff --git a/protocolize-api/src/test/java/dev/simplix/protocolize/api/tests/MappingTest.java b/protocolize-api/src/test/java/dev/simplix/protocolize/api/tests/MappingTest.java
index 9677903e..d054ff39 100644
--- a/protocolize-api/src/test/java/dev/simplix/protocolize/api/tests/MappingTest.java
+++ b/protocolize-api/src/test/java/dev/simplix/protocolize/api/tests/MappingTest.java
@@ -1,6 +1,7 @@
package dev.simplix.protocolize.api.tests;
import dev.simplix.protocolize.api.PacketDirection;
+import dev.simplix.protocolize.api.Protocol;
import dev.simplix.protocolize.api.Protocolize;
import dev.simplix.protocolize.api.mapping.AbstractProtocolMapping;
import dev.simplix.protocolize.api.mapping.ProtocolMapping;
@@ -22,21 +23,21 @@ public class MappingTest {
@Test
public void packetMappingTest() {
- Protocolize.mappingProvider().registerMapping(new RegisteredPacket(PacketDirection.SERVERBOUND, TestPacket.class),
+ Protocolize.mappingProvider().registerMapping(new RegisteredPacket(Protocol.PLAY, PacketDirection.SERVERBOUND, TestPacket.class),
AbstractProtocolMapping.rangedIdMapping(47, 756, 0x3D));
- Protocolize.mappingProvider().registerMapping(new RegisteredPacket(PacketDirection.SERVERBOUND, TestPacket.class),
+ Protocolize.mappingProvider().registerMapping(new RegisteredPacket(Protocol.PLAY, PacketDirection.SERVERBOUND, TestPacket.class),
AbstractProtocolMapping.rangedIdMapping(23, 46, 0x2D));
- Protocolize.mappingProvider().registerMapping(new RegisteredPacket(PacketDirection.SERVERBOUND, AnotherTestPacket.class),
+ Protocolize.mappingProvider().registerMapping(new RegisteredPacket(Protocol.PLAY, PacketDirection.SERVERBOUND, AnotherTestPacket.class),
AbstractProtocolMapping.rangedIdMapping(47, 756, 0x3D));
- List mappings = Protocolize.mappingProvider().mappings(new RegisteredPacket(PacketDirection.SERVERBOUND, TestPacket.class));
+ List mappings = Protocolize.mappingProvider().mappings(new RegisteredPacket(Protocol.PLAY, PacketDirection.SERVERBOUND, TestPacket.class));
assert !mappings.isEmpty();
ProtocolMapping mapping1 = mappings.get(0);
ProtocolMapping mapping2 = mappings.get(1);
assert mapping1.inRange(47);
assert mapping2.inRange(24);
- ProtocolMapping mapping = Protocolize.mappingProvider().mapping(new RegisteredPacket(PacketDirection.SERVERBOUND, AnotherTestPacket.class), 47);
+ ProtocolMapping mapping = Protocolize.mappingProvider().mapping(new RegisteredPacket(Protocol.PLAY, PacketDirection.SERVERBOUND, AnotherTestPacket.class), 47);
assert mapping != null;
assert mapping.inRange(47);
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 ff86d7ae..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;
@@ -45,10 +46,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 +60,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;
}
@@ -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/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-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..0396f274 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,9 +89,9 @@ public void registerPacket(List mappings, Protocol protocol,
try {
Class extends DefinedPacket> definedPacketClass = generateBungeePacket(packetClass);
TIntObjectMap