mirror of
https://github.com/Minestom/Minestom.git
synced 2024-06-26 06:24:54 +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.collision.CollisionUtils;
|
||||||
import net.minestom.server.data.Data;
|
import net.minestom.server.data.Data;
|
||||||
import net.minestom.server.data.DataContainer;
|
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.Event;
|
||||||
import net.minestom.server.event.EventCallback;
|
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.entity.EntityTickEvent;
|
||||||
|
import net.minestom.server.event.handler.EventHandler;
|
||||||
import net.minestom.server.instance.Chunk;
|
import net.minestom.server.instance.Chunk;
|
||||||
import net.minestom.server.instance.Instance;
|
import net.minestom.server.instance.Instance;
|
||||||
import net.minestom.server.instance.block.CustomBlock;
|
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.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.function.Consumer;
|
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 Map<Integer, Entity> entityById = new ConcurrentHashMap<>();
|
||||||
private static AtomicInteger lastEntityId = new AtomicInteger();
|
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
|
* Returns the number of ticks this entity has been active for
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public long getAliveTicks() {
|
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) {
|
public <E extends Event> void addEventCallback(Class<E> eventClass, EventCallback<E> eventCallback) {
|
||||||
List<EventCallback> callbacks = getEventCallbacks(eventClass);
|
List<EventCallback> callbacks = getEventCallbacks(eventClass);
|
||||||
callbacks.add(eventCallback);
|
callbacks.add(eventCallback);
|
||||||
this.eventCallbacks.put(eventClass, callbacks);
|
this.eventCallbacks.put(eventClass, callbacks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public <E extends Event> List<EventCallback> getEventCallbacks(Class<E> eventClass) {
|
public <E extends Event> List<EventCallback> getEventCallbacks(Class<E> eventClass) {
|
||||||
return eventCallbacks.getOrDefault(eventClass, new CopyOnWriteArrayList<>());
|
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() {
|
public int getEntityId() {
|
||||||
return id;
|
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.Data;
|
||||||
import net.minestom.server.data.DataContainer;
|
import net.minestom.server.data.DataContainer;
|
||||||
import net.minestom.server.entity.*;
|
import net.minestom.server.entity.*;
|
||||||
import net.minestom.server.event.CancellableEvent;
|
|
||||||
import net.minestom.server.event.Event;
|
import net.minestom.server.event.Event;
|
||||||
import net.minestom.server.event.EventCallback;
|
import net.minestom.server.event.EventCallback;
|
||||||
import net.minestom.server.event.entity.AddEntityToInstanceEvent;
|
import net.minestom.server.event.entity.AddEntityToInstanceEvent;
|
||||||
import net.minestom.server.event.entity.RemoveEntityFromInstanceEvent;
|
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.BlockBatch;
|
||||||
import net.minestom.server.instance.batch.ChunkBatch;
|
import net.minestom.server.instance.batch.ChunkBatch;
|
||||||
import net.minestom.server.instance.block.Block;
|
import net.minestom.server.instance.block.Block;
|
||||||
|
@ -31,7 +31,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
import java.util.function.Consumer;
|
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 ChunkLoader CHUNK_LOADER_IO = new ChunkLoader();
|
||||||
protected static final BlockManager BLOCK_MANAGER = MinecraftServer.getBlockManager();
|
protected static final BlockManager BLOCK_MANAGER = MinecraftServer.getBlockManager();
|
||||||
|
@ -274,30 +274,18 @@ public abstract class Instance implements BlockModifier, DataContainer {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public <E extends Event> void addEventCallback(Class<E> eventClass, EventCallback<E> eventCallback) {
|
public <E extends Event> void addEventCallback(Class<E> eventClass, EventCallback<E> eventCallback) {
|
||||||
List<EventCallback> callbacks = getEventCallbacks(eventClass);
|
List<EventCallback> callbacks = getEventCallbacks(eventClass);
|
||||||
callbacks.add(eventCallback);
|
callbacks.add(eventCallback);
|
||||||
this.eventCallbacks.put(eventClass, callbacks);
|
this.eventCallbacks.put(eventClass, callbacks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public <E extends Event> List<EventCallback> getEventCallbacks(Class<E> eventClass) {
|
public <E extends Event> List<EventCallback> getEventCallbacks(Class<E> eventClass) {
|
||||||
return eventCallbacks.getOrDefault(eventClass, new CopyOnWriteArrayList<>());
|
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)
|
// UNSAFE METHODS (need most of time to be synchronized)
|
||||||
|
|
||||||
public void addEntity(Entity entity) {
|
public void addEntity(Entity entity) {
|
||||||
|
@ -406,7 +394,9 @@ public abstract class Instance implements BlockModifier, DataContainer {
|
||||||
/**
|
/**
|
||||||
* Performs a single tick in the instance.
|
* Performs a single tick in the instance.
|
||||||
* By default, does nothing
|
* By default, does nothing
|
||||||
|
*
|
||||||
* @param time the current time
|
* @param time the current time
|
||||||
*/
|
*/
|
||||||
public void tick(long time) { }
|
public void tick(long time) {
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user