Search in sources :

Example 1 with BackpackImpl

use of de.Keyle.MyPet.skill.skills.BackpackImpl in project MyPet by xXKeyleXx.

the class MyPetEntityListener method onMyPet.

@EventHandler(priority = EventPriority.MONITOR)
public void onMyPet(final EntityDeathEvent event) {
    // noinspection ConstantConditions
    if (event.getEntity() == null) {
        // catch invalid events (i.e. EnchantmentAPI)
        return;
    }
    LivingEntity deadEntity = event.getEntity();
    if (WorldGroup.getGroupByWorld(deadEntity.getWorld()).isDisabled()) {
        return;
    }
    if (deadEntity instanceof MyPetBukkitEntity) {
        MyPet myPet = ((MyPetBukkitEntity) deadEntity).getMyPet();
        // check health for death events where the pet isn't really dead (/killall)
        if (myPet == null || myPet.getHealth() > 0) {
            return;
        }
        final MyPetPlayer owner = myPet.getOwner();
        if (MyPetApi.getMyPetInfo().getReleaseOnDeath(myPet.getPetType()) && !owner.isMyPetAdmin()) {
            MyPetRemoveEvent removeEvent = new MyPetRemoveEvent(myPet, MyPetRemoveEvent.Source.Death);
            Bukkit.getServer().getPluginManager().callEvent(removeEvent);
            if (myPet.getSkills().isActive(Backpack.class)) {
                CustomInventory inv = myPet.getSkills().get(Backpack.class).getInventory();
                inv.dropContentAt(myPet.getLocation().get());
            }
            if (myPet instanceof MyPetEquipment) {
                ((MyPetEquipment) myPet).dropEquipment();
            }
            myPet.removePet();
            owner.setMyPetForWorldGroup(WorldGroup.getGroupByWorld(owner.getPlayer().getWorld().getName()), null);
            myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Command.Release.Dead", owner), myPet.getPetName()));
            MyPetApi.getMyPetManager().deactivateMyPet(owner, false);
            MyPetApi.getRepository().removeMyPet(myPet.getUUID(), null);
            return;
        }
        myPet.setRespawnTime((Configuration.Respawn.TIME_FIXED + MyPetApi.getMyPetInfo().getCustomRespawnTimeFixed(myPet.getPetType())) + (myPet.getExperience().getLevel() * (Configuration.Respawn.TIME_FACTOR + MyPetApi.getMyPetInfo().getCustomRespawnTimeFactor(myPet.getPetType()))));
        myPet.setStatus(PetState.Dead);
        if (deadEntity.getLastDamageCause() instanceof EntityDamageByEntityEvent) {
            EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) deadEntity.getLastDamageCause();
            if (e.getDamager() instanceof Player) {
                myPet.setRespawnTime((Configuration.Respawn.TIME_PLAYER_FIXED + MyPetApi.getMyPetInfo().getCustomRespawnTimeFixed(myPet.getPetType())) + (myPet.getExperience().getLevel() * (Configuration.Respawn.TIME_PLAYER_FACTOR + MyPetApi.getMyPetInfo().getCustomRespawnTimeFactor(myPet.getPetType()))));
            } else if (e.getDamager() instanceof MyPetBukkitEntity) {
                MyPet killerMyPet = ((MyPetBukkitEntity) e.getDamager()).getMyPet();
                if (myPet.getSkills().isActive(Behavior.class) && killerMyPet.getSkills().isActive(Behavior.class)) {
                    Behavior killerBehaviorSkill = killerMyPet.getSkills().get(Behavior.class);
                    Behavior deadBehaviorSkill = myPet.getSkills().get(Behavior.class);
                    if (deadBehaviorSkill.getBehavior() == BehaviorMode.Duel && killerBehaviorSkill.getBehavior() == BehaviorMode.Duel) {
                        MyPetMinecraftEntity myPetEntity = ((MyPetBukkitEntity) deadEntity).getHandle();
                        if (e.getDamager().equals(myPetEntity.getMyPetTarget())) {
                            myPet.setRespawnTime(10);
                            killerMyPet.setHealth(Double.MAX_VALUE);
                        }
                    }
                }
            }
        }
        event.setDroppedExp(0);
        event.getDrops().clear();
        if (Configuration.LevelSystem.Experience.LOSS_FIXED > 0 || Configuration.LevelSystem.Experience.LOSS_PERCENT > 0) {
            double lostExpirience = Configuration.LevelSystem.Experience.LOSS_FIXED;
            lostExpirience += myPet.getExperience().getRequiredExp() * Configuration.LevelSystem.Experience.LOSS_PERCENT / 100;
            if (lostExpirience > myPet.getExp()) {
                lostExpirience = myPet.getExp();
            }
            if (myPet.getSkilltree() != null) {
                int requiredLevel = myPet.getSkilltree().getRequiredLevel();
                if (requiredLevel > 1) {
                    double minExp = myPet.getExperience().getExpByLevel(requiredLevel);
                    lostExpirience = myPet.getExp() - lostExpirience < minExp ? myPet.getExp() - minExp : lostExpirience;
                }
            }
            if (Configuration.LevelSystem.Experience.ALLOW_LEVEL_DOWNGRADE) {
                lostExpirience = myPet.getExperience().removeExp(lostExpirience);
            } else {
                lostExpirience = myPet.getExperience().removeCurrentExp(lostExpirience);
            }
            if (Configuration.LevelSystem.Experience.DROP_LOST_EXP && lostExpirience < 0) {
                event.setDroppedExp((int) (Math.abs(lostExpirience)));
            }
        }
        if (myPet.getSkills().isActive(Backpack.class)) {
            BackpackImpl inventorySkill = myPet.getSkills().get(BackpackImpl.class);
            inventorySkill.closeInventory();
            if (inventorySkill.getDropOnDeath().getValue() && !owner.isMyPetAdmin()) {
                inventorySkill.getInventory().dropContentAt(myPet.getLocation().get());
            }
        }
        sendDeathMessage(event);
        myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Spawn.Respawn.In", owner.getPlayer()), myPet.getPetName(), myPet.getRespawnTime()));
        if (MyPetApi.getHookHelper().isEconomyEnabled() && owner.hasAutoRespawnEnabled() && myPet.getRespawnTime() >= owner.getAutoRespawnMin() && Permissions.has(owner.getPlayer(), "MyPet.command.respawn")) {
            double costs = myPet.getRespawnTime() * Configuration.Respawn.COSTS_FACTOR + Configuration.Respawn.COSTS_FIXED;
            if (MyPetApi.getHookHelper().getEconomy().canPay(owner, costs)) {
                MyPetApi.getHookHelper().getEconomy().pay(owner, costs);
                myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Command.Respawn.Paid", owner.getPlayer()), myPet.getPetName(), costs + " " + MyPetApi.getHookHelper().getEconomy().currencyNameSingular()));
                myPet.setRespawnTime(1);
            } else {
                myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Command.Respawn.NoMoney", owner.getPlayer()), myPet.getPetName(), costs + " " + MyPetApi.getHookHelper().getEconomy().currencyNameSingular()));
            }
        }
    }
}
Also used : MyPetPlayer(de.Keyle.MyPet.api.player.MyPetPlayer) MyPetPlayer(de.Keyle.MyPet.api.player.MyPetPlayer) BackpackImpl(de.Keyle.MyPet.skill.skills.BackpackImpl) Backpack(de.Keyle.MyPet.api.skill.skills.Backpack) MyPetRemoveEvent(de.Keyle.MyPet.api.event.MyPetRemoveEvent) Behavior(de.Keyle.MyPet.api.skill.skills.Behavior) CustomInventory(de.Keyle.MyPet.api.util.inventory.CustomInventory) EventHandler(org.bukkit.event.EventHandler)

Aggregations

MyPetRemoveEvent (de.Keyle.MyPet.api.event.MyPetRemoveEvent)1 MyPetPlayer (de.Keyle.MyPet.api.player.MyPetPlayer)1 Backpack (de.Keyle.MyPet.api.skill.skills.Backpack)1 Behavior (de.Keyle.MyPet.api.skill.skills.Behavior)1 CustomInventory (de.Keyle.MyPet.api.util.inventory.CustomInventory)1 BackpackImpl (de.Keyle.MyPet.skill.skills.BackpackImpl)1 EventHandler (org.bukkit.event.EventHandler)1