mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-21 03:15:59 +01:00
Add EntityCreationEvent
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package emu.grasscutter.server.event.entity;
|
||||
|
||||
import emu.grasscutter.game.entity.GameEntity;
|
||||
import emu.grasscutter.server.event.Event;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** Invoked when an entity is created. */
|
||||
@AllArgsConstructor
|
||||
public final class EntityCreationEvent extends Event {
|
||||
/**
|
||||
* Helper method to call EntityCreationEvent.
|
||||
* Returns the result of the event call.
|
||||
*
|
||||
* @param type The type of entity to create.
|
||||
* @return The result of the event call.
|
||||
* @param <T> The type of entity to create.
|
||||
*/
|
||||
public static <T extends GameEntity> T call(
|
||||
Class<T> type, Class<?>[] argTypes, Object[] args
|
||||
) {
|
||||
var event = new EntityCreationEvent(type, argTypes, args);
|
||||
event.call(); return type.cast(event.getEntity());
|
||||
}
|
||||
|
||||
@Getter @Setter private Class<? extends GameEntity> entityType;
|
||||
@Getter @Setter private Class<?>[] constructorArgTypes;
|
||||
@Getter @Setter private Object[] constructorArgs;
|
||||
|
||||
/**
|
||||
* Creates a new entity.
|
||||
* Returns null if the entity could not be created.
|
||||
*
|
||||
* @return The created entity.
|
||||
*/
|
||||
@Nullable
|
||||
public GameEntity getEntity() {
|
||||
try {
|
||||
return this.entityType.getConstructor(this.constructorArgTypes)
|
||||
.newInstance(this.constructorArgs);
|
||||
} catch (ReflectiveOperationException ignored) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,8 +7,8 @@ import emu.grasscutter.server.event.Event;
|
||||
public abstract class EntityEvent extends Event {
|
||||
protected final GameEntity entity;
|
||||
|
||||
public EntityEvent(GameEntity player) {
|
||||
this.entity = player;
|
||||
public EntityEvent(GameEntity entity) {
|
||||
this.entity = entity;
|
||||
}
|
||||
|
||||
public GameEntity getEntity() {
|
||||
|
||||
Reference in New Issue
Block a user