Saltar al contenido principal

Salida del paquete de recursos de FreeMinecraftModels

FreeMinecraftModels escribe su paquete generado en output.

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.

La generación elimina todo lo que hay en output salvo el último FreeMinecraftModels.zip publicado y después lo reconstruye. Guarda los modelos originales y otros archivos fuera de él. Si FMM no puede vaciar la carpeta, la generación falla con Failed to prepare output folder y FMM no termina de inicializarse.

Qué se genera​

La generación copia los metadatos, el icono y el atlas incluidos con el plugin y añade los modelos y las texturas cargados:

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

Si falta un recurso incluido, o FMM no puede crear una carpeta, la generación falla. Un error al escribir los archivos de un modelo se registra y la generación continúa, así que revisa la consola además de la salida. Antes de crear el ZIP, FMM añade entradas explícitas al atlas para sus texturas de entidades, incluidas las texturas de partículas, y sustituye su fuente de atlas basada en el directorio de entidades. Las demás fuentes se conservan. Un error al leer o escribir el atlas hace fallar la generación.

FreeMinecraftModels genera archivos de definición de modelos de objetos en:

assets/freeminecraftmodels/items

El código conserva una ruta antigua de sustitución del modelo de armadura de cuero para caballo para servidores anteriores a 1.21.4, pero el plugin declara api-version: 1.21.4, por lo que ningún servidor capaz de cargarlo ejecuta esa ruta.

Salida del modelo de visualización (1.21.4+)​

Cuando un modelo tiene un archivo .json de visualización válido a su lado (consulta Notas de creación de modelos), FMM procesa su mapa textures y lo escribe en:

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

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

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

Los valores de textura con espacio de nombres se conservan. Los demás se resuelven por índice numérico de textura, usando una textura extraída disponible como alternativa. Un JSON de visualización mal formado genera una advertencia y no se registra. El registro permite a FMM asignar el modelo procesado a la apariencia de un objeto en la mano y en el inventario.

Sprites de partículas​

Para cada efecto de partículas que usa un modelo, FMM escribe la textura del efecto y un modelo de objeto plano por sprite:

assets/freeminecraftmodels/textures/entity/fmm_particles/{modelId}/{effect}.png
assets/freeminecraftmodels/models/particle/{modelId}/{effect}/{index}.json
assets/freeminecraftmodels/items/particle/{modelId}/{effect}/{index}.json

Solo los jugadores Java ven estos sprites. Los jugadores Bedrock reciben el efecto como partícula nativa a partir del paquete de Bedrock que se describe más abajo.

Archivos auxiliares para ResourcePackManager​

FMM escribe pequeños archivos JSON que ResourcePackManager lee mientras convierte el paquete para Bedrock. No tienen ningún efecto en los clientes Java.

ArchivoSe escribe cuandoPropósito
assets/freeminecraftmodels/rspm_item_bases/display/{modelId}.jsonEl modelo tiene un modelo de visualización y su .yml hermano establece un material que el servidor conoce. Un sufijo de tinte de cuero como LEATHER_CHESTPLATE:ff8800 hace que se omita el archivoIndica el objeto vanilla en el que se basa el objeto personalizado, como minecraft:blaze_rod, para que Bedrock muestre el modelo sobre el objeto base correcto en lugar de uno deducido del nombre del archivo
assets/freeminecraftmodels/rspm_item_particles/display/{modelId}.jsonEl modelo tiene un modelo de visualización y una animación con fotogramas clave de partículasEnumera los efectos, los locators y la timeline de partículas en bucle que ResourcePackManager añade al attachable de Bedrock del objeto
assets/freeminecraftmodels/rspm_item_java_only/particle/{modelId}/{effect}.jsonEl modelo usa un efecto de partículasIndica a ResourcePackManager que no convierta los objetos de sprite de ese efecto en objetos personalizados de Bedrock

Mientras particleEffectsEnabled sea false, FMM omite los archivos rspm_item_particles y los archivos de partículas de Bedrock. Los sprites de partículas de Java y sus archivos rspm_item_java_only se siguen escribiendo.

Paquete de entidades personalizadas de Bedrock​

Junto a los recursos del paquete Java, FreeMinecraftModels intenta exportar un paquete de entidades personalizadas de Bedrock para cada modelo cargado con texturas 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>). Un modelo con efectos de partículas aporta también particles/<model_id>_<effect>.json (identificador fmm:<model_id>_<effect>) y, cuando FMM encontró la textura del efecto, textures/entity/fmm_particles/<model_id>/<effect>.png. Consulta Partículas.

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
  • El importador de Java sigue aceptando esa definición sin texturas; la omisión explícita solo afecta a su entrada en el paquete de entidades personalizadas de Bedrock
  • 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
  • La geometría de un modelo cuelga de un hueso freeminecraftmodels_lean generado, salvo que el modelo tenga más de 672 animaciones. El hueso muestra a los jugadores de Bedrock la orientación de desplazamiento y el centrado. Los canales de animación con keyframes de MoLang se escriben tal como se crearon, así que los clientes de Bedrock los evalúan
  • 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

Un grupo hitbox vacío tiene dimensiones cero; no utiliza esos valores predeterminados. El prefijo b_ oculta el renderizado en Java, pero no se filtra de la geometría Bedrock. La exportación de animaciones Bedrock no incorpora la solución de IK que FMM calcula durante la ejecución; consulta Animaciones. Los errores de exportación se registran y pueden dejar un paquete incompleto.

El backend Bedrock necesita un plugin activo llamado floodgate, Geyser-Spigot o Geyser. Esta comprobación ignora mayúsculas. La detección individual de jugadores comprueba por separado Floodgate o Geyser-Spigot; activar el backend no demuestra que se detecten los jugadores ni que se entregue el paquete. En un servidor solo Java, FMM sigue exportando los archivos, pero no crea ni ejecuta ese backend.

Salida condicional de objetos para arco y ballesta​

Cuando FMM detecta un conjunto completo de modelos de estado de arco o ballesta cargados con sus JSON de visualización registrados (consulta Notas de creación de modelos), genera una definición de objeto con el ID base del modelo. Esa definición cambia entre estados en el cliente. El objeto configurado debe usar el material BOW o CROSSBOW correspondiente.

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}.json

El ID base pasa a ser el objeto de visualización público. Las definiciones de objeto de los estados individuales se eliminan de la salida y del registro; su geometría de visualización se conserva porque la definición condicional la referencia.

Correcciones de compatibilidad para Minecraft 26.1+​

El generador de paquetes aplica estas correcciones en todas las versiones compatibles, incluida Minecraft 26.1 y posteriores:

  • Limitación de UV: las UV de las caras se limitan a los límites UV de la textura (0–textureWidth / 0–textureHeight) antes de reescalarlas al espacio UV de 16x16 de Minecraft. Estos límites usan los metadatos UV de la textura si existen; en caso contrario, las dimensiones de la imagen o la resolución alternativa del modelo. Limitar coordenadas negativas o excesivas puede reducir el detalle de la textura en la cara afectada.
  • 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

Un anclaje de etiqueta de nombre tag_ no necesita cubos. Los anclajes sin cubos no generan geometría; el prefijo por sí solo no oculta todos los huesos creados con cubos. El hueso llamado exactamente tag_name recibe un tratamiento especial. Consulta Anclajes de etiquetas de nombre.

Salida determinista​

FMM reduce los cambios innecesarios usando mapas que conservan el orden de inserción en las definiciones de objetos por hueso y los bloques display de los modelos. El escritor ZIP también fija las marcas de tiempo de las entradas.

No se garantizan bytes ZIP idénticos: el escritor recorre los directorios en el orden del sistema de archivos, sin ordenar las entradas. Los cambios en modelos, texturas, JSON de visualización, configuración o versiones del generador o del servidor también pueden cambiar legítimamente el paquete.

Si el hash cambia de forma inesperada, compara el contenido y el orden de las entradas del archivo, además de los datos usados para generarlo. Una descarga repetida por sí sola no identifica la causa.

Comportamiento de recarga​

Con /fmm reload, FMM primero importa contenido y prepara los catálogos candidatos de objetos, encantamientos y recetas mientras la ejecución actual sigue activa. Si esa preparación falla, rechaza la recarga y conserva el catálogo actual. Tras una preparación correcta:

  • elimina los modelos, elementos decorativos, disfraces y motores de scripts activos, el estado de los escuchadores y los almacenes de tiempos de reutilización antes de reconstruirlos
  • recarga la configuración y las recetas
  • reconstruye la carpeta output/FreeMinecraftModels
  • regenera output/FreeMinecraftModels.zip
  • ejecuta resourcepackmanager reload si ResourcePackManager está activo
  • programa FmmReloadedEvent en el hilo principal 40 ticks después, para que los plugins dependientes puedan volver a vincular sus modelos

FMM escribe primero el archivo en output/FreeMinecraftModels.zip.pending y después lo mueve sobre FreeMinecraftModels.zip. Si la escritura o el movimiento fallan, la generación falla y el ZIP anterior se queda donde estaba. Un ZIP completo no demuestra la entrega, así que verifica también la entrega mediante ResourcePackManager y la aceptación en el cliente. Consulta Configuración para distinguir una recarga completa de una actualización del contenido importado.