SERVIDOR MINETEST + POSTGRESQL EN LINUX (II)

Ahora que ya tenemos MineTest compilado y funcionando apoyado en un servidor de bases de datos PostgreSQL ha llegado la hora de configurar el entorno para que los alumnos y profesores puedan centrarse en la actividad educativa que hubiésemos preparado. 

En este artículo vamos a crear un nuevo mundo con características concretas a través de sus archivos de configuración, vamos a modificar las reglas del juego, dotar al profesor de herramientas para poder gestionar su grupo de alumnos y añadir nuevos elementos de construcción. 

[1] El archivo de configuración de nuestro servidor: minetest.conf

Tanto si vamos a tener un sólo mundo compartido como varios mundos independientes (y puede que simultáneamente) es bueno/necesario crear un archivo de configuración que describa las propiedades de cada uno de ellos.

En el momento de iniciar una instancia del servidor de MineTest podremos completar la orden de invocación añadiendo como parámetro «–config /ruta_al_archivo/archivo.conf«.

Supongamos que vamos a crear un mundo específico para la asignatura de «Historia de 1º ESO»: queremos un mundo plano donde empezar a edificar con comodidad, en modo creativo y dónde los jugadores no puedan hacerse «daño» unos a otros…

Iniciando sesión como el usuario «minetest» que preparamos en el artículo anterior y creamos el archivo «historia1eso.conf» con un editor de texto y añadimos el siguiente contenido:

# Información del servidor 
server_name
 = Servidor Minetest Historia 1º ESO
server_description = Recreando la Historia bloque a bloque
motd = ¡Bienvenidos constructores!
port = 30001
language = es
map-dir = minetest-master/worlds/historia1eso

# Control de jugadores
max_users
= 75
default_password = h1eso
disallow_empty_password
= true
name
= administrador

# Tipo de juego (sólo construcción, sin daño)
default_game
 = minetest
enable_damage = false
enable_pvp = false
creative_mode = true
default_privs = interact, shout

# Control del paso del tiempo (siempre serán las 12:00pm)
time_speed = 0
world_start_time = 12000

# Generar un mundo "plano": sin valles, montañas o cuevas
mg_name = flat
water_level = -100
mapgen_limit = 5000
mg_flags = nodungeons,nocaves,nodecorations
mgflat_spflags = nolakes,nohills,nocaverns
mgflat_ground_level = 0
fixed_map_seed = 123456789

Detalles importantes:

  • Si quieres mantener varios «mundos» activos simultáneamente a cada uno de ellos debes asignarle un puerto («port«) diferente. Minetest «escucha» por defecto el nº 30000. Puedes ir incrementando de forma secuencial este valor.
  • El jugador que se conecte con el nombre asociado a «name» se convertirá en el administrador del servidor de juego. DEBES ses tú el primero y así proteger el acceso con tu clave.
  • Puedes limitar las dimensiones del mundo a explorar especificando en el valos «mapgen_limit» cuántos bloques estarán disponibles en las 6 direcciones (arriba, abajo, izquierda, derecha, adelante, atrás) desde el punto (0,0,0). En el ejemplo tendríamos desde -5000 a 5000 en cada uno de los tres ejes.
  • La ruta a la carpeta de los datos del mundo «map-dir» es relativa al sitio desde el que invocas al servidor. Si tienes dudas utiliza rutas absolutas.

NOTAS:

  • Puedes ver la lista de todos los parámetros con su explicación en el archivo «minetest.conf.example» localizado en el directorio del programa.
  • Guarda un archivo  como plantilla, así cuando quieras crear un mundo similar sólo tendrás que copiarlo y modificar algunos detalles como su directorio de datos.

[2] Inicia el nuevo mundo por primera vez

Prueba a iniciar una instancia con la configuración. Es un buen momento para introducir un segundo parámetro: «–logfile nombre_archivo.log«. Añadido a la invocación del servidor guardará los mensajes que éste genere un un archivo dedicado. Importante si te planteas ejecutar varias instancias simultáneamente.

./minetest-master/bin/minetestserver --config historia1eso.conf --logfile historia1eso.log
Inicio y parada del servidor

Pulsa las teclas «Control» + «C» para pararlo y observa la estructura de carpetas / ficheros que se ha creado:

Estructura de ficheros para el mundo

[3] Adapta la configuración de tu mundo: world.mt

Tal como vimos en el artículo anterior MineTest trabaja por defecto con SQLite3, que no está mal, pero en servidores con muchos jugadores funciona mejor con PostgreSQL. Cada mundo debe tener su base independinte, así que repetimos los pasos necesarios para crearla y asignársela al nuevo mundo (utiliza una cuenta con privilegios «sudo»):

sudo -u postgres psql -c "CREATE DATABASE historia1eso OWNER mtuser; GRANT ALL PRIVILEGES ON DATABASE historia1eso TO mtuser;"

Edita el archivo “minetest-master/worlds/historia1eso/world.mt” y añade las siguientes líneas adaptando los valores de usuario/clave/base si los cambiaste al crearlos:

enable_damage = false
creative_mode = true
auth_backend = sqlite3
player_backend = sqlite3
backend = sqlite3
gameid = minetest
world_name = historia1eso
pgsql_connection = host=127.0.0.1 port=5432 user=mtuser password=mtpass dbname=historia1eso
pgsql_auth_connection = host=127.0.0.1 port=5432 user=mtuser password=mtpass dbname=historia1eso
pgsql_player_connection = host=127.0.0.1 port=5432 user=mtuser password=mtpass dbname=historia1eso

Cierra el archivo y desde la consola ejecuta los siguientes comandos para convertir los métodos de “sqlite3” a “postgresql”

./minetest-master/bin/minetestserver --migrate postgresql --world minetest-master/worlds/historia1eso

./minetest-master/bin/minetestserver --migrate-auth postgresql --world minetest-master/worlds/historia1eso

./minetest-master/bin/minetestserver --migrate-players postgresql --world minetest-master/worlds/historia1eso

[4] Añadiendo complementos (mods) para modificar el funcionamiento

Aunque el entorno ya es propicio para empezar a construir sin distracciones es posible limitar las acciones de los jugadores y darle a los profesores un mayor control sobre lo que pasa (o no) en el mundo. 

En la página «https://content.minetest.net/» puedes encontrar las descripciones y enlaces de descarga de cientos de módulos organizados por complementos, juegos y lotes de texturas.

Página web oficial para la consulta y descarga de complementos del juego

Entre los más útiles para el profesor están:

  • Edutest: Gestión de alumnos mediante paneles de información
  • Classroom manager: monitorización de alumnos
  • Areas: protección de zonas asignables a alumnos concretos

Cualquiera de ellos (y de otros de los que hablaré más adelante) se distribuyen en un paquete «.zip» que has de descomprimir a su vez en una de las siguientes carpetas:

  • Opción 1: como módulo exclusivo para un mundo particular.
    Dentro de «worldmods» en el directorio del mundo (tendrás que crearla la primera vez).
    Siguiendo el ejemplo del mundo que llevamos le correspondería en la ruta «mintetest-master/worlds/historia1eso/worldmods/«
  • Opción 2: Como un módulo que pueda utilizar cualquier mundo:
    Dentro de la carpeta «mintetest-master/mods/«. Luego hay que configurar el mundo que quiera utilizarlo (archivo «world.mt»).

Salvo para casos muy puntuales prefiero la segunda opción. Como resultado de la preparación para la escritura de estos artículos he desarrollado un mod propio al que he llamado «MineTIC» a partir del excelente trabajo de los autores de los mods arriba mencionados.

Instalación de MineTIC como herramienta para el profesor

1.- Descarga el paquete que contiene el mod: MineTIC v0.1

wget https://diocesanos.es/blogs/descargas/minetic.zip

2.- Descomprímelo en la carpeta de módulos «globales»:

unzip minetic.zip -d minetest-master/mods/
Descarga y desempaquetado

3.- Edita el fichero de configuración del mundo en el que quieras habilitar el módulo,  “minetest-master/worlds/historia1eso/world.mt” en mi caso, y   añadimos una línea con el formato «load_mod_<nombreMódulo> = true«:

Contenido ya modificado del archivo «world.mt» del mundo

Inicia la instancia del servidor para que se carguen las modificaciones y podamos probar los cambios introducidos.

./minetest-master/bin/minetestserver --config historia1eso.conf --logfile historia1eso.log

[5] Primera conexión al mundo y Funcionamiento del mod «MineTic». Herramientas disponibles

Recuerda ser el primero en iniciar sesión  con la cuenta «administrador» y la contraseña inicial que pusimos al mundo; «h1eso». Recuerda también que personalizamos el puerto de conexión: «30001».

Pantalla de inicio de sesión desde un cliente MineTest
Mensaje de bienvenida personalizado
Una vez en el juego pulsa «F10» y escribe «/help» para acceder al panel de ayuda con las descripciones de los comandos aportados por el mod.

Pulsa «F10» y establece una nueva contraseña  para la cuenta de del usuario «administrador»: 

/setpassword administrador clave_nueva

Restricciones por defecto

  • TODO el mapa está protegido por defecto. Para que un jugador pueda manipular bloques tiene que tener asignada un «área de trabajo».
  • Cualquier usuario puede explorar y moverse por todo el mapa hasta los límites máximos establecido para su generación. Si quieres que un alumno/grupo no «salgan de su espacio» puedes asignarles unos límites específicos.
  • El servidor admite la entrada y registro de nuevos jugadores. Una vez que todos tus alumnos estén registrados al entrar una primera vez puedes «cerrar» el acceso a jugadores desconocidos.
  • No se pueden utilizar bloques de lava, agua o agua de río. Puedes asignar privilegios específicos  a jugadores concretos si fuera necesario.

Identificar a un jugador como administrador TIC

Como administrador del servidor ya posees esos privilegios del nuevo módulo. Si necesitas que otro jugador (otro profesor, p.ej) te ayude con la gestión de grupos/alumnos puedes asignarle el privilegio «minetic» con  el comando «/grant nombre_jugador minetic«. 

Identificar a un jugador como profesor

Para asociar a un jugador como profesor tienes que concederle el privilegio «profesor» con  el comando «/grant nombre_jugador profesor«. Como administrador puedes darte a ti mismo ese privilegio con «/grantme all» o «/grantme profesor«

NOTA: Sólo se pueden manipular a los usuarios conectados en ese momento.

Asociar un grupo a un jugador

Un grupo sólo es una etiqueta que comparten varios jugadores. Todos los alumnos y profesores del mismo grupo tendrán la misma. Para ello utiliza el comando «/tic_grupo nombre_jugador nombre_grupo«. Por ejemplo, asóciate al grupo «1A»:

/tic_grupo administrador 1A

Acciones como administrador

  • /tic_grupo <jugadores> [borra|<grupo>]
    Sobre el jugador seleccionado (puedes especificar varios separados por comas y sin espacios) muestra qué grupo tienen asignado. Si añades como segundo parámetro la palabra «borra» se les deja el grupo en blanco. Si das un segundo parámetro (que no sea «borra«) se asignará al jugador/jugadores seleccionados como nuevo grupo.
  • /tic_agua [true|false]
    Muestra el estado(sin parámetros), activa(true) o desactiva(false) la prohibición del uso de bloques y cubos de agua.
  • /tic_rio [true|false]
    Muestra el estado(sin parámetros), activa(true) o desactiva(false) la prohibición del uso de bloques y cubos de «agua de río».
  • /tic_lava [true|false]
    Muestra el estado(sin parámetros), activa(true) o desactiva(false) la prohibición del uso de bloques y cubos de lava.
  • /tic_areas [true|false]
    Muestra el estado(sin parámetros), activa(true) o desactiva(false) la protección global del mundo y uso de áreas de trabajo por jugador.
  • /tic_limites [true|false]
    Muestra el estado(sin parámetros), activa(true) o desactiva(false) los límites de exploración del mapa por usuario.
  • /tic_cierre [true|false]
    Muestra el estado(sin parámetros), activa(true) o desactiva(false) del bloqueo/entrada a usuarios no registrados previamente.

Acciones como profesor

  • /tic_lista
    Muestra la lista de jugadores activos que tengan el mismo grupo que tú tengas asociado.
  • /tic_invisible <true|false>
    Oculta tu personaje y tu nombre en pantalla por lo que los demás jugadores no podrán verte.
  • /tic_espia <jugador|off>
    Desplaza tu punto de vista y posición a la de el jugador que selecciones. Podrás girar a su alrededor para ver mejor lo que esté haciendo aunque se desplace si que éste se de cuenta. Si utilizas el parámetro «off» volverás a tu posición original.

Los siguientes comandos sólo pueden aplicarse a alumnos de tu grupo. El selector de alumnos puede ser «*»( todo el grupo), uno sólo, o una lista separada por comas («alumno1[,alumno2…]»)

  • /tic_area <jugadores> [borra|x1 y1 z1 x2 y2 z2]
    Muestra, elimina o establece las coordenadas del área protegida de un usuario dónde podrá interactuar.  Las áreas pueden solaparse parcial o completamente con las de otros jugadores. Sólo puedes asociar un área a un jugador, pero puedes cambiarlas/borrarlas en cualquier momento.
  • /tic_limite <jugadores> [borra|x1 y1 z1 x2 y2 z2]
    Muestra, elimina o establece las coordenadas de los límites de exploración del mapa para un usuario de donde no podrá salir.  Los límites pueden solaparse parcial o completamente con los de otros jugadores. Sólo puedes asociar un límite a un jugador, pero puedes cambiarlos/borrarlos en cualquier momento.
  • /tic_congela <jugadores> [true|false]
    Muestra el estado de «congelación»(sin segundo parámetro), congela(true) o devuelve(false) a un alumno/alumnos la capacidad de desplazarse e interactuar.
  • /tic_callar <jugadores> [true|false]
    Muestra el estado de «silencio»(sin segundo parámetro), impide(true) o permite(false) a un alumno/alumnos la capacidad de usar el «chat» para comunicarse o emitir mensajes.
  • /tic_volar <jugadores> [true|false]
    Muestra el permiso de «volar»(sin segundo parámetro), permite(true) o impide(false) a un alumno/alumnos usar el modo de «vuelo» para desplazarse.
  • /tic_salir <jugadores>
    Cierra la sesión y saca del juego a los alumnos seleccionados de tu grupo.
  • /tic_traer <jugadores>
    Teletransporta a las inmediaciones de tu posición a los alumnos seleccionados de tu grupo y los deja mirando a tu personaje.

[6] Conclusiones

Si el mod me resulta práctico y me funciona en los talleres me plantearé añadirle otras posibilidades:

  • Interfaz de usuario integrada en los paneles de inventario
  • Traducciones a otros idiomas
  • Chat restringido entre los miembros de un mismo grupo.

En el próximo artículo trataremos los temas de automatización del inicio, parada, y copias de seguridad de nuestros mundos.

Además crearemos nuevos módulos que añadirán los elementos decorativos necesarios para crear estructuras similares a las construcciones históricas que vamos a reproducir, así como la posibilidad de cargar mapas de terreno/plantillas sobre las que trabajar.