Navis es un plugin para servidores Minecraft (Paper/Spigot) que muestra guías direccionales contextuales para ayudar a los jugadores a navegar, completar tutoriales o llegar a ubicaciones clave. Se basa en reglas con condiciones evaluadas en tiempo real, acciones configurables y renderizado de flechas mediante ProtocolLib.
- Descripción General
- Requisitos del Sistema
- Instalación
- Configuración
- Guía de Uso Paso a Paso
- Comandos y Permisos
- Sistema de comandos
- API
- Ejemplos Prácticos
- Solución de Problemas
- Changelog
- Motor de reglas basado en condiciones lógicas (
and,or,not). - Acciones configurables al iniciar, acercarse o llegar al objetivo.
- Renderizado de flechas con ProtocolLib y estilos configurables.
- Sistema de traducciones con cambio dinámico de idioma, fallback y pluralización básica.
- Java 21
- Paper/Spigot 1.20.4+
- ProtocolLib 5.4.0+
- PlaceholderAPI (opcional)
- Compila el proyecto:
./gradlew build
- Copia el archivo generado en
build/libs/a la carpetaplugins/. - Inicia o reinicia el servidor.
- Verifica la consola por “Navis has been enabled successfully!”.
Archivo principal de configuración.
debug: false
language:
default: "en"
fallback: "en"
model-debugger:
enabled: true
permissions:
admin: "navis.admin"
edit: "navis.model.edit"
modules:
selection: true
manipulation: true
export: true
export-path: "models/.exported/"
autosave:
enabled: true
interval: 300Define guías con objetivos, condiciones y acciones.
guides:
tutorial:
target:
world: "world"
x: 100.5
y: 65.0
z: -200.5
radius: 2.0
priority: 10
exclusive: true
condition:
has_permission: "navis.tutorial"
actions:
on_start:
- type: message
text: "&e¡Sigue la flecha hacia el tutorial!"
- type: sound
sound: UI_BUTTON_CLICK
on_proximity:
- radius: 10.0
actions:
- type: title
title: "&e¡Estás cerca!"
subtitle: "&7A menos de 10 bloques"
on_arrival:
- type: stop_trackinghas_permission: requiere permiso.has_permission: "perm"ohas_permission: { permission: "perm" }
distance_greater_than: distancia mínima.distance_greater_than: 50odistance_greater_than: { distance: 50 }
time_played_less_than: tiempo jugado menor a un valor.time_played_less_than: "1h"otime_played_less_than: { time: "1h" }
- Composición lógica:
and,or,not
message: envía mensaje al jugador (text).sound: reproduce sonido (sound,volume,pitch).title: muestra título (title,subtitle,fadeIn,stay,fadeOut).action_bar: muestra texto en action bar (text).stop_tracking: detiene el rastreo actual.
Define estilos de flecha para el rastreador.
styles:
default:
custom_model_data: 1001
item: ARROW
scale: 1.0
modern:
custom_model_data: 1002
item: SPECTRAL_ARROW
scale: 0.8Paquetes de idioma en plugins/Navis/lang/.
meta:
locale: en
plural_rules:
one: one
other: other
messages:
guide:
help:
title: "§eNavis Guide Commands"- Instala el plugin y arranca el servidor.
- Edita
guides.ymly crea tus reglas con objetivos, condiciones y acciones. - Ajusta estilos en
styles.ymlsi deseas un modelo distinto. - Usa
/guide reloadpara recargar guías y estilos. - Prueba el rastreo con
/guide track <id>y alterna visibilidad con/guide toggle. - Si necesitas cambiar idioma, usa
/guide lang set <locale>.
Comando raíz: /guide (alias /navis, /guides).
/guide help [subcomando]— muestra ayuda./guide reload— recarga configuración y guías./guide debug <jugador>— estado de evaluación de reglas./guide toggle— alterna visibilidad del rastreador./guide track <id>— rastrea una guía específica./guide stop— detiene el rastreo./guide tracker-style <style>— cambia el estilo del rastreador./guide tracker-style <jugador> <style>— cambia estilo a otro jugador./guide create <id> <x> <y> <z> [world]— crea guía básica./guide purge— elimina displays de rastreadores./guide gen-rp— genera resource pack de modelos./guide lang ...— administración de idiomas.
Permisos:
navis.use: uso básico.navis.admin: administración.navis.translate: gestión de traducciones.
/guide lang list/guide lang get [jugador]/guide lang set <locale>/guide lang set <jugador> <locale>/guide lang edit <locale> <key> <valor>/guide lang review [locale]/guide lang history [locale] [key]/guide lang reload
Comando raíz: /navis-tester (alias /model-tester).
/navis-tester help [subcomando]/navis-tester info/navis-tester load <archivo>/navis-tester spawn [x] [y] [z]/navis-tester despawn/navis-tester bind player <nombre>/navis-tester bind location <x> <y> <z>/navis-tester unbind/navis-tester rotate <axis> <grados> [absolute|relative]/navis-tester reset-rotation/navis-tester select <index>/navis-tester move-part <x> <y> <z>/navis-tester rotate-part <axis> <grados>/navis-tester save
Permiso requerido: navis.admin.
Navis utiliza el sistema de comandos nativo de Bukkit/Paper. No hay dependencias externas para registrar comandos. Si el descriptor de plugin no expone los comandos, Navis registra un fallback en tiempo de ejecución.
- Registro central: CommandRegistry
- Comandos de guía: GuideCommand
- Comandos de pruebas: TestingCommand
- Definiciones de comandos: plugin.yml y paper-plugin.yml
- Para añadir un subcomando, agrega el caso correspondiente en
onCommandy su autocompletado enonTabComplete. - Para nuevos permisos, actualiza
plugin.yml,paper-plugin.ymly los mensajes delang/*.yml. - Para nuevos comandos raíz, registra en
CommandRegistryy declara en los archivos de plugin. - Mantén los mensajes de ayuda alineados con los textos de
lang/*.yml.
Puntos de acceso principales:
static NavisMain getInstance()GuideManager getGuideManager()ModelManager getModelManager()ConditionRegistry getConditionRegistry()ActionRegistry getActionRegistry()TranslationManager getTranslationManager()TrackerEntityRegistry getTrackerEntityRegistry()
Registro de condiciones:
void register(String key, ConditionFactory factory)ConditionFactory getFactory(String key)
Registro de acciones:
void register(String key, ActionFactory factory)ActionFactory getFactory(String key)
Gestión de traducciones:
void load()String translate(CommandSender sender, String key)String translate(CommandSender sender, String key, Map<String, String> params)String translate(CommandSender sender, String key, Map<String, String> params, Integer count, String context)String resolveLocale(CommandSender sender)String getPlayerLocale(Player player)boolean setPlayerLocale(Player player, String locale)Set<String> getAvailableLocales()String getDefaultLocale()String getFallbackLocale()List<String> getMissingKeys(String locale)boolean updateTranslation(CommandSender editor, String locale, String key, String value)List<TranslationHistoryEntry> getHistory(String locale, String key)
NavisMain.getInstance()
.getConditionRegistry()
.register("has_level", args -> {
int minLevel = Integer.parseInt(String.valueOf(args.get("value")));
return (player, context) -> player.getLevel() >= minLevel;
});NavisMain.getInstance()
.getActionRegistry()
.register("bossbar", args -> {
String text = String.valueOf(args.getOrDefault("text", ""));
return (player, context) -> player.sendMessage(text);
});TranslationManager i18n = NavisMain.getInstance().getTranslationManager();
String msg = i18n.translate(player, "guide.tracking.site", Map.of("id", "tutorial"));
player.sendMessage(msg);- No aparece la flecha: verifica que
ProtocolLibesté cargado y que el jugador tenganavis.use. - Las guías no se activan: revisa la sección
conditionenguides.ymly el nombre del mundo. - Cambios no aplican: usa
/guide reloaddespués de editarguides.ymlostyles.yml. - Idioma inválido: asegúrate de que exista
lang/<locale>.ymly usa/guide lang list. - Error al generar resource pack: revisa permisos del sistema de archivos y vuelve a ejecutar
/guide gen-rp.
- Sistema de comandos nativo: migración desde CommandAPI para compatibilidad y sin dependencias externas.
- Registro de comandos con fallback cuando el descriptor no los expone.
- Sistema de traducciones con paquetes de idioma, fallback y edición en caliente.
- Comandos completos de guía y administración usando CommandAPI.
- Comandos de pruebas de modelos y herramientas de depuración.