API
Como integrar o ySkills em seus plugins
API
O ySkills oferece uma API completa para desenvolvedores que desejam integrar o sistema de skills em seus próprios plugins.
Requisito
Para usar a API, adicione o ySkills como dependência no seu plugin.yml:
depend: [ySkills]ou
softdepend: [ySkills]Obtendo a API
Método 1: Através do Main
import com.ystoreplugins.yskills.Main;
import com.ystoreplugins.yskills.api.SkillAPI;
public class SeuPlugin extends JavaPlugin {
private SkillAPI skillAPI;
@Override
public void onEnable() {
if (getServer().getPluginManager().getPlugin("ySkills") != null) {
skillAPI = Main.get().getSkillAPI();
getLogger().info("ySkills API carregada com sucesso!");
}
}
}Método 2: Através do SkillAPIHolder
import br.com.ystoreplugins.product.yskills.SkillAPIHolder;
SkillAPIHolder api = Main.get().getSkillAPI();Métodos da API
Informações de Skills
Obter uma Skill
/**
* Obtém uma skill pelo identificador
* @param skillKey Identificador da skill (ex: "mining", "swords")
* @return A skill ou null se não encontrada
*/
SkillHolder getSkill(String skillKey);
// Exemplo
SkillHolder mining = api.getSkill("mining");
if (mining != null) {
String displayName = mining.getDisplayName(); // &eMineração
}Obter Todas as Skills
/**
* Obtém todas as skills registradas
* @return HashMap com todas as skills (key -> Skill)
*/
HashMap<String, SkillHolder> getAllSkills();
// Exemplo
for (SkillHolder skill : api.getAllSkills().values()) {
player.sendMessage(skill.getDisplayName());
}Verificar se Skill Existe
/**
* Verifica se uma skill existe
* @param skillKey Identificador da skill
* @return true se a skill existe
*/
boolean skillExists(String skillKey);
// Exemplo
if (api.skillExists("mining")) {
// Fazer algo
}Dados do Jogador
Obter Dados de um Jogador
/**
* Obtém os dados de skill de um jogador
* @param player Jogador
* @return PlayerSkill ou null se não encontrado
*/
PlayerSkillHolder getPlayerSkill(Player player);
// Exemplo
PlayerSkillHolder playerSkill = api.getPlayerSkill(player);
if (playerSkill != null) {
double totalXP = playerSkill.getTotalXp();
double totalLevel = playerSkill.getTotalLevel();
}Obter Nível em uma Skill
/**
* Obtém o nível de uma skill específica
* @param player Jogador
* @param skillKey Identificador da skill
* @return Nível do jogador na skill, ou 0 se não encontrado
*/
int getPlayerLevel(Player player, String skillKey);
// Exemplo
int miningLevel = api.getPlayerLevel(player, "mining");
player.sendMessage("Seu nível de mineração: " + miningLevel);Obter XP em uma Skill
/**
* Obtém o XP de uma skill específica
* @param player Jogador
* @param skillKey Identificador da skill
* @return XP do jogador na skill, ou 0 se não encontrado
*/
double getPlayerXP(Player player, String skillKey);
// Exemplo
double miningXP = api.getPlayerXP(player, "mining");Obter XP Necessário para Próximo Nível
/**
* Obtém o XP necessário para o próximo nível
* @param player Jogador
* @param skillKey Identificador da skill
* @return XP necessário
*/
double getXPToNextLevel(Player player, String skillKey);
// Exemplo
double needed = api.getXPToNextLevel(player, "mining");
player.sendMessage("Faltam " + needed + " XP para o próximo nível");Manipulação de XP
Adicionar XP
/**
* Adiciona XP a uma skill
* @param player Jogador
* @param skillKey Identificador da skill
* @param xp Quantidade de XP a adicionar
* @return true se a operação foi bem-sucedida
*/
boolean addXP(Player player, String skillKey, double xp);
// Exemplo
boolean success = api.addXP(player, "mining", 100.0);
if (success) {
player.sendMessage("§a+100 XP em Mineração!");
}Remover XP
/**
* Remove XP de uma skill
* @param player Jogador
* @param skillKey Identificador da skill
* @param xp Quantidade de XP a remover
* @return true se a operação foi bem-sucedida
*/
boolean removeXP(Player player, String skillKey, double xp);
// Exemplo
api.removeXP(player, "mining", 50.0);Definir XP
/**
* Define o XP de uma skill
* @param player Jogador
* @param skillKey Identificador da skill
* @param xp Quantidade de XP a definir
* @return true se a operação foi bem-sucedida
*/
boolean setXP(Player player, String skillKey, double xp);
// Exemplo
api.setXP(player, "mining", 10000.0);Totais do Jogador
Nível Total
/**
* Obtém o nível total (soma de todas as skills)
* @param player Jogador
* @return Nível total
*/
double getTotalLevel(Player player);
// Exemplo
double total = api.getTotalLevel(player);
player.sendMessage("Nível total: " + total);XP Total
/**
* Obtém o XP total (soma de todas as skills)
* @param player Jogador
* @return XP total
*/
double getTotalXP(Player player);Sistema de Boosters
Obter Multiplicador Total
/**
* Obtém o multiplicador total (global * individual)
* @param player Jogador
* @param skillKey Identificador da skill
* @return Multiplicador total
*/
double getBoosterMultiplier(Player player, String skillKey);
// Exemplo
double mult = api.getBoosterMultiplier(player, "mining");
// Se global = 2x e individual = 1.5x, retorna 3.0Verificar Boosters Ativos
/**
* Verifica se há booster global ativo
* @return true se houver
*/
boolean hasActiveGlobalBooster();
/**
* Verifica se o jogador tem booster individual
* @param player Jogador
* @return true se tiver
*/
boolean hasActiveIndividualBooster(Player player);
// Exemplo
if (api.hasActiveGlobalBooster()) {
player.sendMessage("§6Booster global ativo!");
}Obter Boosters Ativos
/**
* Obtém todos os boosters globais ativos
* @return Lista de boosters
*/
List<BoosterHolder> getActiveGlobalBoosters();
/**
* Obtém todos os boosters individuais do jogador
* @param player Jogador
* @return Lista de boosters
*/
List<BoosterHolder> getActiveIndividualBoosters(Player player);
// Exemplo
for (BoosterHolder booster : api.getActiveGlobalBoosters()) {
player.sendMessage("Booster: " + booster.getMultiplier() + "x");
}Sistema de Requisitos
Verificar Requisito
/**
* Verifica se o jogador atende ao requisito
* @param player Jogador
* @param target Tipo do bloco/mob (ex: "DIAMOND_ORE", "WITHER")
* @param isBlock true se for bloco, false se for mob
* @return true se atende ao requisito
*/
boolean meetsRequirement(Player player, String target, boolean isBlock);
// Exemplo - Verificar se pode quebrar diamante
if (!api.meetsRequirement(player, "DIAMOND_ORE", true)) {
player.sendMessage("§cVocê não tem nível suficiente!");
event.setCancelled(true);
}
// Exemplo - Verificar se pode atacar Wither
if (!api.meetsRequirement(player, "WITHER", false)) {
player.sendMessage("§cVocê não pode atacar este mob!");
event.setCancelled(true);
}Obter Requisitos
/**
* Obtém o requisito de um bloco
* @param blockType Tipo do bloco
* @return SkillRequirement ou null
*/
SkillRequirement getBlockRequirement(String blockType);
/**
* Obtém o requisito de um mob
* @param mobType Tipo do mob
* @return SkillRequirement ou null
*/
SkillRequirement getMobRequirement(String mobType);
// Exemplo
SkillRequirement req = api.getBlockRequirement("DIAMOND_ORE");
if (req != null) {
Map<String, Integer> requirements = req.getRequirements();
// mining -> 20
}Sistema de Habilidades
Verificar se tem Habilidade
/**
* Verifica se o jogador tem uma habilidade desbloqueada
* @param player Jogador
* @param skillKey Identificador da skill
* @param abilityKey Identificador da habilidade
* @return true se está desbloqueada
*/
boolean hasAbility(Player player, String skillKey, String abilityKey);
// Exemplo
if (api.hasAbility(player, "mining", "super_breaker")) {
// Jogador tem Super Breaker
}Obter Nível da Habilidade
/**
* Obtém o nível de uma habilidade
* @param player Jogador
* @param skillKey Identificador da skill
* @param abilityKey Identificador da habilidade
* @return Nível da habilidade, ou 0 se não desbloqueada
*/
int getAbilityLevel(Player player, String skillKey, String abilityKey);
// Exemplo
int level = api.getAbilityLevel(player, "mining", "double_drop");
double dropChance = 5.0 + (level * 2.0); // 5% base + 2% por nívelSistema de Ranking
Obter Posição no Ranking
/**
* Obtém a posição do jogador no ranking
* @param player Jogador
* @param skillKey Identificador da skill
* @return Posição (1-based), ou -1 se não encontrado
*/
int getPlayerRankPosition(Player player, String skillKey);
// Exemplo
int pos = api.getPlayerRankPosition(player, "mining");
if (pos == 1) {
player.sendMessage("§6Você é o TOP 1 em Mineração!");
}Obter Top Jogadores
/**
* Obtém o top X jogadores de uma skill
* @param skillKey Identificador da skill
* @param limit Número máximo de jogadores
* @return Lista ordenada de PlayerSkill
*/
List<PlayerSkillHolder> getTopPlayers(String skillKey, int limit);
// Exemplo - Top 10 Mining
List<PlayerSkillHolder> top10 = api.getTopPlayers("mining", 10);
int position = 1;
for (PlayerSkillHolder ps : top10) {
player.sendMessage(position + "º - " + ps.getPlayerName());
position++;
}Eventos da API
O ySkills dispara vários eventos que você pode escutar:
SkillXPGainEvent
Disparado quando um jogador ganha XP em uma skill.
import br.com.ystoreplugins.product.yskills.event.SkillXPGainEvent;
@EventHandler
public void onSkillXPGain(SkillXPGainEvent event) {
Player player = event.getPlayer();
SkillHolder skill = event.getSkill();
double xpGained = event.getXp();
double xpBefore = event.getXpBefore();
double xpAfter = event.getXpAfter();
// Modificar XP ganho
event.setXp(xpGained * 2); // Dobra o XP
// Ou cancelar completamente
// event.setXp(0);
}SkillLevelUpEvent
Disparado quando um jogador sobe de nível em uma skill.
import br.com.ystoreplugins.product.yskills.event.SkillLevelUpEvent;
@EventHandler
public void onSkillLevelUp(SkillLevelUpEvent event) {
Player player = event.getPlayer();
SkillHolder skill = event.getSkill();
int oldLevel = event.getOldLevel();
int newLevel = event.getNewLevel();
int levelsGained = event.getLevelsGained();
player.sendMessage("§aParabéns! Você subiu para o nível " + newLevel + " em " + skill.getDisplayName());
// Dar recompensa personalizada
if (newLevel == 50) {
player.getInventory().addItem(new ItemStack(Material.DIAMOND, 10));
}
}AbilityUnlockEvent
Disparado quando um jogador desbloqueia uma habilidade.
import br.com.ystoreplugins.product.yskills.event.AbilityUnlockEvent;
@EventHandler
public void onAbilityUnlock(AbilityUnlockEvent event) {
Player player = event.getPlayer();
SkillHolder skill = event.getSkill();
AbilityHolder ability = event.getAbility();
int playerLevel = event.getPlayerLevel();
player.sendMessage("§6Nova habilidade desbloqueada: §f" + ability.getDisplayName());
}BoosterActivateEvent
Disparado quando um booster é ativado (pode ser cancelado).
import br.com.ystoreplugins.product.yskills.event.BoosterActivateEvent;
@EventHandler
public void onBoosterActivate(BoosterActivateEvent event) {
Player player = event.getPlayer(); // null se for global
BoosterHolder booster = event.getBooster();
boolean isGlobal = event.isGlobal();
double multiplier = event.getMultiplier();
// Cancelar ativação em determinadas condições
if (isGlobal && multiplier > 5.0) {
event.setCancelled(true);
return;
}
if (isGlobal) {
Bukkit.broadcastMessage("§6Booster global de " + multiplier + "x ativado!");
}
}RequirementCheckEvent
Disparado quando o sistema verifica um requisito (pode ser cancelado para permitir a ação).
import br.com.ystoreplugins.product.yskills.event.RequirementCheckEvent;
@EventHandler
public void onRequirementCheck(RequirementCheckEvent event) {
Player player = event.getPlayer();
String target = event.getTarget(); // DIAMOND_ORE, WITHER, etc
SkillRequirementHolder requirement = event.getRequirement();
boolean isBlock = event.isBlock();
boolean meetsRequirement = event.meetsRequirement();
// Permitir bypass para jogadores VIP
if (!meetsRequirement && player.hasPermission("vip.bypass.requirements")) {
event.setCancelled(true); // Cancela a restrição
player.sendMessage("§aVocê usou seu bypass VIP!");
}
}Exemplo Completo de Integração
package com.exemplo.meuplugin;
import com.ystoreplugins.yskills.Main;
import com.ystoreplugins.yskills.api.SkillAPI;
import br.com.ystoreplugins.product.yskills.event.SkillLevelUpEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
public class MeuPlugin extends JavaPlugin implements Listener {
private SkillAPI skillAPI;
@Override
public void onEnable() {
// Verificar se ySkills está instalado
if (getServer().getPluginManager().getPlugin("ySkills") == null) {
getLogger().severe("ySkills não encontrado! Desabilitando plugin.");
getServer().getPluginManager().disablePlugin(this);
return;
}
// Obter API
skillAPI = Main.get().getSkillAPI();
// Registrar eventos
getServer().getPluginManager().registerEvents(this, this);
getLogger().info("Integração com ySkills ativada!");
}
// Método customizado usando a API
public void darBonusVIP(Player player) {
// Dar bônus de XP para VIPs
if (player.hasPermission("vip.bonus")) {
skillAPI.addXP(player, "mining", 1000.0);
skillAPI.addXP(player, "swords", 1000.0);
player.sendMessage("§aVocê recebeu bônus VIP de XP!");
}
}
// Escutar evento de level up
@EventHandler
public void onLevelUp(SkillLevelUpEvent event) {
Player player = event.getPlayer();
int newLevel = event.getNewLevel();
// Dar recompensa a cada 10 níveis
if (newLevel % 10 == 0) {
// Executar comando customizado
getServer().dispatchCommand(getServer().getConsoleSender(),
"give " + player.getName() + " diamond 5");
player.sendMessage("§6Recompensa por atingir nível " + newLevel + "!");
}
}
// Verificar se pode fazer algo baseado no nível
public boolean podeUsarComando(Player player) {
int miningLevel = skillAPI.getPlayerLevel(player, "mining");
return miningLevel >= 50;
}
}Documentação Completa
Para ver todos os métodos disponíveis, consulte o JavaDoc da API ou examine o código fonte em:
com.ystoreplugins.yskills.api.SkillAPI
Maven/Gradle
Maven
<repositories>
<repository>
<id>ystoreplugins-repo</id>
<url>https://repo.ystoreplugins.com.br/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.ystoreplugins</groupId>
<artifactId>ySkills</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>Gradle
repositories {
maven {
url 'https://repo.ystoreplugins.com.br/'
}
}
dependencies {
compileOnly 'com.ystoreplugins:ySkills:1.0.0'
}Versão
Substitua 1.0.0 pela versão atual do ySkills que você está usando.