package com.supaham.commons.bukkit.utils;
import static com.google.common.base.Preconditions.checkNotNull;
import org.bukkit.Bukkit;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Projectile;
import org.bukkit.event.Event;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.projectiles.ProjectileSource;
import javax.annotation.Nonnull;
/**
* Utility methods for working with {@link Event} instances. This class contains methods such as
* {@link #getLivingEntityDamager(EntityDamageByEntityEvent)} and more.
*
* @since 0.1
*/
public class EventUtils {
/**
* Helper method for calling an {@link Event} and returning it.
*
* @param event event to call
* @param <T> event type
*
* @return same exact {@code event} instance after it is called
*/
public static <T extends Event> T callEvent(T event) {
Bukkit.getServer().getPluginManager().callEvent(event);
return event;
}
/**
* Gets the {@link LivingEntity} from a {@link EntityDamageByEntityEvent}. If the {@link
* EntityDamageByEntityEvent#getDamager()} is a LivingEntity, then that instance is returned.
* Otherwise, if the damager is a projectile and it's shooter is a LivingEntity, that
* LivingEntity
* shooter instance is returned.
*
* @param event event to get LivingEntity from
*
* @return instance of {@link LivingEntity}, nullable
*/
public static LivingEntity getLivingEntityDamager(@Nonnull EntityDamageByEntityEvent event) {
checkNotNull(event, "event cannot be null.");
// This is the living entity
if (event.getDamager() instanceof LivingEntity) {
return ((LivingEntity) event.getDamager());
}
// Check for projectile's shooter
if (event.getDamager() instanceof Projectile) {
ProjectileSource shooter = ((Projectile) event.getDamager()).getShooter();
if (shooter != null && shooter instanceof LivingEntity) {
return ((LivingEntity) shooter);
}
}
return null;
}
}