Search in sources :

Example 1 with WeaponDamageEntityEvent

use of me.deecaad.weaponmechanics.weapon.weaponevents.WeaponDamageEntityEvent in project MechanicsMain by WeaponMechanics.

the class DamageHandler method tryUse.

/**
 * @return false if damaging was cancelled
 */
public boolean tryUse(LivingEntity victim, double damage, DamagePoint point, boolean isBackstab, LivingEntity shooter, String weaponTitle, ItemStack weaponStack, double distanceTravelled) {
    Configuration config = getConfigurations();
    boolean isFriendlyFire = config.getBool(weaponTitle + ".Damage.Enable_Friendly_Fire");
    if (!isFriendlyFire && !DamageUtil.canHarm(shooter, victim)) {
        return false;
    }
    boolean isOwnerImmune = config.getBool(weaponTitle + ".Damage.Enable_Owner_Immunity");
    if (isOwnerImmune && victim.equals(shooter)) {
        return false;
    }
    // Critical Hit chance
    double chance = config.getDouble(weaponTitle + ".Damage.Critical_Hit.Chance", -1);
    boolean isCritical = chance != -1 && NumberUtil.chance((chance / 100));
    int armorDamage = config.getInt(weaponTitle + ".Damage.Armor_Damage");
    int fireTicks = config.getInt(weaponTitle + ".Damage.Fire_Ticks");
    WeaponDamageEntityEvent damageEntityEvent = new WeaponDamageEntityEvent(weaponTitle, weaponStack, shooter, victim, damage, isBackstab, isCritical, point, armorDamage, fireTicks, distanceTravelled);
    Bukkit.getPluginManager().callEvent(damageEntityEvent);
    if (damageEntityEvent.isCancelled())
        return false;
    fireTicks = damageEntityEvent.getFireTicks();
    point = damageEntityEvent.getPoint();
    if (DamageUtil.apply(shooter, victim, damageEntityEvent.getFinalDamage())) {
        WeaponMechanics.debug.debug("Damage was cancelled");
        // Damage was cancelled
        return false;
    }
    DamageUtil.damageArmor(victim, damageEntityEvent.getArmorDamage(), point);
    // Fire ticks
    if (fireTicks > 0) {
        victim.setFireTicks(fireTicks);
    }
    EntityWrapper shooterWrapper = WeaponMechanics.getEntityWrapper(shooter, true);
    CastData shooterCast;
    if (shooterWrapper != null) {
        shooterCast = new CastData(shooterWrapper, weaponTitle, weaponStack);
    } else {
        shooterCast = new CastData(shooter, weaponTitle, weaponStack);
    }
    shooterCast.setData(CommonDataTags.TARGET_LOCATION.name(), victim.getLocation());
    shooterCast.setData(CommonDataTags.SHOOTER_NAME.name(), shooter.getName());
    shooterCast.setData(CommonDataTags.VICTIM_NAME.name(), victim.getName());
    EntityWrapper victimWrapper = WeaponMechanics.getEntityWrapper(victim, true);
    CastData victimCast;
    if (victimWrapper != null) {
        victimCast = new CastData(victimWrapper, weaponTitle, weaponStack);
    } else {
        victimCast = new CastData(victim, weaponTitle, weaponStack);
    }
    victimCast.setData(CommonDataTags.TARGET_LOCATION.name(), shooter.getLocation());
    victimCast.setData(CommonDataTags.SHOOTER_NAME.name(), shooter.getName());
    victimCast.setData(CommonDataTags.VICTIM_NAME.name(), victim.getName());
    // On all damage
    useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage");
    // On point
    if (point != null)
        useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage." + point.getReadable());
    // On backstab
    if (damageEntityEvent.isBackstab()) {
        useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage.Backstab");
    }
    // On critical
    if (damageEntityEvent.isCritical()) {
        useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage.Critical_Hit");
    }
    if (victim.isDead() || victim.getHealth() <= 0.0) {
        Bukkit.getPluginManager().callEvent(new WeaponKillEntityEvent(weaponTitle, weaponStack, shooter, victim, damageEntityEvent));
        // On kill
        useMechanics(config, shooterCast, victimCast, weaponTitle + ".Damage.Kill");
    }
    return true;
}
Also used : CastData(me.deecaad.weaponmechanics.mechanics.CastData) Configuration(me.deecaad.core.file.Configuration) WeaponDamageEntityEvent(me.deecaad.weaponmechanics.weapon.weaponevents.WeaponDamageEntityEvent) EntityWrapper(me.deecaad.weaponmechanics.wrappers.EntityWrapper) WeaponKillEntityEvent(me.deecaad.weaponmechanics.weapon.weaponevents.WeaponKillEntityEvent)

Aggregations

Configuration (me.deecaad.core.file.Configuration)1 CastData (me.deecaad.weaponmechanics.mechanics.CastData)1 WeaponDamageEntityEvent (me.deecaad.weaponmechanics.weapon.weaponevents.WeaponDamageEntityEvent)1 WeaponKillEntityEvent (me.deecaad.weaponmechanics.weapon.weaponevents.WeaponKillEntityEvent)1 EntityWrapper (me.deecaad.weaponmechanics.wrappers.EntityWrapper)1