EasyWebMap

EasyWebMap

Por PhillipJ 18 de enero de 2026
#API#EasyWebMap#Hytale#Juegos#mapas#MapaWebFácil#Multijugador#servidores#SSL

Construido para el servidor de supervivencia europeo de Hytale en play.hyfyve.net

Un mapa web en vivo para tu servidor de Hytale. Visualiza tu mundo en un navegador, rastrea jugadores en tiempo real e intégralo fácilmente con la página web de tu comunidad.

Quick Start

  • Descarga la última versión de EasyWebMap.jar desde Releases
  • Colócalo en la carpeta mods de tu servidor
  • Reinicia tu servidor
  • Abre http://localhost:8080 en tu navegador
  • What You Can Do

    Mapa del Mundo en Vivo

    • Ve todo tu mundo renderizado en un navegador web
    • El terreno se actualiza automáticamente a medida que los jugadores construyen o destruyen bloques
    • Acércate o aléjate y desplázate libremente
    • Utiliza el renderizado nativo de mapas de Hytale (el mismo que el del mapa en el juego)

    Seguimiento de Jugadores en Tiempo Real

    • Ve a todos los jugadores en línea en el mapa con marcadores de flecha
    • Las flechas rotan para mostrar en qué dirección están mirando los jugadores
    • Haz clic en cualquier jugador en la barra lateral para saltar a su ubicación
    • Las posiciones de los jugadores se actualizan cada segundo a través de WebSocket

    Integración con el Sitio Web

    Incorpora el mapa directamente en la página web de tu comunidad usando un iframe:

    <iframe src="http://your-server-ip:8080" width="100%" height="600"></iframe>

    O enlázalo desde la página web de tu servidor, Discord o foros.

    API REST

    Crea herramientas personalizadas utilizando la API integrada:

    Endpoint
    Devuelve

    GET /api/worlds
    Lista de mundos disponibles

    GET /api/players/{world}
    Todos los jugadores en un mundo (nombre, posición, dirección)

    GET /api/tiles/{world}/{z}/{x}/{y}.png
    Imagen del mosaico del mapa

    WS /ws
    Actualizaciones de posición de jugadores en tiempo real

    Ejemplo: Obtener posiciones de jugadores

    const response = await fetch('http://your-server:8080/api/players/world');
    const players = await response.json();
    // [{ name: "Steve", x: 100, y: 64, z: -200, yaw: 1.57 }, ...]

    Ejemplo: WebSocket para actualizaciones en vivo

    const ws = new WebSocket('ws://your-server:8080/ws');
    ws.onmessage = (e) => {
      const data = JSON.parse(e.data);
      console.log(data.worlds); // Todas las posiciones de jugadores por mundo
    };

    Soporte para Múltiples Mundos

    • Cambia entre mundos usando el menú desplegable
    • Configura qué mundos son visibles
    • Cada mundo tiene su propia caché de mosaicos

    Commands

    Comando
    Qué hace

    /easywebmap status
    Muestra el conteo de conexiones, información de caché, estado de SSL y estado del servidor

    /easywebmap reload
    Recarga el archivo de configuración

    /easywebmap clearcache
    Borra todas las cachés (memoria + disco)

    /easywebmap pregenerate <radius>
    Pre-genera mosaicos alrededor de tu posición

    /easywebmap renewssl
    Forzar renovación inmediata del certificado SSL

    Todos los comandos requieren el permiso easywebmap.admin.

    HTTPS con Let’s Encrypt (SSL Gratis)

    EasyWebMap puede obtener y renovar automáticamente certificados SSL de Let’s Encrypt. ¡No se requiere gestión manual de certificados!

    Configuración Rápida

  • Apunta tu dominio a tu servidor – Asegúrate de que map.yourserver.com (o el dominio que elijas) apunte a la dirección IP de tu servidor.

  • Abre el puerto 80 – Let’s Encrypt necesita verificar que eres el propietario del dominio conectándose al puerto 80. Asegúrate de que tu firewall lo permita.

  • Agrega a tu config.json:

  • {
      "enableHttps": true,
      "httpsPort": 8443,
      "domain": "map.yourserver.com",
      "acmeEmail": "[email protected]"
    }
  • Reinicia tu servidor – El plugin se encargará automáticamente de:
    • Registrarse en Let’s Encrypt
    • Solicitar un certificado para tu dominio
    • Comenzar a servir HTTPS en el puerto 8443
  • ¡Eso es todo! Tu mapa ahora está disponible en https://map.yourserver.com:8443

    Cómo Funciona

    Cuando habilitas HTTPS, el plugin:

  • Crea una cuenta con Let’s Encrypt (almacenada en ssl/account.key)
  • Solicita un certificado para tu dominio
  • Responde al desafío HTTP-01 de Let’s Encrypt en el puerto 80
  • Almacena el certificado en ssl/domain.crt y la clave en ssl/domain.key
  • Inicia el servidor HTTPS
  • Verifica diariamente si el certificado necesita renovación (renueva 30 días antes de su vencimiento)
  • Recarga automáticamente el certificado sin reiniciar
  • Opciones de Configuración de HTTPS

    Configuración
    Predeterminado
    Qué hace

    enableHttps
    false
    Habilitar/deshabilitar HTTPS

    httpsPort
    8443
    Puerto para HTTPS (usa 443 si tienes permiso)

    domain
    “”
    Tu nombre de dominio (requerido para HTTPS)

    acmeEmail
    “”
    Correo electrónico para notificaciones de Let’s Encrypt (opcional pero recomendado)

    useProductionAcme
    true
    Establecer en false para pruebas (usa el servidor de staging, evita límites de tasa)

    Comandos SSL

    Comando
    Qué hace

    /easywebmap status
    Muestra el estado de HTTPS, dominio y fecha de caducidad del certificado

    /easywebmap renewssl
    Forzar renovación inmediata del certificado

    Requisitos

    • Nombre de dominio – Necesitas un dominio apuntando a tu servidor (las direcciones IP no funcionarán con Let’s Encrypt)
    • Puerto 80 accesible – Let’s Encrypt valida la propiedad del dominio a través de HTTP en el puerto 80
    • Puerto 8443 (o 443) accesible – Para servir tráfico HTTPS

    Pruebas Primero

    Antes de salir en vivo, prueba con el servidor de staging de Let’s Encrypt para evitar límites de tasa:

    {
      "enableHttps": true,
      "domain": "map.yourserver.com",
      "useProductionAcme": false
    }

    El servidor de staging emite certificados de prueba que los navegadores no confiarán, pero prueba que todo funcione. Una vez verificado, establece useProductionAcme de nuevo en true y reinicia.

    Usando el Puerto 443 (HTTPS Estándar)

    Por defecto, HTTPS se ejecuta en el puerto 8443. Si deseas usar el puerto estándar de HTTPS (443):

    {
      "httpsPort": 443
    }

    Nota: Vincular al puerto 443 puede requerir ejecutar el servidor como root/administrador, o usar un proxy inverso.

    Detrás de un Proxy Inverso

    Si estás usando nginx o Apache como proxy inverso, puedes dejar que el proxy maneje SSL y mantener EasyWebMap solo en HTTP. Ejemplo de configuración de nginx:

    server {
        listen 443 ssl;
        server_name map.yourserver.com;
    
        ssl_certificate /etc/letsencrypt/live/map.yourserver.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/map.yourserver.com/privkey.pem;
    
        location / {
            proxy_pass http://localhost:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    }

    Configuración

    Archivo de configuración: mods/cryptobench_EasyWebMap/config.json

    {
      "httpPort": 8080,
      "updateIntervalMs": 1000,
      "tileCacheSize": 20000,
      "enabledWorlds": [],
      "tileSize": 256,
      "maxZoom": 4,
      "renderExploredChunksOnly": true,
      "chunkIndexCacheMs": 30000,
      "useDiskCache": true,
      "tileRefreshRadius": 5,
      "tileRefreshIntervalMs": 60000,
      "enableHttps": false,
      "httpsPort": 8443,
      "domain": "",
      "acmeEmail": "",
      "useProductionAcme": true
    }

    Configuración
    Predeterminado
    Qué hace

    httpPort
    8080
    Puerto del servidor web

    updateIntervalMs
    1000
    Frecuencia de actualización de jugadores (ms)

    tileCacheSize
    20000
    Máximo de mosaicos a almacenar en memoria (~200MB a 10KB/mosaico)

    enabledWorlds
    []
    Lista blanca de mundos (vacío = todos)

    renderExploredChunksOnly
    true
    Renderiza solo los trozos que los jugadores han explorado (previene lag/abuso)

    chunkIndexCacheMs
    30000
    Cuánto tiempo almacenar en caché el índice de trozos explorados (ms)

    useDiskCache
    true
    Guardar mosaicos en disco para persistencia entre reinicios

    tileRefreshRadius
    5
    El jugador debe estar dentro de N trozos para que el mosaico se actualice

    tileRefreshIntervalMs
    60000
    Tiempo mínimo entre actualizaciones de mosaicos (ms)

    enableHttps
    false
    Habilitar HTTPS automático con Let’s Encrypt

    httpsPort
    8443
    Puerto para conexiones HTTPS

    domain
    “”
    Tu nombre de dominio para el certificado SSL

    acmeEmail
    “”
    Correo electrónico para notificaciones de Let’s Encrypt

    useProductionAcme
    true
    Usar Let’s Encrypt de producción (false = staging para pruebas)

    Caché de Índice de Trozos (chunkIndexCacheMs)

    Cuando renderExploredChunksOnly está habilitado, el plugin necesita verificar qué trozos han sido explorados. Esto requiere leer un índice del disco. Para evitar leer el disco en cada solicitud de mosaico, el índice se almacena en caché.

    Compensación:

    • Valor más bajo (por ejemplo, 5000ms): La nueva exploración se muestra en el mapa más rápido, pero más lecturas de disco
    • Valor más alto (por ejemplo, 60000ms): Menos lecturas de disco, pero las áreas recién exploradas tardan más en aparecer

    Lo que esto significa en la práctica:

    Tiempo de Caché
    Lecturas de Disco
    Frescura del Mapa

    5000 (5s)
    ~12/min por mundo
    Nuevos trozos visibles en 5 segundos

    30000 (30s)
    ~2/min por mundo
    Nuevos trozos visibles en 30 segundos

    60000 (1min)
    ~1/min por mundo
    Nuevos trozos visibles en 1 minuto

    Escenario de ejemplo: Un jugador explora una nueva área. Con chunkIndexCacheMs: 30000, los nuevos trozos no aparecerán en el mapa web hasta que la caché expire (hasta 30 segundos). El mosaico se mostrará como vacío hasta entonces.

    Nota: Esto solo afecta a los trozos nuevos explorados. Los trozos ya explorados siempre son visibles. El comando /easywebmap clearcache borra esta caché inmediatamente si es necesario

    Caché en Disco & Actualización Inteligente

    El plugin utiliza un sistema de caché inteligente para minimizar la carga del servidor:

  • Caché en Disco: Los mosaicos se guardan como archivos PNG en mods/cryptobench_EasyWebMap/tilecache/. Estos persisten entre reinicios del servidor, por lo que el primer visitante después de un reinicio no activa una generación masiva de mosaicos.

  • Actualización Inteligente: Los mosaicos solo se regeneran cuando:

    • El mosaico es más antiguo que tileRefreshIntervalMs (predeterminado: 60 segundos), Y
    • Un jugador está dentro de tileRefreshRadius trozos (predeterminado: 5 trozos)
  • Por qué esto es importante:

    • Si no hay jugadores cerca, el terreno no puede haber cambiado, por lo que el mosaico almacenado en caché siempre es válido
    • Esto significa que el 99% de las solicitudes de mosaicos se sirven instantáneamente desde la caché sin carga en el servidor
    • Solo las áreas activamente jugadas se regeneran, y solo una vez por minuto como máximo

    Flujo:

    Solicitud de mosaico → ¿Caché de memoria? → Servir instantáneamente
                              ↓ no
                       ¿Caché en disco? → ¿Suficientemente fresco? → Servir desde disco
                              ↓ no         ↓ viejo
                       Generar nuevo   ¿Jugadores cerca? → No: Servir obsoleto (terreno sin cambios)
                                             ↓ sí
                                      Regenerar mosaico

    Pre-generación

    Usa /easywebmap pregenerate <radius> para calentar la caché:

    • Genera mosaicos en un cuadrado alrededor de tu posición
    • Salta mosaicos ya almacenados en caché y trozos no explorados
    • Se ejecuta en segundo plano con un retraso de 50ms entre mosaicos para evitar lag
    • Ejemplo: /easywebmap pregenerate 50 genera hasta 10,201 mosaicos
    • Sin límite máximo – usa lo que necesites (valores grandes tomarán tiempo)

    Casos de Uso Comunes

    Mapa de servidor público – Permite a los jugadores ver dónde están todos… [Truncado]

    Relacionados:

    Synapse

    Synapse

    #API#Desarrollo#Hytale

    Synapse v1.3.0 — API moderna de marcadores de posición (¡Ahora con soporte para Hytale!) Synapse es un poderoso y modern...

    Bridge

    Bridge

    #API#gestión#Hytale

    Una poderosa biblioteca de plugins de Hytale para crear, gestionar y orquestar mundos temporales con facilidad. Bridge p...

    HyDB

    HyDB

    #API#Base de datos#Desarrollo

    HyDB &#8211; API de Base de Datos SQLite Profesional para Hytale 📊 Resumen HyDB es un plugin base profesional para Hyta...

    Advanced Parties

    Advanced Parties

    #AdvancedParties#API#grupos

    ⚠️ Trabajo en Progreso ⚠️AdvancedParties está en desarrollo activo. Se planean características como la interfaz gráfica ...

    Cassaforte

    Cassaforte

    #API#Cassaforte#Desarrollo

    Una API de abstracción de plataforma para plugins de Hytale, que proporciona interfaces de economía, permisos y chat. De...

    Coins

    Coins

    #API#Economía#Hytale

    Hytale Coins Mod Un sencillo mod de economía para Hytale que añade monedas físicas y un sistema de cartera digital. Cara...