/** * Downgrades a skill owned by the player. The player must own the skill and it must not currently * be level 0 for the player to downgrade the skill. This will refund the skill point cost when * downgrading the skill. * * @param skill skill to downgrade * @return true if successfully downgraded, false otherwise */ public boolean downgradeSkill(Skill skill) { // Cannot be null if (skill == null) { return false; } // Must be a valid available skill PlayerSkill data = skills.get(skill.getName().toLowerCase()); if (data == null) { return false; } // Must not be a free skill if (data.getCost() == 0) { return false; } // Must not be required by another skill for (PlayerSkill s : skills.values()) { if (s.getData().getSkillReq() != null && s.getData().getSkillReq().equalsIgnoreCase(skill.getName()) && data.getLevel() <= s.getData().getSkillReqLevel()) { return false; } } int cost = skill.getCost(data.getLevel() - 1); if (data.getLevel() > 0) { // Upgrade event PlayerSkillDowngradeEvent event = new PlayerSkillDowngradeEvent(this, data, cost); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { return false; } // Apply upgrade data.getPlayerClass().givePoints(cost, PointSource.REFUND); data.addLevels(-1); // Passive calls Player player = getPlayer(); if (player != null && skill instanceof PassiveSkill) { if (data.getLevel() == 0) { ((PassiveSkill) skill).stopEffects(player, 1); } else { ((PassiveSkill) skill).update(player, data.getLevel() + 1, data.getLevel()); } } // Clear bindings if (data.getLevel() == 0) { clearBinds(skill); } return true; } else { return false; } }