From 36942708bb3435769fed7615248ea28927e982e5 Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 13 May 2021 09:11:02 +0200 Subject: [PATCH] Introduce EventGroup --- .../java/net/minestom/server/event/Event.java | 5 ++++ .../net/minestom/server/event/EventGroup.java | 27 +++++++++++++++++++ .../minestom/server/event/EventListener.java | 4 ++- .../minestom/server/event/ListenerAttach.java | 10 +++++++ src/test/java/demo/PlayerInit.java | 5 +++- 5 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/minestom/server/event/EventGroup.java create mode 100644 src/main/java/net/minestom/server/event/ListenerAttach.java diff --git a/src/main/java/net/minestom/server/event/Event.java b/src/main/java/net/minestom/server/event/Event.java index e3322b671..eb2ba5333 100644 --- a/src/main/java/net/minestom/server/event/Event.java +++ b/src/main/java/net/minestom/server/event/Event.java @@ -1,6 +1,7 @@ package net.minestom.server.event; import net.minestom.server.event.handler.EventHandler; +import org.jetbrains.annotations.NotNull; /** * Object which can be listened to by an {@link EventHandler}. @@ -8,6 +9,10 @@ import net.minestom.server.event.handler.EventHandler; * Called using {@link EventHandler#callEvent(Class, Event)}. */ public class Event { + public static EventGroup group(@NotNull EventListener... listeners) { + return new EventGroup(listeners); + } + public static EventListener.Builder entity(Class eventType) { return new EventListener.Builder<>(eventType); } diff --git a/src/main/java/net/minestom/server/event/EventGroup.java b/src/main/java/net/minestom/server/event/EventGroup.java new file mode 100644 index 000000000..258b9cfa6 --- /dev/null +++ b/src/main/java/net/minestom/server/event/EventGroup.java @@ -0,0 +1,27 @@ +package net.minestom.server.event; + +import net.minestom.server.event.handler.EventHandler; +import org.jetbrains.annotations.NotNull; + +public class EventGroup implements ListenerAttach { + + private final EventListener[] listeners; + + protected EventGroup(@NotNull EventListener... listeners) { + this.listeners = listeners; + } + + @Override + public void attachTo(@NotNull EventHandler handler) { + for (EventListener listener : listeners) { + listener.attachTo(handler); + } + } + + @Override + public void detachFrom(@NotNull EventHandler handler) { + for (EventListener listener : listeners) { + listener.detachFrom(handler); + } + } +} diff --git a/src/main/java/net/minestom/server/event/EventListener.java b/src/main/java/net/minestom/server/event/EventListener.java index 6fbbf334a..b19b80d24 100644 --- a/src/main/java/net/minestom/server/event/EventListener.java +++ b/src/main/java/net/minestom/server/event/EventListener.java @@ -10,7 +10,7 @@ import java.util.concurrent.CopyOnWriteArraySet; import java.util.function.Consumer; import java.util.function.Predicate; -public class EventListener { +public class EventListener implements ListenerAttach { private final Class eventType; private final Set attach = new CopyOnWriteArraySet<>(); @@ -21,6 +21,7 @@ public class EventListener { this.combined = combined; } + @Override public void attachTo(@NotNull EventHandler handler) { final boolean success = this.attach.add(handler); if (success) { @@ -28,6 +29,7 @@ public class EventListener { } } + @Override public void detachFrom(@NotNull EventHandler handler) { final boolean success = this.attach.remove(handler); if (success) { diff --git a/src/main/java/net/minestom/server/event/ListenerAttach.java b/src/main/java/net/minestom/server/event/ListenerAttach.java new file mode 100644 index 000000000..7f3122db4 --- /dev/null +++ b/src/main/java/net/minestom/server/event/ListenerAttach.java @@ -0,0 +1,10 @@ +package net.minestom.server.event; + +import net.minestom.server.event.handler.EventHandler; +import org.jetbrains.annotations.NotNull; + +public interface ListenerAttach { + void attachTo(@NotNull EventHandler handler); + + void detachFrom(@NotNull EventHandler handler); +} diff --git a/src/test/java/demo/PlayerInit.java b/src/test/java/demo/PlayerInit.java index 6c68581ed..e8eec1940 100644 --- a/src/test/java/demo/PlayerInit.java +++ b/src/test/java/demo/PlayerInit.java @@ -143,7 +143,10 @@ public class PlayerInit { .filter(playerChatEvent -> player.isCreative()) .handler(playerChatEvent -> Audiences.players().sendMessage(Component.text("Listener is working!"))) .build(); - listener.attachTo(player); + //listener.attachTo(player); + + var group = Event.group(listener); + group.attachTo(player); });