0

EventContext: add cancelEvent method

This commit is contained in:
2021-01-01 18:57:12 +03:00
parent cfd68bb45e
commit 4e4a6272ba

View File

@@ -3,6 +3,7 @@ package ghast;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.bukkit.Bukkit;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@@ -17,6 +18,7 @@ import java.util.function.Consumer;
public class EventContext implements Listener {
private static final BooleanSupplier EMPTY_FILTER = () -> true;
private static final Consumer<Cancellable> CANCEL_EVENT = event -> event.setCancelled(true);
private final Map<Class<? extends Event>, Consumer<?>> eventMap = new HashMap<>();
private BooleanSupplier filter = EMPTY_FILTER;
@@ -31,8 +33,7 @@ public class EventContext implements Listener {
eventMap.remove(eventType);
} else {
eventMap.put(eventType, consumer);
Bukkit.getPluginManager().registerEvent(eventType, this, eventPriority,
this::eventExecute, GhastTools.getPlugin());
bukkitRegisterEvent(eventType, eventPriority);
}
return this;
}
@@ -41,6 +42,21 @@ public class EventContext implements Listener {
return onEvent(eventType, EventPriority.NORMAL, consumer);
}
public <T extends Event & Cancellable> EventContext cancelEvent(Class<T> eventType, EventPriority eventPriority) {
eventMap.put(eventType, CANCEL_EVENT);
bukkitRegisterEvent(eventType, eventPriority);
return this;
}
public <T extends Event & Cancellable> EventContext cancelEvent(Class<T> eventType) {
return cancelEvent(eventType, EventPriority.NORMAL);
}
private void bukkitRegisterEvent(Class<? extends Event> eventType, EventPriority eventPriority) {
Bukkit.getPluginManager().registerEvent(eventType, this, eventPriority,
this::eventExecute, GhastTools.getPlugin());
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private void eventExecute(Listener listener, Event event) {
Consumer consumer = eventMap.get(event.getClass());