Add EntityCreationEvent

This commit is contained in:
KingRainbow44
2023-05-20 21:08:35 -04:00
parent 1515d62aa6
commit 43ab558735
8 changed files with 111 additions and 26 deletions

View File

@@ -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;
}
}
}

View File

@@ -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() {