Skip to content

Instantly share code, notes, and snippets.

@Oskang09
Last active July 7, 2021 05:46
Show Gist options
  • Save Oskang09/15e47b304b8a535ff2294d174c80f446 to your computer and use it in GitHub Desktop.
Save Oskang09/15e47b304b8a535ff2294d174c80f446 to your computer and use it in GitHub Desktop.
Minecraft FightAPI Listener
package me.oska.cf.listener;
import me.oska.cf.CustomFight;
import me.oska.cf.event.enums.DamageType;
import me.oska.cf.util.Invoker;
import org.bukkit.block.Block;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.*;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.projectiles.ProjectileSource;
public class FightListener implements Listener
{
@EventHandler( priority = EventPriority.MONITOR )
public void onPlayerDeath(PlayerDeathEvent event)
{
CustomFight.pm.getFighter(event.getEntity().getUniqueId()).clearStatus();
Invoker.playerPostDeadEvent(event, event.getEntity());
}
@EventHandler( priority = EventPriority.MONITOR )
public void onPlayerRevive(PlayerRespawnEvent event)
{
Invoker.playerReviveEvent(event, event.getPlayer());
}
@EventHandler( priority = EventPriority.MONITOR )
public void onDamageByBlock(EntityDamageByBlockEvent event)
{
Entity victim = event.getEntity();
Block attacker = event.getDamager();
if (victim instanceof Player)
{
switch (attacker.getType())
{
case CACTUS:
Invoker.cactusDamagePlayerEvent(event, attacker, victim);
break;
case LAVA:
Invoker.lavaDamagePlayerEvent(event, attacker, victim);
break;
case FIRE:
Invoker.fireDamagePlayerEvent(event, attacker, victim);
break;
}
}
}
@EventHandler
public void onCombust(EntityCombustEvent event)
{
Entity victim = event.getEntity();
if (victim instanceof Player)
{
Invoker.playerCombustEvent(event, event.getEntity());
}
}
@EventHandler( priority = EventPriority.MONITOR )
public void onChange(WeatherChangeEvent event)
{
Invoker.worldWeatherChangeEvent(event, event.getWorld().getPlayers());
}
@EventHandler( priority = EventPriority.MONITOR )
public void onDamage(EntityDamageByEntityEvent event)
{
Entity attacker = event.getDamager();
Entity victim = event.getEntity();
if (attacker instanceof TNTPrimed && ((TNTPrimed) attacker).getSource() instanceof Player)
{
if (victim instanceof Player)
{
Invoker.playerBoomPlayerEvent(event, ((TNTPrimed) attacker).getSource(), attacker, victim);
if (((LivingEntity) victim).getHealth() - event.getFinalDamage() <= 0)
{
Invoker.playerKillPlayerEvent(event, ((TNTPrimed) attacker).getSource(), victim, DamageType.TNT);
}
}
else if (victim instanceof LivingEntity)
{
Invoker.playerBoomEntityEvent(event, ((TNTPrimed) attacker).getSource(), attacker, victim);
if (((LivingEntity) victim).getHealth() - event.getFinalDamage() <= 0)
{
Invoker.playerKillEntityEvent(event, ((TNTPrimed) attacker).getSource(), victim, DamageType.TNT);
}
}
}
else if (attacker instanceof Player || ( attacker instanceof Projectile && ((Projectile)attacker).getShooter() instanceof Player) )
{
if (victim instanceof Player)
{
if (attacker instanceof Projectile)
{
attacker = (Entity) ((Projectile) attacker).getShooter();
Invoker.playerDamagePlayerEvent(event, attacker, victim, DamageType.PROJECTILE_DAMAGE);
if (((LivingEntity) victim).getHealth() - event.getFinalDamage() <= 0)
{
Invoker.playerKillPlayerEvent(event, attacker, victim, DamageType.PROJECTILE_DAMAGE);
}
}
else
{
Invoker.playerDamagePlayerEvent(event, attacker, victim, DamageType.CONTACT_DAMAGE);
if (((LivingEntity) victim).getHealth() - event.getFinalDamage() <= 0)
{
Invoker.playerKillPlayerEvent(event, attacker, victim, DamageType.CONTACT_DAMAGE);
}
}
}
else if (victim instanceof LivingEntity)
{
if (attacker instanceof Projectile)
{
attacker = (Entity) ((Projectile) attacker).getShooter();
Invoker.playerDamageEntityEvent(event, attacker, victim, DamageType.PROJECTILE_DAMAGE);
if (((LivingEntity) victim).getHealth() - event.getFinalDamage() <= 0)
{
Invoker.playerKillEntityEvent(event, attacker, victim, DamageType.CONTACT_DAMAGE);
}
}
else
{
Invoker.playerDamageEntityEvent(event, attacker, victim, DamageType.CONTACT_DAMAGE);
if (((LivingEntity) victim).getHealth() - event.getFinalDamage() <= 0)
{
Invoker.playerKillEntityEvent(event, attacker, victim, DamageType.CONTACT_DAMAGE);
}
}
}
}
else if (attacker instanceof LivingEntity || (attacker instanceof Projectile && ((Projectile)attacker).getShooter() instanceof Entity) )
{
if (victim instanceof Player)
{
if (attacker instanceof Projectile)
{
Invoker.entityDamagePlayerEvent(event, attacker, victim, DamageType.PROJECTILE_DAMAGE);
if (((LivingEntity) victim).getHealth() - event.getFinalDamage() <= 0)
{
Invoker.entityKillPlayerEvent(event, attacker, victim, DamageType.PROJECTILE_DAMAGE);
}
}
else
{
Invoker.entityDamagePlayerEvent(event, attacker, victim, DamageType.CONTACT_DAMAGE);
if (((LivingEntity) victim).getHealth() - event.getFinalDamage() <= 0)
{
Invoker.entityKillPlayerEvent(event, attacker, victim, DamageType.CONTACT_DAMAGE);
}
}
}
}
}
@EventHandler
public void onProjectileShoot(ProjectileLaunchEvent event)
{
Projectile projectile = event.getEntity();
ProjectileSource shooter = projectile.getShooter();
if (shooter instanceof Player)
{
Invoker.playerLaunchProjectileEvent(event, shooter, projectile);
}
}
@EventHandler
public void onProjectileHit(ProjectileHitEvent event)
{
Projectile projectile = event.getEntity();
ProjectileSource shooter = projectile.getShooter();
Block block = event.getHitBlock();
Entity victim = event.getHitEntity();
if (shooter instanceof Player)
{
if (block != null)
{
Invoker.playerProjectileHitBlockEvent(event, shooter, projectile, block);
}
if (victim != null)
{
if (victim instanceof Player)
{
Invoker.playerProjectileHitPlayerEvent(event, shooter, projectile, victim);
}
else if (victim instanceof Entity)
{
Invoker.playerProjectileHitEntityEvent(event, shooter, projectile, victim);
}
}
}
else if (shooter instanceof Entity)
{
if (victim instanceof Player)
{
Invoker.entityProjectileHitPlayerEvent(event, shooter, projectile, victim);
}
}
}
@EventHandler( priority = EventPriority.MONITOR )
public void onBowShoot(EntityShootBowEvent event)
{
Entity shooter = event.getEntity();
if (shooter instanceof Player)
{
Invoker.playerBowShootEvent(event, shooter);
}
}
@EventHandler( priority = EventPriority.MONITOR )
public void onPotionSplash(PotionSplashEvent event)
{
ThrownPotion potion = event.getPotion();
ProjectileSource shooter = potion.getShooter();
if (shooter instanceof Player)
{
Invoker.playerSplashPotionEvent(event, shooter, potion);
}
}
@EventHandler( priority = EventPriority.MONITOR )
public void onAECApply(AreaEffectCloudApplyEvent event)
{
AreaEffectCloud aec = event.getEntity();
ProjectileSource shooter = aec.getSource();
if (shooter instanceof Player)
{
Invoker.playerAreaEffectCloudApplyEvent(event, shooter, aec);
}
}
@EventHandler( priority = EventPriority.MONITOR )
public void onLingeringPotionSplash(LingeringPotionSplashEvent event)
{
LingeringPotion potion = event.getEntity();
ProjectileSource shooter = potion.getShooter();
if (shooter instanceof Player)
{
Invoker.playerSplashLingeringPotionEvent(event, shooter, potion);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment