Added EventNode#map

This commit is contained in:
TheMode 2021-06-02 18:13:17 +02:00
parent cd30a97cbb
commit a835a479ae
2 changed files with 42 additions and 0 deletions

View File

@ -1,5 +1,6 @@
package net.minestom.server.event;
import net.minestom.server.event.handler.EventHandler;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
@ -8,6 +9,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
public class EventNode<T extends Event> {
@ -36,6 +38,12 @@ public class EventNode<T extends Event> {
return new EventNodeConditional<>(type, predicate);
}
public static <E extends Event, H extends EventHandler> EventNode<E> map(@NotNull Class<E> eventType,
@NotNull Class<H> handlerType,
@NotNull Function<E, H> handlerGetter) {
return new EventNodeMap<>(eventType, handlerGetter);
}
protected boolean condition(@NotNull T event) {
return true;
}

View File

@ -0,0 +1,34 @@
package net.minestom.server.event;
import net.minestom.server.event.handler.EventHandler;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Function;
public class EventNodeMap<T extends Event, H extends EventHandler> extends EventNode<T> {
private final Function<T, H> handlerGetter;
private final List<H> entries = new CopyOnWriteArrayList<>();
protected EventNodeMap(Class<T> eventType, Function<T, H> handlerGetter) {
super(eventType);
this.handlerGetter = handlerGetter;
}
@Override
protected boolean condition(@NotNull T event) {
final var eventHandler = handlerGetter.apply(event);
return entries.contains(eventHandler);
}
public void addEntry(@NotNull H handler) {
this.entries.add(handler);
}
public void removeEntry(@NotNull H handler) {
this.entries.remove(handler);
}
}