Files
Grasscutter/src/main/java/emu/grasscutter/server/event/entity/EntityCreationEvent.java
T
2023-05-20 21:08:35 -04:00

49 lines
1.5 KiB
Java

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