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.mcmetapack.pngassets/minecraft/atlases/blocks.jsonassets/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.
| Archivo | Se escribe cuando | Propósito |
|---|---|---|
assets/freeminecraftmodels/rspm_item_bases/display/{modelId}.json | El 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 archivo | Indica 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}.json | El modelo tiene un modelo de visualización y una animación con fotogramas clave de partículas | Enumera 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}.json | El modelo usa un efecto de partículas | Indica 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_*) yhitbox. Los anclajestag_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_leangenerado, 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
hitboxdel modelo; sin él recae en1.0x2.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ón | Modelo 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ón | Modelo 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 huesoshitbox(solo colisión), los anclajes posicionalestag_name, las variantesfmm_nametag_bone_*autogeneradas de FMM y los huesos puramente envolventes o de anclaje.
Estas correcciones se aplican automáticamente; no se requiere configuración.
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 reloadsi ResourcePackManager está activo - programa
FmmReloadedEventen 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.