Search in sources :

Example 1 with EntityWrapper

use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.

the class WeaponMechanics method getPlayerWrapper.

/**
 * This method can't return null because new PlayerWrapper is created if not found.
 * Use mainly getEntityWrapper() instead of this unless you especially need something from PlayerWrapper.
 *
 * @param player the player wrapper to get
 * @return the player wrapper
 */
public static PlayerWrapper getPlayerWrapper(Player player) {
    EntityWrapper wrapper = plugin.entityWrappers.get(player);
    if (wrapper == null) {
        wrapper = new PlayerWrapper(player);
        plugin.entityWrappers.put(player, wrapper);
    }
    if (!(wrapper instanceof PlayerWrapper)) {
        // Exception is better in this case as we need to know where this mistake happened
        throw new IllegalArgumentException("Tried to get PlayerWrapper from player which didn't have PlayerWrapper (only EntityWrapper)...?");
    }
    return (PlayerWrapper) wrapper;
}
Also used : EntityWrapper(me.deecaad.weaponmechanics.wrappers.EntityWrapper) PlayerWrapper(me.deecaad.weaponmechanics.wrappers.PlayerWrapper)

Example 2 with EntityWrapper

use of me.deecaad.weaponmechanics.wrappers.EntityWrapper 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)

Example 3 with EntityWrapper

use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.

the class WeaponMechanicsAPI method getScopeLevel.

/**
 * Returns how far the <code>entity</code> is zooming in. 0 means that the
 * entity is not scoping at all. Any other number means that the entity is
 * scoping.
 *
 * @param entity The non-null living entity to check the scope state of.
 * @return The non-negative zoom amount.
 * @see EntityWrapper
 * @see PlayerWrapper
 */
@Nonnegative
public static int getScopeLevel(@Nonnull LivingEntity entity) {
    checkState();
    notNull(entity);
    EntityWrapper wrapper = WeaponMechanics.getEntityWrapper(entity, true);
    if (wrapper == null)
        return 0;
    return Math.max(wrapper.getMainHandData().getZoomData().getZoomAmount(), wrapper.getOffHandData().getZoomData().getZoomAmount());
}
Also used : EntityWrapper(me.deecaad.weaponmechanics.wrappers.EntityWrapper) Nonnegative(javax.annotation.Nonnegative)

Example 4 with EntityWrapper

use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.

the class WeaponListeners method equip.

@EventHandler
public void equip(EntityEquipmentEvent e) {
    if (e.isArmor())
        return;
    LivingEntity entity = (LivingEntity) e.getEntity();
    EntityWrapper entityWrapper = WeaponMechanics.getEntityWrapper(entity);
    ItemStack weaponStack = e.getEquipped();
    // Also try auto converting to weapon
    String weaponTitle = weaponHandler.getInfoHandler().getWeaponTitle(weaponStack, true);
    boolean alreadyUsedEquipMechanics = false;
    boolean mainhand = e.getSlot() == EquipmentSlot.HAND;
    HandData handData = mainhand ? entityWrapper.getMainHandData() : entityWrapper.getOffHandData();
    handData.setCurrentWeaponTitle(weaponTitle);
    if (weaponTitle != null) {
        if (e.getEntityType() == EntityType.PLAYER) {
            WeaponInfoDisplay weaponInfoDisplay = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Info_Display", WeaponInfoDisplay.class);
            if (weaponInfoDisplay != null)
                weaponInfoDisplay.send((PlayerWrapper) entityWrapper, e.getSlot());
        }
        weaponHandler.getSkinHandler().tryUse(entityWrapper, weaponTitle, weaponStack, e.getSlot());
        Mechanics equipMechanics = getConfigurations().getObject(weaponTitle + ".Info.Weapon_Equip_Mechanics", Mechanics.class);
        if (equipMechanics != null) {
            equipMechanics.use(new CastData(entityWrapper, weaponTitle, weaponStack));
            alreadyUsedEquipMechanics = true;
        }
        handData.setLastEquipTime(System.currentTimeMillis());
        if (getConfigurations().getBool(weaponTitle + ".Info.Show_Cooldown.Weapon_Equip_Delay") && e.getEntityType() == EntityType.PLAYER) {
            CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, weaponStack.getType(), getConfigurations().getInt(weaponTitle + ".Info.Weapon_Equip_Delay") / 50);
        } else if (CompatibilityAPI.getEntityCompatibility().hasCooldown((Player) entity, weaponStack.getType())) {
            CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, weaponStack.getType(), 0);
        }
        Bukkit.getPluginManager().callEvent(new WeaponEquipEvent(weaponTitle, weaponStack, entity, e.getSlot() == EquipmentSlot.HAND));
    }
    ItemStack dequipped = e.getDequipped();
    String dequippedWeapon = weaponHandler.getInfoHandler().getWeaponTitle(dequipped, false);
    if (dequippedWeapon != null) {
        // Don't use holster mechanics is equip mechanics were already used
        if (!alreadyUsedEquipMechanics) {
            Mechanics holsterMechanics = getConfigurations().getObject(dequippedWeapon + ".Info.Weapon_Holster_Mechanics", Mechanics.class);
            if (holsterMechanics != null)
                holsterMechanics.use(new CastData(entityWrapper, dequippedWeapon, dequipped));
        }
        if (weaponTitle == null && CompatibilityAPI.getEntityCompatibility().hasCooldown((Player) entity, dequipped.getType())) {
            CompatibilityAPI.getEntityCompatibility().setCooldown((Player) entity, dequipped.getType(), 0);
        }
    }
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) CastData(me.deecaad.weaponmechanics.mechanics.CastData) Player(org.bukkit.entity.Player) WeaponEquipEvent(me.deecaad.weaponmechanics.weapon.weaponevents.WeaponEquipEvent) EntityWrapper(me.deecaad.weaponmechanics.wrappers.EntityWrapper) Mechanics(me.deecaad.weaponmechanics.mechanics.Mechanics) WeaponMechanics(me.deecaad.weaponmechanics.WeaponMechanics) WeaponInfoDisplay(me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay) PlayerWrapper(me.deecaad.weaponmechanics.wrappers.PlayerWrapper) ItemStack(org.bukkit.inventory.ItemStack) HandData(me.deecaad.weaponmechanics.wrappers.HandData) EventHandler(org.bukkit.event.EventHandler)

Example 5 with EntityWrapper

use of me.deecaad.weaponmechanics.wrappers.EntityWrapper in project MechanicsMain by WeaponMechanics.

the class WeaponListeners method click.

@EventHandler(ignoreCancelled = true)
public void click(InventoryClickEvent e) {
    if (!(e.getWhoClicked() instanceof Player))
        return;
    // Off hand is also considered as quickbar slot
    if (e.getSlotType() != InventoryType.SlotType.QUICKBAR)
        return;
    EntityWrapper entityWrapper = WeaponMechanics.getEntityWrapper(e.getWhoClicked());
    entityWrapper.getMainHandData().cancelTasks();
    entityWrapper.getOffHandData().cancelTasks();
}
Also used : Player(org.bukkit.entity.Player) EntityWrapper(me.deecaad.weaponmechanics.wrappers.EntityWrapper) EventHandler(org.bukkit.event.EventHandler)

Aggregations

EntityWrapper (me.deecaad.weaponmechanics.wrappers.EntityWrapper)17 CastData (me.deecaad.weaponmechanics.mechanics.CastData)4 Player (org.bukkit.entity.Player)4 EventHandler (org.bukkit.event.EventHandler)4 ItemStack (org.bukkit.inventory.ItemStack)4 PlayerWrapper (me.deecaad.weaponmechanics.wrappers.PlayerWrapper)3 LivingEntity (org.bukkit.entity.LivingEntity)3 Configuration (me.deecaad.core.file.Configuration)2 WeaponMechanics.getEntityWrapper (me.deecaad.weaponmechanics.WeaponMechanics.getEntityWrapper)2 EntityEquipment (org.bukkit.inventory.EntityEquipment)2 AtomicDouble (com.google.common.util.concurrent.AtomicDouble)1 ArrayList (java.util.ArrayList)1 Nonnegative (javax.annotation.Nonnegative)1 Nullable (javax.annotation.Nullable)1 WorldGuardCompatibility (me.deecaad.core.compatibility.worldguard.WorldGuardCompatibility)1 WeaponMechanics (me.deecaad.weaponmechanics.WeaponMechanics)1 Mechanics (me.deecaad.weaponmechanics.mechanics.Mechanics)1 BlockRegenSorter (me.deecaad.weaponmechanics.weapon.explode.regeneration.BlockRegenSorter)1 LayerDistanceSorter (me.deecaad.weaponmechanics.weapon.explode.regeneration.LayerDistanceSorter)1 WeaponInfoDisplay (me.deecaad.weaponmechanics.weapon.info.WeaponInfoDisplay)1