StaffAuth
Descripción general
StaffAuth protege las cuentas del staff. Cuando un jugador se conecta y tiene el permiso de staff (security.admin por defecto), queda congelado hasta que se autentica: no puede moverse, interactuar, romper ni colocar bloques, abrir inventarios, chatear, pelear ni usar comandos distintos de /staffauth. Un miembro del staff sin contraseña registra una en su primera conexión; después inicia sesión con ella.
Las contraseñas nunca se envían como argumentos de comando ni se escriben en el chat. Se introducen en un diálogo de entrada de Paper, o en un menú opcional de teclado numérico, y se almacenan solo como hashes BCrypt en un artefacto de TypeWriter. Los intentos fallidos tienen un límite de frecuencia con un enfriamiento creciente y pueden expulsar al jugador.
Todos quedan retenidos aproximadamente un tick al conectarse mientras se cargan sus permisos, en silencio, para que un backend de permisos lento nunca deje pasar al staff sin comprobar. Los jugadores que no son staff se liberan después; si los permisos no se establecen en 10 segundos, el jugador es expulsado con una explicación.
Características
- Congelación al conectarse — el staff sin autenticar no puede moverse, interactuar, construir, soltar, recoger, consumir, pescar, recibir ni infligir daño, chatear ni ejecutar comandos.
- Registro e inicio de sesión — el staff que entra por primera vez se registra introduciendo una contraseña dos veces; los demás inician sesión.
- Almacenamiento con hash — solo se guardan hashes BCrypt, con un factor de coste configurable.
- Límites de intentos — un enfriamiento que se duplica tras cada fallo (hasta 60 segundos) y una expulsión tras
maxAttemptsfallos. - Tiempo de sesión — opcionalmente, devuelve al staff autenticado al inicio de sesión tras un número de minutos.
- Diálogo o teclado — un diálogo de entrada de Paper por defecto, además de un menú opcional de teclado de dígitos construido a partir de un layout de GUI.
- Herramientas de administración — restablece una contraseña almacenada o fuerza un cierre de sesión.
- Extensión Permissions opcional — espera a que se carguen los permisos antes de decidir quién es staff.
Instalación
- Instala la extensión GUI: el diálogo de inicio de sesión y el menú de teclado se abren a través de ella. Sin ella,
/staffauthresponde que la interfaz no está disponible. - Opcionalmente, instala la extensión BTC Permissions si tus servidores cargan los permisos desde una base de datos; StaffAuth la detecta automáticamente.
- Coloca el JAR de StaffAuth en
plugins/Typewriter/extensions/y reinicia el servidor. - Da el permiso de staff (
security.admin) a las cuentas que deban autenticarse.
Primeros pasos
- En el panel web de TypeWriter, abre una página static y añade un artefacto Staff Auth Passwords. No cambies nunca su
artifactIddespués, o se perderán las contraseñas almacenadas. - En la misma página, añade una entrada Staff Auth Config. Revisa
staffPermission,adminPermission,maxAttempts,minPasswordLength,bcryptCosty los mensajes. - Publica. StaffAuth necesita ambas entradas: sin la configuración no hace nada, y sin el artefacto se deja pasar al staff (se registra un error).
- Conéctate con una cuenta de prueba que tenga el permiso de staff. Quedas congelado y se te pide que te registres: escribe una contraseña en el diálogo y luego confírmala.
- Reconéctate: el diálogo te pide ahora la contraseña.
- Opcional: añade una acción Staff Auth Menu para usar el teclado. Consulta más abajo.
StaffAuth usa la primera Staff Auth Config y el primer artefacto Staff Auth Passwords que encuentra. No crees varios.
Cómo funciona
La autenticación dura hasta que el jugador abandona el servidor (el estado solo se guarda en memoria) o caduca el tiempo de sesión opcional. Mientras está restringido, el único comando permitido es /staffauth (y /sa, que solo está exento del bloqueo; no está registrado como alias).
Menús
Conectarse, /staffauth, login y register abren un diálogo de Paper con una entrada de texto. Al registrarse, el diálogo se muestra una segunda vez para confirmar la contraseña. El texto del aviso proviene de guiLoginPrompt, el título de guiTitle.
La acción Staff Auth Menu abre en su lugar un teclado de inventario (solo dígitos). Actívala desde una cadena de acciones si prefieres ese aspecto. En su layoutPool, dale a los items un tipo de botón para convertirlos en teclas:
| Tipo de botón | Función |
|---|---|
DIGIT_0 a DIGIT_9 | Añade un dígito a la contraseña. |
PASSWORD_DISPLAY | Muestra un punto por cada dígito introducido. |
LOGIN / REGISTER | Envía la contraseña; la etiqueta es Register cuando el jugador aún no tiene contraseña. |
BACKSPACE | Elimina el último dígito. |
CANCEL | Borra la entrada y cierra el menú. |
El teclado solo puede escribir dígitos, y la contraseña debe seguir respetando minPasswordLength. useGuiWhenAvailable controla si se abre un diálogo automáticamente al conectarse.
Configuración
Todo se establece en las entradas. En los campos de mensaje, usa {attempts}, {max} y {length} como placeholders (llaves, no etiquetas MiniMessage): {attempts} y {max} en wrongPasswordMessage, {attempts} en maxAttemptsKickMessage, {length} (el mínimo) y {max} en passwordTooShortMessage.
Las contraseñas viven en el archivo del artefacto elegido por artifactId, como un mapa JSON de UUID de jugador a hash BCrypt. El artefacto se mantiene en caché durante 5 segundos.
Comandos
El nombre del comando proviene del campo commandName de la configuración (por defecto staffauth). El comando base no tiene ningún permiso registrado: cualquiera puede ejecutarlo, pero solo tiene efecto para el staff. Los subcomandos de administración necesitan el permiso establecido en adminPermission.
| Comando | Descripción |
|---|---|
/staffauth | Abre el diálogo de inicio de sesión o registro. |
/staffauth open, login, register | Igual que el anterior. |
/staffauth logout | Termina tu autenticación y vuelve a mostrar el diálogo. |
/staffauth status | Muestra tu estado, si tienes el permiso de staff y si la GUI está disponible. |
/staffauth reset <player> | Elimina la contraseña almacenada de un jugador (nombre o UUID), que debe registrarse de nuevo. Requiere adminPermission. |
/staffauth force-logout <player> | Cierra la sesión de un jugador conectado y le muestra el diálogo. Requiere adminPermission. |
Permisos
Los permisos son campos configurables, no nodos fijos.
| Permiso | Concede |
|---|---|
security.admin (staffPermission) | Marca a un jugador como staff: debe autenticarse. |
security.staffauth.admin (adminPermission) | /staffauth reset y /staffauth force-logout. |
Entradas
3 entradas, generadas a partir del código fuente de la extensión.
Acciones1
- Staff Auth MenuStaff Auth Menu
Comandos1
- Staff Auth ConfigStaff Auth Config
Artefactos1
- Staff Auth DataStaff Auth Passwords
Solución de problemas
El staff entra sin que se le pida una contraseña. Comprueba que tanto la configuración como el artefacto están publicados. Sin artefacto, StaffAuth deja pasar al staff y registra StaffAuth has no artifact entry. Comprueba también que el jugador realmente tiene staffPermission (/staffauth status lo imprime).
El jugador es expulsado con un mensaje sobre permisos. La extensión Permissions no señaló que los permisos del jugador se hubieran cargado en 10 segundos. Reconéctate; si persiste, revisa el backend de Permissions en los registros.
The StaffAuth interface is unavailable. La extensión GUI no está cargada. Instálala y reinicia.
Las contraseñas desaparecieron. Se cambió el artifactId del artefacto o se recreó la entrada. Restaura el id anterior. Un valor almacenado que no es un UUID válido ni una cadena BCrypt hace fallar la carga y se registra como StaffAuth artifact could not be loaded; el jugador permanece congelado y se le informa de que su estado es ilegible.
Registro rechazado. La contraseña debe tener entre minPasswordLength (6) y maxPasswordLength (128) caracteres y no contener espacios ni caracteres de control. Las dos entradas deben coincidir.
Un jugador es expulsado tras inicios de sesión fallidos. Tras maxAttempts (5 por defecto) fallos, el jugador es expulsado con maxAttemptsKickMessage. Establece maxAttempts en 0 para desactivar las expulsiones; el enfriamiento sigue aplicándose. /staffauth reset <player> borra una contraseña olvidada.
Extensiones relacionadas
- GUI — abre el diálogo de inicio de sesión y el menú de teclado.