2021-06-02 08:17:21 +02:00
|
|
|
package net.minestom.server.event;
|
|
|
|
|
2021-06-02 18:13:17 +02:00
|
|
|
import net.minestom.server.event.handler.EventHandler;
|
2021-06-02 10:19:23 +02:00
|
|
|
import org.jetbrains.annotations.NotNull;
|
2021-06-02 08:17:21 +02:00
|
|
|
|
2021-06-02 10:19:23 +02:00
|
|
|
import java.util.List;
|
2021-06-02 21:08:10 +02:00
|
|
|
import java.util.function.BiPredicate;
|
2021-06-02 08:17:21 +02:00
|
|
|
import java.util.function.Predicate;
|
|
|
|
|
2021-06-02 19:17:08 +02:00
|
|
|
public interface EventNode<T extends Event> {
|
2021-06-02 08:17:21 +02:00
|
|
|
|
2021-06-02 20:53:02 +02:00
|
|
|
static <E extends Event> EventNode<E> type(@NotNull EventFilter<E, ? extends EventHandler> filter) {
|
2021-06-02 20:33:35 +02:00
|
|
|
return new EventNodeImpl<>(filter);
|
2021-06-02 11:18:26 +02:00
|
|
|
}
|
|
|
|
|
2021-06-02 19:44:44 +02:00
|
|
|
static EventNode<Event> all() {
|
2021-06-02 20:23:50 +02:00
|
|
|
return type(EventFilter.ALL);
|
2021-06-02 11:29:16 +02:00
|
|
|
}
|
|
|
|
|
2021-06-02 20:33:35 +02:00
|
|
|
static <E extends Event, H extends EventHandler> EventNodeConditional<E, H> conditional(@NotNull EventFilter<E, H> filter,
|
2021-06-02 21:08:10 +02:00
|
|
|
@NotNull BiPredicate<E, H> predicate) {
|
2021-06-02 20:33:35 +02:00
|
|
|
return new EventNodeConditional<>(filter, predicate);
|
2021-06-02 08:17:21 +02:00
|
|
|
}
|
|
|
|
|
2021-06-02 21:08:10 +02:00
|
|
|
static <E extends Event, H extends EventHandler> EventNodeConditional<E, H> conditionalEvent(@NotNull EventFilter<E, H> filter,
|
|
|
|
@NotNull Predicate<E> predicate) {
|
|
|
|
return conditional(filter, (e, h) -> predicate.test(e));
|
|
|
|
}
|
|
|
|
|
|
|
|
static <E extends Event, H extends EventHandler> EventNodeConditional<E, H> conditionalHandler(@NotNull EventFilter<E, H> filter,
|
|
|
|
@NotNull Predicate<H> predicate) {
|
|
|
|
return conditional(filter, (e, h) -> predicate.test(h));
|
|
|
|
}
|
|
|
|
|
2021-06-02 20:23:50 +02:00
|
|
|
static <E extends Event, H extends EventHandler> EventNodeList<E, H> list(@NotNull EventFilter<E, H> filter) {
|
|
|
|
return new EventNodeList<>(filter);
|
|
|
|
}
|
|
|
|
|
2021-06-02 19:17:08 +02:00
|
|
|
void call(@NotNull T event);
|
2021-06-02 10:34:01 +02:00
|
|
|
|
2021-06-02 19:17:08 +02:00
|
|
|
void addChild(@NotNull EventNode<? extends T> child);
|
2021-06-02 10:19:23 +02:00
|
|
|
|
2021-06-02 19:52:05 +02:00
|
|
|
void removeChild(@NotNull EventNode<? extends T> child);
|
|
|
|
|
2021-06-02 19:17:08 +02:00
|
|
|
void addListener(@NotNull EventListener<? extends T> listener);
|
2021-06-02 10:19:23 +02:00
|
|
|
|
2021-06-02 19:50:23 +02:00
|
|
|
void removeListener(@NotNull EventListener<? extends T> listener);
|
|
|
|
|
2021-06-02 19:17:08 +02:00
|
|
|
@NotNull String getName();
|
2021-06-02 09:50:18 +02:00
|
|
|
|
2021-06-02 19:17:08 +02:00
|
|
|
@NotNull List<@NotNull EventNode<T>> getChildren();
|
2021-06-02 08:17:21 +02:00
|
|
|
}
|