Skip to content

Scoreboard API ​

La Scoreboard API permite mostrar informaciĂłn en el panel lateral derecho de la pantalla del jugador (el scoreboard de Minecraft Bedrock). Soporta tres modos: estĂĄtico, gestionado por jugador (ScoreboardManager) y auto-actualizable (Live Scoreboard).

Scoreboard estático ​

El modo mås simple. Creås un scoreboard, le ponés líneas y lo enviås a un jugador.

js
var sb = scoreboard.create("§6§lMi Servidor");

// Forma recomendada — setLines reemplaza todo el contenido de una vez
sb.setLines([
    "§7Jugadores: 5",
    "§7Mapa: Lobby",
    "",
    "§fplay.miservidor.com"
]);

player.sendScoreboard(sb);
player.removeScoreboard();

También podés construirlo condicionalmente con push:

js
var sb = scoreboard.create("§6§lMi Servidor");
var lines = [
    "§7Jugadores: " + server.getPlayerCount(),
    "§7Modo: " + player.getGameMode()
];

if (player.getGameMode() === "creative") {
    lines.push("§bModo creativo activo");
}

lines.push("");
lines.push("§fplay.miservidor.com");

sb.setLines(lines);
player.sendScoreboard(sb);

WARNING

Modificar un scoreboard después de enviarlo no actualiza lo que ve el jugador automåticamente. Hay que volver a llamar player.sendScoreboard(sb) o usar el Live Scoreboard.

MĂ©todos del scoreboard ​

MétodoRetornaDescripción
scoreboard.create(titulo)ScoreboardCrea un nuevo scoreboard con el tĂ­tulo dado
sb.setLines(array)—Reemplaza todo el contenido con el array dado. La forma recomendada para contenido dinámico
sb.setLine(index, texto)booleanSetea el texto en la línea index (0–14). Rellena con líneas vacías si el índice supera las actuales
sb.addLine(texto)booleanAgrega una lĂ­nea al final. Retorna false si se superan las 15 lĂ­neas
sb.removeLine(index)booleanElimina la lĂ­nea en el Ă­ndice dado
sb.getLines()string[]Retorna todas las lĂ­neas actuales como array
sb.getLineCount()numberCantidad de lĂ­neas actuales
sb.getTitle()stringTĂ­tulo del scoreboard
sb.setDescending()—Invierte el orden visual de las líneas
sb.isDescending()booleanSi estĂĄ en orden descendente
sb.removePadding()—Elimina el padding automático de espacios en cada línea
sb.sendTo(player)—Atajo: envía este scoreboard al jugador dado

MĂ©todos en el jugador ​

MétodoDescripción
player.sendScoreboard(sb)EnvĂ­a el scoreboard al jugador
player.removeScoreboard()Quita el scoreboard de la pantalla del jugador

ScoreboardManager ​

El ScoreboardManager gestiona quĂ© scoreboard tiene asignado cada jugador. Es ideal cuando tenĂ©s mĂșltiples jugadores con distintos scoreboards o querĂ©s saber en cualquier momento quĂ© estĂĄ viendo cada uno.

Cada plugin tiene su propio manager aislado — scoreboard.getManager() siempre retorna el mismo manager para ese plugin.

js
var mgr = scoreboard.getManager();

events.on("PlayerJoin", function(event) {
    var player = event.getPlayer();
    var sb = scoreboard.create("§6Mi Servidor");
    sb.setLine(0, "§7Bienvenido, §f" + player.getName());
    sb.setLine(1, "§7Jugadores: §f" + server.getPlayerCount());
    mgr.set(player, sb);
});

events.on("PlayerQuit", function(event) {
    mgr.remove(event.getPlayer());
});

MĂ©todos del ScoreboardManager ​

MétodoRetornaDescripción
scoreboard.getManager()ScoreboardManagerRetorna el manager del plugin
mgr.set(player, sb)booleanAsigna el scoreboard al jugador y lo envĂ­a inmediatamente
mgr.remove(player)—Quita el scoreboard asignado al jugador y lo elimina de su pantalla
mgr.get(player)Scoreboard | nullRetorna el scoreboardWrapper activo del jugador, o null si no tiene
mgr.hasScoreboard(player)booleantrue si el jugador tiene un scoreboard asignado
mgr.getAssignedCount()numberCantidad de jugadores con scoreboard asignado
mgr.clearAll()—Quita el registro de todos los jugadores del manager

Live Scoreboard ​

El Live Scoreboard se auto-actualiza automĂĄticamente en un intervalo definido. En cada tick, el callback recibe un scoreboard limpio para que el plugin llene las lĂ­neas, y luego lo reenvĂ­a a todos los jugadores asignados.

js
var live = scoreboard.createLive("§aMi Servidor", function(sb, player) {
    var lines = [
        "§7Jugador: §f" + player.getName(),
        "§7Vida: §c" + Math.floor(player.getHealth()) + "§7/§c" + Math.floor(player.getMaxHealth()),
        "§7Coords: §b" + Math.floor(player.getX()) + " §7/ §b" + Math.floor(player.getY()) + " §7/ §b" + Math.floor(player.getZ()),
        ""
    ];

    var gm = player.getGameMode();
    if (gm === "creative") {
        lines.push("§bModo: §3Creativo");
        lines.push("§7Vuelo: " + (player.isFlying() ? "§aActivo" : "§cInactivo"));
    } else if (gm === "survival") {
        lines.push("§aModo: §2Supervivencia");
        lines.push("§7Exp: §a" + player.getExperienceLevel() + " §7niveles");
    } else {
        lines.push("§7Modo: §f" + gm);
    }

    lines.push("");
    lines.push("§7play.miservidor.com");
    sb.setLines(lines);
}, 2000); // actualiza cada 2 segundos

events.on("PlayerJoin", function(event) {
    live.addPlayer(event.getPlayer());
});

events.on("PlayerQuit", function(event) {
    live.removePlayer(event.getPlayer());
});

function onDisable() {
    live.stop(); // detener el ticker al cerrar el plugin
}

TIP

El intervalo mínimo es 50ms. Para HUDs con coordenadas fluidas se recomienda 100ms. Para scoreboards de lobby estáticos, 1000–5000ms es suficiente.

WARNING

El callback del live recibe (sb, playerData) — el scoreboard y un objeto con getters precalculados (getName, getHealth, getX, getGameMode, etc.). Se llama una vez por cada jugador registrado en el live. No usar server.getPlayers() desde dentro del callback — causará un deadlock de transacción y un panic en el servidor.

MĂ©todos del Live Scoreboard ​

MétodoRetornaDescripción
scoreboard.createLive(titulo, fn, intervalMs)LiveScoreboardCrea y arranca un live scoreboard
live.addPlayer(player)booleanAgrega el jugador — empezará a recibir updates automáticos
live.removePlayer(player)booleanSaca al jugador del live y le quita el scoreboard
live.hasPlayer(player)booleantrue si el jugador estĂĄ recibiendo updates
live.getPlayerCount()numberCantidad de jugadores en el live
live.clearPlayers()—Saca a todos los jugadores sin detener el live
live.stop()—Detiene el auto-update y quita el scoreboard a todos los jugadores

Ejemplo completo ​

Plugin de lobby con scoreboard en tiempo real para todos los jugadores:

js
config.setDefaults({
    "titulo": "§6§lMi Servidor",
    "intervalo": 2000
});

var live;

function onEnable() {
    var titulo = config.getString("titulo", "§6§lMi Servidor");
    var intervalo = config.getInt("intervalo", 2000);

    live = scoreboard.createLive(titulo, function(sb) {
        var hora = new Date().toLocaleTimeString();
        sb.setLine(0, "§7Jugadores: §f" + server.getPlayerCount() + "§7/§f" + server.getMaxPlayers());
        sb.setLine(1, "§7Hora: §f" + hora);
        sb.setLine(2, "");
        sb.setLine(3, "§7play.miservidor.com");
    }, intervalo);

    // Agregar jugadores que ya estén conectados
    var players = server.getPlayers();
    for (var i = 0; i < players.length; i++) {
        live.addPlayer(players[i]);
    }

    events.on("PlayerJoin", function(event) {
        live.addPlayer(event.getPlayer());
    });

    events.on("PlayerQuit", function(event) {
        live.removePlayer(event.getPlayer());
    });
}

function onDisable() {
    if (live) live.stop();
    config.save();
}

module = { onEnable: onEnable, onDisable: onDisable };

Dragonfly Script API