Saltar al contenido principal

ResourcePackManager (RSPM)

ResourcePackManager descubre, fusiona, aloja y distribuye paquetes de recursos de plugins compatibles y de paquetes suministrados manualmente. También puede convertir el paquete Java fusionado en un paquete de recursos de Bedrock para que los jugadores de GeyserMC vean el mismo contenido personalizado que los jugadores de Java, y ofrece soporte de primera clase para redes proxy de BungeeCord y Velocity.

Qué hace​

  • descubre paquetes de plugins compatibles y los fusiona según priorityOrder
  • ejecuta su propio servidor HTTP integrado para poder autoalojar el paquete fusionado (sin necesidad de un host de archivos externo)
  • puede recurrir al alojamiento gratuito de MagmaGuy (auto-host) cuando el autoalojamiento no es viable
  • puede forzar u opcionalmente solicitar el uso del paquete
  • vigila los cambios en los paquetes y vuelve a fusionar automáticamente cuando las fuentes se estabilizan
  • convierte el paquete Java fusionado en un paquete de recursos de Bedrock para GeyserMC
  • registra verdaderas entidades personalizadas de Bedrock en Geyser mediante una extensión de Geyser incluida, de modo que las entidades modeladas (p. ej. FreeMinecraftModels, EliteMobs) se renderizan y animan para los jugadores de Bedrock
  • funciona en redes proxy: los backends participantes producen paquetes Bedrock; el proxy los descubre, fusiona sus paquetes y sirve el resultado a través de Geyser
  • enlaza una red sin ninguna clave que pegar: el proxy es el dueño de la clave de red, la guarda en su propio archivo network-key y se la envía a cada backend automáticamente la primera vez que un jugador se conecta allí
  • puede mantenerse actualizado en toda una red: los backends ofrecen el jar universal del plugin a través de una ruta autenticada; el proxy valida su estructura y versión, rechaza las bajadas de versión, verifica los bytes transferidos por SHA-256 y lo prepara para el siguiente apagado

Resumen de la arquitectura​

RSPM v2 es una compilación Maven multimódulo, pero se distribuye como un único jar: ResourcePackManager.jar. Ese único jar contiene el plugin de Bukkit/Paper, el plugin de Velocity y el plugin de BungeeCord todos a la vez — Minecraft carga el punto de entrada que coincida con la plataforma en la que se ejecuta. Ya no existen archivos ResourcePackManager-Velocity.jar / ResourcePackManager-BungeeCord.jar separados que extraer.

La carpeta proxy-extension/ sigue existiendo, pero ahora significa otra cosa: cuando un backend se da cuenta de que está detrás de un proxy y nunca ha recibido una clave de red, prepara una copia byte a byte idéntica de su propio jar en ejecución en plugins/ResourcePackManager/proxy-extension/ResourcePackManager.jar y te dice que copies ese único archivo al proxy. Es una copia por comodidad del jar que ya tienes, no un artefacto separado por plataforma.

El mismo jar desempeña dos roles según dónde lo coloques:

  • Como plugin de backend (en cada backend de Paper/Spigot) — mezcla paquetes Java, ejecuta el convertidor de Bedrock, aloja el paquete, expone un pequeño servidor HTTP y envía paquetes a los clientes Java.
  • Como plugin del proxy (en un proxy de Velocity o BungeeCord) — obtiene el paquete de Bedrock y los mappings de cada backend, los fusiona en un único paquete a nivel de red y los sirve a los clientes de Bedrock a través del Geyser del proxy.

Un servidor independiente solo necesita el jar en el backend. Una red proxy usa el mismo jar en el proxy y en los backends que aportan paquetes de recursos. Los servidores registrados sin RSPM no retrasan la sincronización de paquetes. Consulta el descubrimiento de backends.

El mismo jar hace además de extensión de Geyser. Cuando el backend detecta una instalación local de Geyser-Spigot, instala ese mismísimo ResourcePackManager.jar universal en Geyser-Spigot/extensions/ para que Geyser pueda renderizar las entidades de Bedrock personalizadas de RSPM; el rol de proxy hace lo mismo con el Geyser del proxy. (Las versiones antiguas incluían un ResourcePackManager-GeyserBridge.jar separado — ese archivo está retirado y se reemplaza automáticamente a través de la cola de actualización de Geyser.) Consulta Extensión de Geyser y entidades personalizadas.

Opciones de alojamiento​

La entrega del paquete Java usa esta precedencia:

  1. Autoalojamiento forzado (selfHostForce: true) — anula autoHost y selfHostEnabled, y omite los sondeos y la subida remota. Principalmente para pruebas. La validación de la URL y el inicio del servidor HTTP deben funcionar antes de anunciarla.
  2. Con autoHost: true, preferSelfHost: true y selfHostEnabled: true, RSPM intenta primero el autoalojamiento en servidores independientes y backends de proxy. Comprueba la dirección, compara muestras del paquete descargadas desde localhost y la URL exacta del jugador, y exige accesibilidad externa antes de anunciar la URL. Si la verificación falla o no está disponible, recurre al alojamiento remoto. El proxy sigue obteniendo los artefactos Bedrock del servidor HTTP del backend.
  3. Respaldo de alojamiento remoto — si el autoalojamiento está desactivado o la verificación falla, RSPM reutiliza o sube el paquete a magmaguy.com/rsp/ y anuncia esa URL. Si la ruta remota falla, puede recurrir al autoalojamiento con selfHostEnabled: true, sujeto a la misma verificación. Si ambas rutas automáticas fallan, no se anuncia una URL de entrega nueva.

Si autoHost: false y selfHostForce: false, RSPM escribe el zip fusionado en plugins/ResourcePackManager/output/ sin enviar ninguna URL.

Consulta Autoalojamiento para el árbol de decisión completo de entrega, resolución de puertos y detección del host externo.

selfHostExternalUrl permite que un proxy inverso publique el paquete Java en una URL HTTP o HTTPS completa mientras RSPM mantiene la entrega automática. El proxy inverso se encarga de TLS y reenvía las solicitudes a la ruta integrada /rspm.zip.

Conversión de Java a Bedrock​

El convertidor de Bedrock ya no es exclusivo de FreeMinecraftModels. Recorre recursivamente cada archivo de definición de ítems 1.21.4+ (assets/<namespace>/items/**/*.json) del paquete fusionado y produce geometría, attachables e iconos de inventario de Bedrock para cualquier plugin que los haya proporcionado:

  • Los jugadores de Bedrock ven ítems 3D, armaduras personalizadas y equipo modelado para cualquier plugin cuyo paquete use el formato de definición de ítems 1.21.4+.
  • Las texturas de armadura personalizadas se renderizan en jugadores de Bedrock usando la geometría de armadura vanilla con la textura Java como capa visible.
  • Los iconos de inventario para ítems 3D se renderizan por software a partir del modelo Java mediante la transformación display.gui.
  • El paquete de Bedrock se sirve en vivo por sesión de Bedrock a través de la API de Geyser, de modo que los retoques de textura y modelo llegan al siguiente jugador de Bedrock que se conecte sin reiniciar el servidor. Las asignaciones de ítems personalizados siguen requiriendo un reinicio porque Geyser las registra al arrancar.
  • Los ítems 3D en mano toman sus poses de primera y tercera persona de las transformaciones display.firstperson_righthand y display.thirdperson_righthand del modelo Java, trasladadas al rig vanilla del jugador de Bedrock. No hay desplazamientos que ajustar.
  • Los ítems 3D en mano cuyo plugin incluye un archivo auxiliar de partículas, como los ítems de FreeMinecraftModels con efectos de partículas, reproducen esas partículas para los jugadores de Bedrock. Los paquetes de entidades también pueden incluir archivos de partículas de Bedrock.

Integraciones actuales​

ResourcePackManager incluye entradas de integración predefinidas para estos plugins:

  • BackpackPlus
  • BetterHUD
  • BetterStructures
  • CannonRTP
  • EliteMobs
  • EternalTD
  • FreeMinecraftModels
  • InfiniteVehicles
  • ItemsAdder
  • MegaBlockSurvivors
  • MMOInventory
  • ModelEngine
  • Nexo
  • Nova
  • Oraxen
  • RealisticSurvival
  • ResurrectionChest
  • ValhallaMMO
  • vane-core

Cada integración solo se activa si el plugin está instalado y su ruta local o URL remota configurada es utilizable. El plugin también detecta Geyser (Geyser-Spigot en un backend, Geyser-Velocity / Geyser-BungeeCord en un proxy) al arrancar y conecta la entrega del paquete de Bedrock con el que encuentre.

Próximos pasos​