Search in sources :

Example 11 with Stat

use of com.archyx.aureliumskills.stats.Stat in project AureliumSkills by Archy-X.

the class StorageProvider method applyData.

protected void applyData(PlayerData playerData, Map<Skill, Integer> levels, Map<Skill, Double> xpLevels) {
    for (Stat stat : plugin.getStatRegistry().getStats()) {
        playerData.setStatLevel(stat, 0);
    }
    // Apply to object if in memory
    for (Skill skill : Skills.values()) {
        int level = levels.get(skill);
        playerData.setSkillLevel(skill, level);
        playerData.setSkillXp(skill, xpLevels.get(skill));
        // Add stat levels
        plugin.getRewardManager().getRewardTable(skill).applyStats(playerData, level);
    }
    // Reload stats
    new StatLeveler(plugin).reloadStat(playerData.getPlayer(), Stats.HEALTH);
    new StatLeveler(plugin).reloadStat(playerData.getPlayer(), Stats.LUCK);
    new StatLeveler(plugin).reloadStat(playerData.getPlayer(), Stats.WISDOM);
    // Immediately save to file
    save(playerData.getPlayer(), false);
}
Also used : Skill(com.archyx.aureliumskills.skills.Skill) Stat(com.archyx.aureliumskills.stats.Stat) StatLeveler(com.archyx.aureliumskills.stats.StatLeveler)

Example 12 with Stat

use of com.archyx.aureliumskills.stats.Stat in project AureliumSkills by Archy-X.

the class PlaceholderSupport method onPlaceholderRequest.

@Override
public String onPlaceholderRequest(Player player, String identifier) {
    if (player == null) {
        return "";
    }
    // Gets total combined skill level
    if (identifier.equals("power")) {
        PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
        if (playerData != null) {
            return String.valueOf(playerData.getPowerLevel());
        }
    }
    // Gets HP with scaling as an integer
    if (identifier.equals("hp")) {
        return String.valueOf(Math.round(player.getHealth() * OptionL.getDouble(Option.HEALTH_HP_INDICATOR_SCALING)));
    }
    // Gets HP with scaling with 1 decimal
    if (identifier.equals("hp_1")) {
        return NumberUtil.format1(player.getHealth() * OptionL.getDouble(Option.HEALTH_HP_INDICATOR_SCALING));
    }
    // Gets max hp
    if (identifier.equals("hp_max")) {
        AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
        if (attribute != null) {
            return String.valueOf(Math.round(attribute.getValue() * OptionL.getDouble(Option.HEALTH_HP_INDICATOR_SCALING)));
        } else {
            return "";
        }
    }
    // Gets HP with scaling with 2 decimal
    if (identifier.equals("hp_2")) {
        return NumberUtil.format2(player.getHealth() * OptionL.getDouble(Option.HEALTH_HP_INDICATOR_SCALING));
    }
    // Gets HP Percent as an integer
    if (identifier.equals("hp_percent")) {
        AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
        if (attribute != null) {
            return String.valueOf(Math.round(player.getHealth() / attribute.getValue()));
        } else {
            return "";
        }
    }
    // Gets mana
    if (identifier.equals("mana")) {
        PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
        if (playerData != null) {
            return String.valueOf(playerData.getMana());
        }
    }
    // Gets mana rounded to an integer
    if (identifier.equals("mana_int")) {
        PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
        if (playerData != null) {
            return String.valueOf(Math.round(playerData.getMana()));
        }
    }
    // Gets max mana
    if (identifier.equals("mana_max")) {
        PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
        if (playerData != null) {
            return String.valueOf(playerData.getMaxMana());
        }
    }
    // Gets max mana rounded to an integer
    if (identifier.equals("mana_max_int")) {
        PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
        if (playerData != null) {
            return String.valueOf(Math.round(playerData.getMaxMana()));
        }
    }
    // Gets stat values
    for (Stat stat : plugin.getStatRegistry().getStats()) {
        if (identifier.equals(stat.name().toLowerCase(Locale.ENGLISH))) {
            PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
            if (playerData != null) {
                return String.valueOf(playerData.getStatLevel(stat));
            }
        } else if (identifier.equals(stat.name().toLowerCase(Locale.ROOT) + "_int")) {
            PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
            if (playerData != null) {
                return String.valueOf(Math.round(playerData.getStatLevel(stat)));
            }
        }
    }
    // Gets skill levels
    for (Skill skill : plugin.getSkillRegistry().getSkills()) {
        if (identifier.equals(skill.name().toLowerCase(Locale.ENGLISH))) {
            PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
            if (playerData != null) {
                return String.valueOf(playerData.getSkillLevel(skill));
            }
        } else if (identifier.equals(skill.name().toLowerCase(Locale.ENGLISH) + "_roman")) {
            PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
            if (playerData != null) {
                return RomanNumber.toRoman(playerData.getSkillLevel(skill));
            }
        }
    }
    if (identifier.startsWith("lb_")) {
        String leaderboardType = TextUtil.replace(identifier, "lb_", "");
        if (leaderboardType.startsWith("power_")) {
            int place = NumberUtils.toInt(TextUtil.replace(leaderboardType, "power_", ""));
            if (place > 0) {
                List<SkillValue> list = plugin.getLeaderboardManager().getPowerLeaderboard(place, 1);
                if (list.size() > 0) {
                    SkillValue skillValue = list.get(0);
                    String name = Bukkit.getOfflinePlayer(skillValue.getId()).getName();
                    return (name != null ? name : "?") + " - " + skillValue.getLevel();
                } else
                    return "";
            } else {
                if (identifier.endsWith("name")) {
                    int namePlace = NumberUtils.toInt(TextUtil.replace(leaderboardType, "power_", "", "_name", ""));
                    if (namePlace > 0) {
                        List<SkillValue> list = plugin.getLeaderboardManager().getPowerLeaderboard(namePlace, 1);
                        if (list.size() > 0) {
                            SkillValue skillValue = list.get(0);
                            String name = Bukkit.getOfflinePlayer(skillValue.getId()).getName();
                            return name != null ? name : "?";
                        } else
                            return "";
                    }
                } else if (identifier.endsWith("value")) {
                    int valuePlace = NumberUtils.toInt(TextUtil.replace(leaderboardType, "power_", "", "_value", ""));
                    if (valuePlace > 0) {
                        List<SkillValue> list = plugin.getLeaderboardManager().getPowerLeaderboard(valuePlace, 1);
                        if (list.size() > 0) {
                            SkillValue playerSkill = list.get(0);
                            return String.valueOf(playerSkill.getLevel());
                        } else
                            return "";
                    }
                }
            }
        } else {
            for (Skill skill : plugin.getSkillRegistry().getSkills()) {
                if (leaderboardType.startsWith(skill.name().toLowerCase(Locale.ENGLISH) + "_")) {
                    int place = NumberUtils.toInt(TextUtil.replace(leaderboardType, skill.name().toLowerCase(Locale.ENGLISH) + "_", ""));
                    if (place > 0) {
                        List<SkillValue> list = plugin.getLeaderboardManager().getLeaderboard(skill, 1, 1);
                        if (list.size() > 0) {
                            SkillValue skillValue = list.get(0);
                            String name = Bukkit.getOfflinePlayer(skillValue.getId()).getName();
                            return (name != null ? name : "?") + " - " + skillValue.getLevel();
                        } else
                            return "";
                    } else {
                        if (identifier.endsWith("name")) {
                            int namePlace = NumberUtils.toInt(TextUtil.replace(leaderboardType, skill.name().toLowerCase(Locale.ENGLISH) + "_", "", "_name", ""));
                            if (namePlace > 0) {
                                List<SkillValue> list = plugin.getLeaderboardManager().getLeaderboard(skill, namePlace, 1);
                                if (list.size() > 0) {
                                    SkillValue skillValue = list.get(0);
                                    String name = Bukkit.getOfflinePlayer(skillValue.getId()).getName();
                                    return name != null ? name : "?";
                                } else
                                    return "";
                            }
                        } else if (identifier.endsWith("value")) {
                            int valuePlace = NumberUtils.toInt(TextUtil.replace(leaderboardType, skill.name().toLowerCase(Locale.ENGLISH) + "_", "", "_value", ""));
                            if (valuePlace > 0) {
                                List<SkillValue> list = plugin.getLeaderboardManager().getLeaderboard(skill, valuePlace, 1);
                                if (list.size() > 0) {
                                    SkillValue skillValue = list.get(0);
                                    return String.valueOf(skillValue.getLevel());
                                } else
                                    return "";
                            }
                        }
                    }
                }
            }
        }
    }
    if (identifier.equals("rank")) {
        return String.valueOf(plugin.getLeaderboardManager().getPowerRank(player.getUniqueId()));
    }
    if (identifier.startsWith("rank_")) {
        String skillName = TextUtil.replace(identifier, "rank_", "");
        Skill skill = plugin.getSkillRegistry().getSkill(skillName);
        if (skill != null) {
            return String.valueOf(plugin.getLeaderboardManager().getSkillRank(skill, player.getUniqueId()));
        }
    }
    for (String id : xpIdentifiers) {
        if (identifier.startsWith(id)) {
            String skillName = TextUtil.replace(identifier, id, "");
            Skill skill = plugin.getSkillRegistry().getSkill(skillName);
            if (skill != null) {
                PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
                if (playerData != null) {
                    switch(id) {
                        case "xp_required_formatted_":
                            return BigNumber.withSuffix(plugin.getLeveler().getXpRequirements().getXpRequired(skill, playerData.getSkillLevel(skill) + 1));
                        case "xp_required_":
                            return String.valueOf(plugin.getLeveler().getXpRequirements().getXpRequired(skill, playerData.getSkillLevel(skill) + 1));
                        case "xp_progress_int_":
                            return String.valueOf(Math.round(playerData.getSkillXp(skill) / (double) (plugin.getLeveler().getXpRequirements().getXpRequired(skill, playerData.getSkillLevel(skill) + 1)) * 100));
                        case "xp_progress_1_":
                            return NumberUtil.format1(playerData.getSkillXp(skill) / (double) (plugin.getLeveler().getXpRequirements().getXpRequired(skill, playerData.getSkillLevel(skill) + 1)) * 100);
                        case "xp_progress_":
                            return String.valueOf(playerData.getSkillXp(skill) / (double) (plugin.getLeveler().getXpRequirements().getXpRequired(skill, playerData.getSkillLevel(skill) + 1)) * 100);
                        case "xp_int_":
                            return String.valueOf(Math.round(playerData.getSkillXp(skill)));
                        case "xp_formatted_":
                            return BigNumber.withSuffix(Math.round(playerData.getSkillXp(skill)));
                        case "xp_":
                            return String.valueOf(playerData.getSkillXp(skill));
                    }
                }
            }
        }
    }
    if (identifier.startsWith("multiplier")) {
        if (identifier.equals("multiplier")) {
            return NumberUtil.format2(plugin.getLeveler().getMultiplier(player));
        }
        String skillName = TextUtil.replace(identifier, "multiplier_", "");
        Skill skill = plugin.getSkillRegistry().getSkill(skillName);
        if (skill != null) {
            return NumberUtil.format2(plugin.getLeveler().getMultiplier(player, skill));
        }
    }
    if (identifier.startsWith("multiplier_percent")) {
        if (identifier.equals("multiplier_percent")) {
            return String.valueOf(Math.round((plugin.getLeveler().getMultiplier(player) - 1) * 100));
        }
        String skillName = TextUtil.replace(identifier, "multiplier_percent_", "");
        Skill skill = plugin.getSkillRegistry().getSkill(skillName);
        if (skill != null) {
            return String.valueOf(Math.round((plugin.getLeveler().getMultiplier(player, skill) - 1) * 100));
        }
    }
    return null;
}
Also used : Skill(com.archyx.aureliumskills.skills.Skill) Stat(com.archyx.aureliumskills.stats.Stat) AttributeInstance(org.bukkit.attribute.AttributeInstance) List(java.util.List) SkillValue(com.archyx.aureliumskills.leaderboard.SkillValue) PlayerData(com.archyx.aureliumskills.data.PlayerData)

Example 13 with Stat

use of com.archyx.aureliumskills.stats.Stat in project AureliumSkills by Archy-X.

the class Leveler method updateStats.

public void updateStats(Player player) {
    PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
    if (playerData == null)
        return;
    for (Stat stat : plugin.getStatRegistry().getStats()) {
        playerData.setStatLevel(stat, 0);
    }
    for (Skill skill : plugin.getSkillRegistry().getSkills()) {
        plugin.getRewardManager().getRewardTable(skill).applyStats(playerData, playerData.getSkillLevel(skill));
    }
    // Reloads modifiers
    for (String key : playerData.getStatModifiers().keySet()) {
        StatModifier modifier = playerData.getStatModifiers().get(key);
        playerData.addStatLevel(modifier.getStat(), modifier.getValue());
    }
    statLeveler.reloadStat(player, Stats.HEALTH);
    statLeveler.reloadStat(player, Stats.WISDOM);
}
Also used : StatModifier(com.archyx.aureliumskills.modifier.StatModifier) Skill(com.archyx.aureliumskills.skills.Skill) Stat(com.archyx.aureliumskills.stats.Stat) PlayerData(com.archyx.aureliumskills.data.PlayerData)

Example 14 with Stat

use of com.archyx.aureliumskills.stats.Stat in project AureliumSkills by Archy-X.

the class ItemListener method scheduleTask.

public void scheduleTask() {
    new BukkitRunnable() {

        @Override
        public void run() {
            // For every player
            for (Player player : Bukkit.getOnlinePlayers()) {
                // Gets stored and held items
                ItemStack stored = heldItems.get(player.getUniqueId());
                ItemStack held = player.getInventory().getItemInMainHand();
                // If stored item is not null
                if (stored != null) {
                    // If stored item is different than held
                    if (!stored.equals(held)) {
                        Set<Stat> statsToReload = new HashSet<>();
                        // Remove modifiers from stored item
                        if (!stored.getType().equals(Material.AIR)) {
                            PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
                            if (playerData != null) {
                                for (StatModifier modifier : modifiers.getModifiers(ModifierType.ITEM, stored)) {
                                    playerData.removeStatModifier(modifier.getName(), false);
                                    statsToReload.add(modifier.getStat());
                                }
                                for (Multiplier multiplier : multipliers.getMultipliers(ModifierType.ITEM, stored)) {
                                    playerData.removeMultiplier(multiplier.getName());
                                }
                                // Remove valor
                                if (ItemUtils.isAxe(stored.getType())) {
                                    foragingAbilities.removeValor(playerData);
                                }
                                // Remove stamina
                                if (ItemUtils.isPickaxe(stored.getType())) {
                                    miningAbilities.removeStamina(playerData);
                                }
                            }
                        }
                        // Add modifiers from held item
                        if (!held.getType().equals(Material.AIR)) {
                            if (OptionL.getBoolean(Option.MODIFIER_AUTO_CONVERT_FROM_LEGACY)) {
                                held = requirements.convertFromLegacy(modifiers.convertFromLegacy(held));
                                if (!held.equals(player.getInventory().getItemInMainHand())) {
                                    player.getInventory().setItemInMainHand(held);
                                }
                            }
                            PlayerData playerData = plugin.getPlayerManager().getPlayerData(player);
                            if (playerData != null) {
                                if (requirements.meetsRequirements(ModifierType.ITEM, held, player)) {
                                    for (StatModifier modifier : modifiers.getModifiers(ModifierType.ITEM, held)) {
                                        playerData.addStatModifier(modifier, false);
                                        statsToReload.add(modifier.getStat());
                                    }
                                    for (Multiplier multiplier : multipliers.getMultipliers(ModifierType.ITEM, held)) {
                                        playerData.addMultiplier(multiplier);
                                    }
                                }
                                // Apply valor
                                if (ItemUtils.isAxe(held.getType())) {
                                    foragingAbilities.applyValor(playerData);
                                }
                                // Apply stamina
                                if (ItemUtils.isPickaxe(held.getType())) {
                                    miningAbilities.applyStamina(playerData);
                                }
                            }
                        }
                        for (Stat stat : statsToReload) {
                            statLeveler.reloadStat(player, stat);
                        }
                        // Set stored item to held item
                        heldItems.put(player.getUniqueId(), held.clone());
                    }
                } else // If no mapping exists, add held item
                {
                    heldItems.put(player.getUniqueId(), held.clone());
                }
            }
        }
    }.runTaskTimer(plugin, 0L, OptionL.getInt(Option.MODIFIER_ITEM_CHECK_PERIOD));
    scheduleOffHandTask();
}
Also used : Player(org.bukkit.entity.Player) Stat(com.archyx.aureliumskills.stats.Stat) BukkitRunnable(org.bukkit.scheduler.BukkitRunnable) ItemStack(org.bukkit.inventory.ItemStack) PlayerData(com.archyx.aureliumskills.data.PlayerData)

Example 15 with Stat

use of com.archyx.aureliumskills.stats.Stat in project AureliumSkills by Archy-X.

the class Modifiers method getModifiers.

public List<StatModifier> getModifiers(ModifierType type, ItemStack item) {
    if (isNBTDisabled())
        return new ArrayList<>();
    NBTItem nbtItem = new NBTItem(item);
    List<StatModifier> modifiers = new ArrayList<>();
    NBTCompound compound = ItemUtils.getModifiersTypeCompound(nbtItem, type);
    for (String key : compound.getKeys()) {
        Stat stat = plugin.getStatRegistry().getStat(key);
        if (stat != null) {
            double value = compound.getDouble(key);
            if (type == ModifierType.ITEM) {
                modifiers.add(new StatModifier("AureliumSkills.Modifiers.Item." + getName(stat), stat, value));
            } else if (type == ModifierType.ARMOR) {
                String slot = "Helmet";
                String mat = item.getType().toString();
                if (mat.contains("CHESTPLATE")) {
                    slot = "Chestplate";
                } else if (mat.contains("LEGGINGS")) {
                    slot = "Leggings";
                } else if (mat.contains("BOOTS")) {
                    slot = "Boots";
                }
                modifiers.add(new StatModifier("AureliumSkills.Modifiers.Armor." + slot + "." + getName(stat), stat, value));
            }
        }
    }
    return modifiers;
}
Also used : Stat(com.archyx.aureliumskills.stats.Stat) ArrayList(java.util.ArrayList) NBTCompound(de.tr7zw.changeme.nbtapi.NBTCompound) NBTItem(de.tr7zw.changeme.nbtapi.NBTItem)

Aggregations

Stat (com.archyx.aureliumskills.stats.Stat)16 PlayerData (com.archyx.aureliumskills.data.PlayerData)7 Skill (com.archyx.aureliumskills.skills.Skill)5 ItemStack (org.bukkit.inventory.ItemStack)5 ArrayList (java.util.ArrayList)4 StatModifier (com.archyx.aureliumskills.modifier.StatModifier)3 BukkitRunnable (org.bukkit.scheduler.BukkitRunnable)3 AbstractAbility (com.archyx.aureliumskills.ability.AbstractAbility)2 AbilityData (com.archyx.aureliumskills.data.AbilityData)2 PlayerDataLoadEvent (com.archyx.aureliumskills.data.PlayerDataLoadEvent)2 KeyIntPair (com.archyx.aureliumskills.util.misc.KeyIntPair)2 NBTCompound (de.tr7zw.changeme.nbtapi.NBTCompound)2 NBTItem (de.tr7zw.changeme.nbtapi.NBTItem)2 IOException (java.io.IOException)2 List (java.util.List)2 Player (org.bukkit.entity.Player)2 ItemMeta (org.bukkit.inventory.meta.ItemMeta)2 AureliumSkills (com.archyx.aureliumskills.AureliumSkills)1 CommandMessage (com.archyx.aureliumskills.lang.CommandMessage)1 Lang (com.archyx.aureliumskills.lang.Lang)1