diff --git a/gradle.properties b/gradle.properties index 2d56cba..fe3fb14 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ projectGroup=ghast projectName=ghast-tools -projectVersion=1.2.1 \ No newline at end of file +projectVersion=1.3 \ No newline at end of file diff --git a/src/main/java/ghast/EventContext.java b/src/main/java/ghast/EventContext.java new file mode 100644 index 0000000..5a9a33a --- /dev/null +++ b/src/main/java/ghast/EventContext.java @@ -0,0 +1,55 @@ +package ghast; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.event.Event; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.BooleanSupplier; +import java.util.function.Consumer; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@SuppressWarnings("unused") +public class EventContext implements Listener { + + private static final BooleanSupplier EMPTY_FILTER = () -> true; + + private final Map, Consumer> eventMap = new HashMap<>(); + private BooleanSupplier filter = EMPTY_FILTER; + + public EventContext filter(BooleanSupplier filter) { + this.filter = (filter != null ? filter : EMPTY_FILTER); + return this; + } + + public EventContext onEvent(Class eventType, EventPriority eventPriority, Consumer consumer) { + if (consumer == null) { + eventMap.remove(eventType); + } else { + eventMap.put(eventType, consumer); + Bukkit.getPluginManager().registerEvent(eventType, this, eventPriority, + this::eventExecute, GhastTools.getPlugin()); + } + return this; + } + + public EventContext onEvent(Class eventType, Consumer consumer) { + return onEvent(eventType, EventPriority.NORMAL, consumer); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private void eventExecute(Listener listener, Event event) { + Consumer consumer = eventMap.get(event.getClass()); + if (consumer != null && filter.getAsBoolean()) { + consumer.accept(event); + } + } + + public static EventContext create() { + return new EventContext(); + } +} diff --git a/src/main/java/ghast/EventManager.java b/src/main/java/ghast/EventManager.java deleted file mode 100644 index 4b47403..0000000 --- a/src/main/java/ghast/EventManager.java +++ /dev/null @@ -1,66 +0,0 @@ -package ghast; - -import lombok.AccessLevel; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; -import lombok.experimental.UtilityClass; -import org.bukkit.Bukkit; -import org.bukkit.event.Event; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.BooleanSupplier; -import java.util.function.Consumer; - -@UtilityClass -@SuppressWarnings("unused") -public class EventManager { - - public Builder createContext() { - return new Builder(); - } - - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - public static class Builder { - - private static final BooleanSupplier EMPTY_FILTER = () -> true; - - private final EventContext eventContext = new EventContext(); - - public Builder filter(BooleanSupplier filter) { - eventContext.setFilter(filter != null ? filter : EMPTY_FILTER); - return this; - } - - public Builder onEvent(Class eventType, EventPriority eventPriority, Consumer consumer) { - eventContext.getEventMap().put(eventType, consumer); - Bukkit.getPluginManager().registerEvent(eventType, eventContext, eventPriority, - eventContext::eventExecute, GhastTools.getPlugin()); - return this; - } - - public Builder onEvent(Class eventType, Consumer consumer) { - return onEvent(eventType, EventPriority.NORMAL, consumer); - } - } - - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Getter(AccessLevel.PRIVATE) - @Setter(AccessLevel.PRIVATE) - private static class EventContext implements Listener { - - private final Map, Consumer> eventMap = new HashMap<>(); - private BooleanSupplier filter; - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private void eventExecute(Listener listener, Event event) { - Consumer consumer = eventMap.get(event.getClass()); - if (consumer != null && filter.getAsBoolean()) { - consumer.accept(event); - } - } - } -}