Merge branch 'feature/event-context' into develop
This commit is contained in:
@@ -3,6 +3,7 @@ package ghast;
|
|||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@@ -17,6 +18,7 @@ import java.util.function.Consumer;
|
|||||||
public class EventContext implements Listener {
|
public class EventContext implements Listener {
|
||||||
|
|
||||||
private static final BooleanSupplier EMPTY_FILTER = () -> true;
|
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 final Map<Class<? extends Event>, Consumer<?>> eventMap = new HashMap<>();
|
||||||
private BooleanSupplier filter = EMPTY_FILTER;
|
private BooleanSupplier filter = EMPTY_FILTER;
|
||||||
@@ -31,8 +33,7 @@ public class EventContext implements Listener {
|
|||||||
eventMap.remove(eventType);
|
eventMap.remove(eventType);
|
||||||
} else {
|
} else {
|
||||||
eventMap.put(eventType, consumer);
|
eventMap.put(eventType, consumer);
|
||||||
Bukkit.getPluginManager().registerEvent(eventType, this, eventPriority,
|
bukkitRegisterEvent(eventType, eventPriority);
|
||||||
this::eventExecute, GhastTools.getPlugin());
|
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@@ -41,6 +42,21 @@ public class EventContext implements Listener {
|
|||||||
return onEvent(eventType, EventPriority.NORMAL, consumer);
|
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" })
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
private void eventExecute(Listener listener, Event event) {
|
private void eventExecute(Listener listener, Event event) {
|
||||||
Consumer consumer = eventMap.get(event.getClass());
|
Consumer consumer = eventMap.get(event.getClass());
|
||||||
|
|||||||
Reference in New Issue
Block a user