Introduce EventGroup

This commit is contained in:
TheMode 2021-05-13 09:11:02 +02:00
parent 920a36399f
commit 36942708bb
5 changed files with 49 additions and 2 deletions

View File

@ -1,6 +1,7 @@
package net.minestom.server.event; package net.minestom.server.event;
import net.minestom.server.event.handler.EventHandler; import net.minestom.server.event.handler.EventHandler;
import org.jetbrains.annotations.NotNull;
/** /**
* Object which can be listened to by an {@link EventHandler}. * 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)}. * Called using {@link EventHandler#callEvent(Class, Event)}.
*/ */
public class Event { public class Event {
public static EventGroup group(@NotNull EventListener<?>... listeners) {
return new EventGroup(listeners);
}
public static <T extends EntityEvent> EventListener.Builder<T> entity(Class<T> eventType) { public static <T extends EntityEvent> EventListener.Builder<T> entity(Class<T> eventType) {
return new EventListener.Builder<>(eventType); return new EventListener.Builder<>(eventType);
} }

View File

@ -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);
}
}
}

View File

@ -10,7 +10,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Predicate; import java.util.function.Predicate;
public class EventListener<T extends Event> { public class EventListener<T extends Event> implements ListenerAttach {
private final Class<T> eventType; private final Class<T> eventType;
private final Set<EventHandler> attach = new CopyOnWriteArraySet<>(); private final Set<EventHandler> attach = new CopyOnWriteArraySet<>();
@ -21,6 +21,7 @@ public class EventListener<T extends Event> {
this.combined = combined; this.combined = combined;
} }
@Override
public void attachTo(@NotNull EventHandler handler) { public void attachTo(@NotNull EventHandler handler) {
final boolean success = this.attach.add(handler); final boolean success = this.attach.add(handler);
if (success) { if (success) {
@ -28,6 +29,7 @@ public class EventListener<T extends Event> {
} }
} }
@Override
public void detachFrom(@NotNull EventHandler handler) { public void detachFrom(@NotNull EventHandler handler) {
final boolean success = this.attach.remove(handler); final boolean success = this.attach.remove(handler);
if (success) { if (success) {

View File

@ -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);
}

View File

@ -143,7 +143,10 @@ public class PlayerInit {
.filter(playerChatEvent -> player.isCreative()) .filter(playerChatEvent -> player.isCreative())
.handler(playerChatEvent -> Audiences.players().sendMessage(Component.text("Listener is working!"))) .handler(playerChatEvent -> Audiences.players().sendMessage(Component.text("Listener is working!")))
.build(); .build();
listener.attachTo(player); //listener.attachTo(player);
var group = Event.group(listener);
group.attachTo(player);
}); });