mirror of
https://github.com/Minestom/Minestom.git
synced 2024-09-27 14:13:24 +02:00
Added EventHandler interface
This commit is contained in:
parent
0daae4d831
commit
3741b22484
@ -6,11 +6,11 @@ import net.minestom.server.collision.BoundingBox;
|
||||
import net.minestom.server.collision.CollisionUtils;
|
||||
import net.minestom.server.data.Data;
|
||||
import net.minestom.server.data.DataContainer;
|
||||
import net.minestom.server.event.CancellableEvent;
|
||||
import net.minestom.server.event.entity.EntitySpawnEvent;
|
||||
import net.minestom.server.event.Event;
|
||||
import net.minestom.server.event.EventCallback;
|
||||
import net.minestom.server.event.entity.EntitySpawnEvent;
|
||||
import net.minestom.server.event.entity.EntityTickEvent;
|
||||
import net.minestom.server.event.handler.EventHandler;
|
||||
import net.minestom.server.instance.Chunk;
|
||||
import net.minestom.server.instance.Instance;
|
||||
import net.minestom.server.instance.block.CustomBlock;
|
||||
@ -27,7 +27,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public abstract class Entity implements Viewable, DataContainer {
|
||||
public abstract class Entity implements Viewable, EventHandler, DataContainer {
|
||||
|
||||
private static Map<Integer, Entity> entityById = new ConcurrentHashMap<>();
|
||||
private static AtomicInteger lastEntityId = new AtomicInteger();
|
||||
@ -339,6 +339,7 @@ public abstract class Entity implements Viewable, DataContainer {
|
||||
|
||||
/**
|
||||
* Returns the number of ticks this entity has been active for
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public long getAliveTicks() {
|
||||
@ -355,30 +356,18 @@ public abstract class Entity implements Viewable, DataContainer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Event> void addEventCallback(Class<E> eventClass, EventCallback<E> eventCallback) {
|
||||
List<EventCallback> callbacks = getEventCallbacks(eventClass);
|
||||
callbacks.add(eventCallback);
|
||||
this.eventCallbacks.put(eventClass, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Event> List<EventCallback> getEventCallbacks(Class<E> eventClass) {
|
||||
return eventCallbacks.getOrDefault(eventClass, new CopyOnWriteArrayList<>());
|
||||
}
|
||||
|
||||
public <E extends Event> void callEvent(Class<E> eventClass, E event) {
|
||||
List<EventCallback> eventCallbacks = getEventCallbacks(eventClass);
|
||||
for (EventCallback<E> eventCallback : eventCallbacks) {
|
||||
eventCallback.run(event);
|
||||
}
|
||||
}
|
||||
|
||||
public <E extends CancellableEvent> void callCancellableEvent(Class<E> eventClass, E event, Runnable runnable) {
|
||||
callEvent(eventClass, event);
|
||||
if (!event.isCancelled()) {
|
||||
runnable.run();
|
||||
}
|
||||
}
|
||||
|
||||
public int getEntityId() {
|
||||
return id;
|
||||
}
|
||||
|
@ -0,0 +1,29 @@
|
||||
package net.minestom.server.event.handler;
|
||||
|
||||
import net.minestom.server.event.CancellableEvent;
|
||||
import net.minestom.server.event.Event;
|
||||
import net.minestom.server.event.EventCallback;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface EventHandler {
|
||||
|
||||
<E extends Event> void addEventCallback(Class<E> eventClass, EventCallback<E> eventCallback);
|
||||
|
||||
<E extends Event> List<EventCallback> getEventCallbacks(Class<E> eventClass);
|
||||
|
||||
default <E extends Event> void callEvent(Class<E> eventClass, E event) {
|
||||
List<EventCallback> eventCallbacks = getEventCallbacks(eventClass);
|
||||
for (EventCallback<E> eventCallback : eventCallbacks) {
|
||||
eventCallback.run(event);
|
||||
}
|
||||
}
|
||||
|
||||
default <E extends CancellableEvent> void callCancellableEvent(Class<E> eventClass, E event, Runnable runnable) {
|
||||
callEvent(eventClass, event);
|
||||
if (!event.isCancelled()) {
|
||||
runnable.run();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -5,11 +5,11 @@ import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.data.Data;
|
||||
import net.minestom.server.data.DataContainer;
|
||||
import net.minestom.server.entity.*;
|
||||
import net.minestom.server.event.CancellableEvent;
|
||||
import net.minestom.server.event.Event;
|
||||
import net.minestom.server.event.EventCallback;
|
||||
import net.minestom.server.event.entity.AddEntityToInstanceEvent;
|
||||
import net.minestom.server.event.entity.RemoveEntityFromInstanceEvent;
|
||||
import net.minestom.server.event.handler.EventHandler;
|
||||
import net.minestom.server.instance.batch.BlockBatch;
|
||||
import net.minestom.server.instance.batch.ChunkBatch;
|
||||
import net.minestom.server.instance.block.Block;
|
||||
@ -31,7 +31,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.CopyOnWriteArraySet;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public abstract class Instance implements BlockModifier, DataContainer {
|
||||
public abstract class Instance implements BlockModifier, EventHandler, DataContainer {
|
||||
|
||||
protected static final ChunkLoader CHUNK_LOADER_IO = new ChunkLoader();
|
||||
protected static final BlockManager BLOCK_MANAGER = MinecraftServer.getBlockManager();
|
||||
@ -274,30 +274,18 @@ public abstract class Instance implements BlockModifier, DataContainer {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Event> void addEventCallback(Class<E> eventClass, EventCallback<E> eventCallback) {
|
||||
List<EventCallback> callbacks = getEventCallbacks(eventClass);
|
||||
callbacks.add(eventCallback);
|
||||
this.eventCallbacks.put(eventClass, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Event> List<EventCallback> getEventCallbacks(Class<E> eventClass) {
|
||||
return eventCallbacks.getOrDefault(eventClass, new CopyOnWriteArrayList<>());
|
||||
}
|
||||
|
||||
public <E extends Event> void callEvent(Class<E> eventClass, E event) {
|
||||
List<EventCallback> eventCallbacks = getEventCallbacks(eventClass);
|
||||
for (EventCallback<E> eventCallback : eventCallbacks) {
|
||||
eventCallback.run(event);
|
||||
}
|
||||
}
|
||||
|
||||
public <E extends CancellableEvent> void callCancellableEvent(Class<E> eventClass, E event, Runnable runnable) {
|
||||
callEvent(eventClass, event);
|
||||
if (!event.isCancelled()) {
|
||||
runnable.run();
|
||||
}
|
||||
}
|
||||
|
||||
// UNSAFE METHODS (need most of time to be synchronized)
|
||||
|
||||
public void addEntity(Entity entity) {
|
||||
@ -406,7 +394,9 @@ public abstract class Instance implements BlockModifier, DataContainer {
|
||||
/**
|
||||
* Performs a single tick in the instance.
|
||||
* By default, does nothing
|
||||
*
|
||||
* @param time the current time
|
||||
*/
|
||||
public void tick(long time) { }
|
||||
public void tick(long time) {
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user