use of me.deecaad.weaponmechanics.weapon.weaponevents.ProjectileHitEntityEvent in project MechanicsMain by WeaponMechanics.
the class RayTraceResult method handleEntityHit.
private boolean handleEntityHit(WeaponProjectile projectile) {
// Handle worldguard flags
WorldGuardCompatibility worldGuard = CompatibilityAPI.getWorldGuardCompatibility();
Location loc = hitLocation.clone().toLocation(projectile.getWorld());
LivingEntity shooter = projectile.getShooter();
if (!worldGuard.testFlag(loc, shooter instanceof Player ? (Player) shooter : null, "weapon-damage")) {
// is cancelled check
Object obj = worldGuard.getValue(loc, "weapon-damage-message");
if (obj != null && !obj.toString().isEmpty() && shooter != null) {
shooter.sendMessage(StringUtil.color(obj.toString()));
}
return true;
}
boolean backstab = livingEntity.getLocation().getDirection().dot(projectile.getMotion()) > 0.0;
ProjectileHitEntityEvent hitEntityEvent = new ProjectileHitEntityEvent(projectile, livingEntity, hitLocation.clone(), hitPoint, backstab);
Bukkit.getPluginManager().callEvent(hitEntityEvent);
if (hitEntityEvent.isCancelled())
return true;
hitPoint = hitEntityEvent.getPoint();
backstab = hitEntityEvent.isBackStab();
if (!damageHandler.tryUse(livingEntity, projectile, getConfigurations().getDouble(projectile.getWeaponTitle() + ".Damage.Base_Damage"), hitPoint, backstab)) {
// Damage was cancelled
return true;
}
Explosion explosion = getConfigurations().getObject(projectile.getWeaponTitle() + ".Explosion", Explosion.class);
if (explosion != null)
explosion.handleExplosion(projectile.getShooter(), hitLocation.clone().toLocation(projectile.getWorld()), projectile, ExplosionTrigger.ENTITY);
return false;
}
Aggregations