StellaStella

Stella API

##Stella API

La StellaAPI expone métodos estáticos para interactuar con Stella desde tu propio mod — consultar equipos, gestionar miembros, editar propiedades de equipos y comprobar membresías, todo sin crear una instancia.

INFO

En toda la API los jugadores se identifican por UUID. Usa StellaAPI.resolvePlayer(name) para convertir un nombre en UUID, y StellaAPI.getPlayerName(uuid) para lo inverso.


###Instalación

Añade el repositorio de JitPack y la dependencia. Reemplaza la versión con el último tag publicado.

repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
    modCompileOnly 'com.github.33drygo:StellaMod:1.0.0'
}
INFO

Usa modCompileOnly (no compileOnly) para que el plugin Fabric Loom trate a Stella como una dependencia de mod en tiempo de compilación.

Luego declara Stella en el bloque suggests de tu fabric.mod.json (usa depends si Stella es obligatorio):

{
  "schemaVersion": 1,
  "id": "mymod",
  "version": "1.0.0",
  "suggests": {
    "stella": "*"
  }
}

###Métodos de StellaAPI

Todos los métodos son estáticos en dev.drygo.stella.api.StellaAPI.

ADVERTENCIA

Los métodos que mutan (create/delete/set/add/remove) lanzan los eventos Fabric de Stella y deben llamarse desde el hilo del servidor. Los eventos de jugador-equipo son cancelables, así que una mutación puede devolver false si un listener la veta.

Consultas de equipos
  • ####Team getTeam(String id)

    Devuelve un equipo por su id, o null si no existe.
Team red = StellaAPI.getTeam("red");
  • ####boolean teamExists(String id)

    Si existe un equipo con ese id.

  • ####List<Team> getTeams()

    Todos los equipos registrados.

  • ####List<String> getTeamIds()

    Los ids de todos los equipos registrados.

Consultas de jugadores
  • ####Team getMainTeam(UUID player)

    El equipo de mayor prioridad del jugador, o null si no está en ninguno.
Team main = StellaAPI.getMainTeam(player.getUuid());
  • ####List<Team> getPlayerTeams(UUID player)

    Todos los equipos del jugador, mayor prioridad primero.

  • ####boolean isInTeam(UUID player, String teamId)

    Si el jugador es miembro de un equipo específico.

  • ####boolean isInAnyTeam(UUID player)

    Si el jugador pertenece al menos a un equipo.

  • ####UUID resolvePlayer(String name)

    Resuelve un nombre a UUID (en línea, en caché o conocido sin conexión), o null.

  • ####String getPlayerName(UUID player)

    El último nombre conocido para un UUID, o null.

Mutaciones de equipos
  • ####Team createTeam(String id, int priority)

    Crea un equipo y lo devuelve. Devuelve null si el id es inválido o ya está en uso. Lanza el evento TEAM_CREATED.
Team team = StellaAPI.createTeam("red", 10);
  • ####boolean deleteTeam(String id)

    Elimina un equipo. Devuelve false si no existía. Lanza el evento TEAM_DELETED.

  • ####boolean setColor(String teamId, String color)

    Establece el color hex (#RRGGBB) del equipo. Devuelve false si el equipo no existe.

  • ####boolean setDisplayName(String teamId, String displayName)

    Establece el nombre visible del equipo.

  • ####boolean setPriority(String teamId, int priority)

    Establece la prioridad del equipo.

Mutaciones de membresía
  • ####boolean addMember(String teamId, UUID player)

    Añade un jugador a un equipo. Devuelve false si el equipo/jugador es inválido, el jugador ya es miembro, o un listener vetó el evento PLAYER_JOIN_TEAM.
StellaAPI.addMember("red", player.getUuid());
  • ####boolean removeMember(String teamId, UUID player)

    Quita un jugador de un equipo. Devuelve false si el equipo/jugador es inválido, el jugador no es miembro, o un listener vetó el evento PLAYER_LEAVE_TEAM.

###Modelo Team

El objeto dev.drygo.stella.team.Team expone:

Método Devuelve Notas
getId() String El id del equipo (siempre en minúsculas).
getDisplayName() String El nombre visible. Puede contener códigos de color.
getColor() String Color hex, ej. #FF5555.
getPriority() int Mayor = más importante.
getMembers() Set<UUID> UUIDs de los miembros.

Prefiere los mutadores de StellaAPI (setColor, addMember, …) sobre los setters de Team — esos persisten en teams.json, lanzan eventos y refrescan el hook del scoreboard. Mutar el Team directamente no hace nada de eso.


###Eventos de Stella

En Fabric los eventos se exponen como Events de Fabric en dev.drygo.stella.api.TeamEvents, no como listeners de Bukkit. Registra un callback en el evento que te interese:

Click para expandir
  • ####TeamEvents.PLAYER_JOIN_TEAM

    Cancelable. Se lanza antes de añadir un jugador a un equipo. Devuelve ActionResult.FAIL para vetar la membresía; devuelve ActionResult.PASS para permitirla.
TeamEvents.PLAYER_JOIN_TEAM.register((player, team) -> {
    // return ActionResult.FAIL; // para vetar la membresía
    return ActionResult.PASS;
});
  • ####TeamEvents.PLAYER_LEAVE_TEAM

    Cancelable. Se lanza antes de quitar un jugador de un equipo. Devuelve ActionResult.FAIL para vetar la salida.
TeamEvents.PLAYER_LEAVE_TEAM.register((player, team) -> {
    return ActionResult.PASS;
});
  • ####TeamEvents.TEAM_CREATED

    Se lanza después de crear un equipo. No cancelable.
TeamEvents.TEAM_CREATED.register((team) -> {
    System.out.println("Team created: " + team.getId());
});
  • ####TeamEvents.TEAM_DELETED

    Se lanza después de eliminar un equipo. No cancelable. La instantánea del Team aún es legible.
TeamEvents.TEAM_DELETED.register((team) -> {
    System.out.println("Team deleted: " + team.getId());
});
ADVERTENCIA

Las firmas exactas de los callbacks de TeamEvents deberían confirmarse contra el código fuente publicado antes de depender de ellas.


###Notas

  • Todos los métodos de StellaAPI son estáticos — no hace falta instanciar.
  • Las mutaciones persisten en teams.json automáticamente y refrescan el hook del scoreboard. En Fabric no hay hook de LuckPerms.
  • getMainTeam / getPlayerTeams ordenan por priority (mayor primero); haz las prioridades únicas si el orden exacto importa.
  • Los eventos de jugador-equipo se lanzan antes de aplicar el cambio y pueden vetarse con ActionResult.FAIL; los eventos de crear/eliminar equipo se lanzan después y no.

###Referencias