Saltar al contenido principal

Salida del Resource Pack de FreeMinecraftModels

Actualmente FreeMinecraftModels escribe su pack generado en output, no en outputs.

Rutas de Salida Predeterminadas

El plugin reconstruye esta carpeta durante el inicio y con /fmm reload:

plugins/FreeMinecraftModels/output/FreeMinecraftModels

Luego comprime esa carpeta en:

plugins/FreeMinecraftModels/output/FreeMinecraftModels.zip

Esa ruta zip es la que ResourcePackManager espera cuando se integra con FreeMinecraftModels.

Qué se Genera

La carpeta generada siempre incluye:

  • pack.mcmeta
  • pack.png
  • assets/minecraft/atlases/blocks.json
  • assets/freeminecraftmodels/... salida de modelos y texturas

Para Minecraft 1.21.4+, FreeMinecraftModels genera archivos de definición de item-model bajo:

assets/freeminecraftmodels/items

Para servidores más antiguos, recurre a la ruta heredada del modelo override de leather-horse-armor.

Salida del Modelo de Visualización (1.21.4+)

Cuando un modelo tiene un archivo .json hermano de modelo de visualización (consulta Notas de Creación de Modelos), FMM copia ese JSON (con las referencias de textura reescritas para coincidir con las texturas extraídas) en:

assets/freeminecraftmodels/models/display/{modelId}.json

También genera una definición de item correspondiente en:

assets/freeminecraftmodels/items/display/{modelId}.json

El DisplayModelRegistry rastrea qué modelos tienen JSONs de display en runtime para que ItemMeta.setItemModel() pueda ser llamado en ItemStacks para darles la apariencia correcta en la mano y en el inventario.

Paquete de Entidades Personalizadas de Bedrock

Junto a los assets del pack de Java, FreeMinecraftModels exporta un paquete de entidades personalizadas de Bedrock para cada modelo convertido en:

plugins/FreeMinecraftModels/output/FreeMinecraftModels/assets/freeminecraftmodels/rspm_bedrock_pack

Cada modelo aporta sus texturas, geometría, render controller, animaciones, animation controllers y definición de entidad, todo bajo el namespace freeminecraftmodels: (freeminecraftmodels:<model_id>).

Notas que importan al crear modelos:

  • Un modelo sin texturas se omite, con Skipping Bedrock custom entity export for <id>: model has no textures. en la consola
  • La geometría Bedrock excluye los huesos de montura (m_), los de etiquetas generados (fmm_nametag_bone_*) y hitbox. Los anclajes tag_ creados por el autor permanecen, a menudo sin cubos.
  • Un modelo sin animaciones exporta igualmente una única ranura de animación idle
  • El ancho/alto del hitbox en runtime para la entidad de Bedrock provienen del hueso hitbox del modelo; sin él recae en 1.0 x 2.0

El backend Bedrock necesita un plugin activo llamado floodgate, Geyser-Spigot o Geyser. La comparación ignora mayúsculas, pero no acepta otros nombres. En un servidor solo Java, FMM sigue exportando el paquete, pero no crea ni ejecuta ese backend.

Salida Condicional de Item para Arco y Ballesta

Cuando FMM detecta un conjunto de modelos de estado de arco o ballesta (consulta Notas de Creación de Modelos), genera una única definición de item JSON para el modelo _idle que conmuta condicionalmente entre todos los estados a nivel de resource pack. No se necesita trabajo de paquetes del lado del servidor -- el cliente maneja las transiciones de estado de forma nativa.

Salida de Arco

Para arcos, la definición de item generada usa minecraft:condition sobre using_item con un minecraft:range_dispatch sobre use_duration (escala 0.05):

CondiciónModelo usado
No usando el objeto_idle
Usando, fallback (recién iniciado)_draw_start
Usando, umbral 0.65_draw_half
Usando, umbral 0.9_draw_full

Salida de Ballesta

Para ballestas, la definición de item generada usa minecraft:select sobre charge_type. Cuando está cargada (flecha o cohete), muestra el modelo _charged. El fallback sin cargar usa minecraft:range_dispatch sobre crossbow/pull:

CondiciónModelo usado
No usando, no cargada_idle
Usando, fallback (recién iniciado)_draw_start
Usando, umbral 0.58_draw_half
Usando, umbral 1.0_draw_full
Cargada (flecha o cohete)_charged

Ubicación de Salida

La definición condicional de item generada se escribe junto a las demás definiciones de item en:

assets/freeminecraftmodels/items/display/{baseModelId}_idle.json

Solo el modelo _idle obtiene un archivo de definición de item. Los modelos de draw y charged se referencian dentro de él como entradas condicionales.

Correcciones de Compatibilidad para Minecraft 26.1+

El generador de packs aplica dos correcciones de compatibilidad automáticas para Minecraft 26.1 y posterior:

  • Clamping de UV: las UV de las caras se clampean a los propios límites de píxeles de la textura de origen (0textureWidth / 0textureHeight) antes de reescalarse al espacio UV de 16x16 de Minecraft. Algunos autores de .bbmodel dejan UVs negativas o excesivas en las caras — se redimensionó un atlas, el autouv se pasó del borde, etc. — que el validador más estricto de 26.1 rechaza. El clamping permite que el modelo se compile; una cara con UV fuera de rango pierde como mucho unos pocos píxeles de detalle de textura.
  • Los huesos vacíos y los que solo son anclajes se omiten: un hueso sin cubos no escribe ningún JSON de geometría, así que escribir una definición de item model para él dejaría una referencia colgante. 1.21.x lo toleraba en silencio; 26.1+ registra cada caso como Missing block model: freeminecraftmodels:.... El generador ahora omite tanto el archivo de geometría como la definición de item para esos huesos. Esto también cubre los huesos hitbox (solo colisión), los anclajes posicionales tag_name, las variantes fmm_nametag_bone_* autogeneradas de FMM y los huesos puramente envolventes o de anclaje.

Estas correcciones se aplican automáticamente; no se requiere configuración.

nota

Omitir esos huesos es la razón por la que un hueso de nametag tag_ nunca necesita cubos — es un anclaje posicional, y el generador deliberadamente no escribe nada para él. Consulta Los nametags requieren un hueso tag_.

Salida Determinista

El pack generado es estable a nivel de bytes: regenerarlo a partir de modelos sin cambios produce un zip idéntico y, por tanto, un SHA1 idéntico.

Esto importa porque ResourcePackManager omite volver a subir un pack cuyo SHA1 ya coincide con lo que tiene el host remoto. Si los bytes cambian sin motivo, esa comprobación nunca coincide, RSPM vuelve a subir en cada reinicio, y todos los jugadores vuelven a descargar un pack cuyo contenido no cambió.

Dos puntos del generador escriben JSON directamente a disco, así que el orden de iteración de sus mapas es el orden de bytes del archivo:

  • las definiciones de item model por hueso bajo assets/freeminecraftmodels/items
  • el bloque display del JSON de modelo por hueso bajo assets/freeminecraftmodels/models

Ambos usan ahora mapas que conservan el orden de inserción. Antes usaban Map.of, que se apoya en java.util.ImmutableCollections — eso siembra una sal aleatoria por JVM y sondea desde un índice dependiente de la sal, de modo que el mismo puñado de claves salía en un orden distinto en cada arranque del servidor. Claves como translation / scale, y type / index / default, intercambiaban posiciones en cada arranque, reescribiendo cada definición de item y cada archivo de modelo sin ningún motivo.

Si antes veías que los jugadores volvían a descargar el resource pack después de cada reinicio aunque no hubieras cambiado nada, esta era la razón.

nota

El determinismo solo se mantiene si tu conjunto de modelos no cambia. Añadir, eliminar, renombrar o editar un modelo cambia legítimamente los bytes del pack y debe provocar una nueva subida.

Comportamiento de Recarga

Cuando FreeMinecraftModels se recarga:

  • vuelve a ejecutar el paso de import de contenido
  • reconstruye la carpeta output/FreeMinecraftModels
  • regenera output/FreeMinecraftModels.zip
  • despacha resourcepackmanager reload si ResourcePackManager está instalado

Por esto las configuraciones modernas de FMM + ResourcePackManager ya no necesitan el viejo flujo manual de copiar el zip.

Una recarga correcta emite FmmReloadedEvent después de reconstruir el contenido. La exportación Bedrock valida antes los modelos y omite entidades sin texturas en lugar de publicar geometría incompleta.