Contenido generado con IA — puede contener errores.

Referencia

API

SpecialsService de exylia-api: ítems, cooldowns, combate, estados y duelos desde otro plugin, y los eventos que se lanzan al usar un ítem y en los duelos.

ExyliaSpecials registra SpecialsService, parte de exylia-api de ExyliaLib. Depende de exylia-api y busca el servicio; nunca dependas del jar de ExyliaSpecials.

import net.exylia.lib.api.ExyliaAPI;
import net.exylia.lib.api.specials.SpecialsService;
 
Optional<SpecialsService> specials = ExyliaAPI.get(SpecialsService.class);  // vacío si no está instalado
SpecialsService required = ExyliaAPI.require(SpecialsService.class);        // lanza una excepción si no está instalado

También se registra en el ServicesManager de Bukkit. Añade softdepend: [ExyliaSpecials] para que se active antes que tu plugin.

Ítems

Método
Set<String> itemIds()Cada id de ítem cargado, herramientas incluidas.
Optional<SpecialItem> item(String id)
Collection<SpecialItem> allItems()
boolean isSpecial(ItemStack)
Optional<String> idOf(ItemStack)
int usesLeft(ItemStack)-1 sin límite de usos, o para un ítem que no es especial.
Optional<ItemStack> createItem(String id, Player)Una copia con su límite por defecto, generada para ese jugador.
boolean giveItem(Player, String id, int amount)De 1 a 64. Lo que no cabe espera a la siguiente entrada. Al jugador sí se le avisa de que lo recibió.
boolean activate(Player, String id, @Nullable Player target)Ejecuta la primera feature del ítem en su trigger principal, como si se usara: se comprueban silencio, permiso, región y cooldown, y el cooldown empieza. No se gasta ningún uso. true si se ejecutó.

SpecialItem es un record: id(), material(), trigger(), maxUses() (-1 salvo que el límite sea USES), cooldownSeconds() (el más largo de sus features) y limitedUses().

trigger() es un TriggerType: los ítems de clic derecho, clic izquierdo, soltar, agacharse y romper bloques dan IMMEDIATE; los triggers de golpe, ON_HIT_PLAYER; TAKE_DAMAGE, ON_LAST_ATTACKER; CONSUME, AFTER_CONSUME; los de proyectil y arco, ON_PROJECTILE_LAUNCH, ON_PROJECTILE_HIT, ON_BOW_SHOOT; en la mano, llevados y pasivos, HOLD.

Cooldowns

Método
boolean onCooldown(Player, String id)
Duration cooldownRemaining(Player, String id)
void startCooldown(Player, String id, Duration)Lo fija; cero o menos lo quita. Un id desconocido no hace nada.
void clearCooldown(Player, String id)
void clearCooldowns(Player)Todos los cooldowns de ítems especiales.

Combate y estados

Método
boolean hasCombatSystem()Si hay un plugin de combate instalado (ExyliaCombat, DeluxeCombat o PvPManager).
boolean isInCombat(Player)
Duration combatRemaining(Player)
boolean isFrozen(Player)El estado FROZEN.
boolean isInvulnerable(Player)El estado INVULNERABLE.

Para poner a un jugador en combate usa Combat de ExyliaLib: responde el plugin de combate instalado. ExyliaSpecials ya no pone a nadie en combate por sí mismo.

Duelos

Método
boolean isInMatch(Player)Durante la cuenta atrás o la pelea.
Optional<SpecialsMatch> matchOf(Player)
Collection<SpecialsMatch> activeMatches()
boolean endMatch(String matchId)Lo termina sin resultado.

SpecialsMatch: matchId(), playerOne(), playerTwo(), arenaId(), itemId(), state(), durationMillis(), opponent(UUID) y contains(UUID). MatchState es CREATED, PREPARING, FIGHTING, ENDING o FINISHED.

Eventos

En net.exylia.lib.api.specials.event.

EventoSe lanza
SpecialItemUseEventCuando un uso ha pasado todas las comprobaciones, antes de que la feature se ejecute. Cancelable: si se cancela, no se ejecuta ni se gasta nada. player(), itemId(), trigger(), target() (un jugador o null), item(). También lo lanza activate.
OneVsOneStartEventCuando empieza la pelea de un duelo. match().
OneVsOneEndEventCuando termina un duelo. match(), result() y winner() (o null).

MatchResult es PLAYER_ONE_WIN, PLAYER_TWO_WIN, DRAW, DISCONNECT o ERROR (un duelo que no pudo empezar, o que se terminó desde la API o por un apagado).

@EventHandler
public void onUse(SpecialItemUseEvent event) {
    if (event.itemId().equals("flight") && isInEvent(event.player())) {
        event.setCancelled(true);
    }
}

¿Falta algo en esta página? Dínoslo en Discord