Saltar al contenido principal

Configuración de FreeMinecraftModels

registerCraftingRecipes en config.yml vale true por defecto. Cámbialo a false y reinicia para una economía de solo compras: las recetas siguen visibles en los menús y la tienda, pero se eliminan las recetas de fabricación de Bukkit. Las instrucciones de fabricación de esta página requieren true.

Esta página cubre los ajustes actuales de config.yml y shop_config.yml que afectan materialmente la configuración inicial, el renderizado, la interacción del jugador y la tienda de muebles opcional.

Ubicaciones de Archivos

plugins/FreeMinecraftModels/config.yml
plugins/FreeMinecraftModels/shop_config.yml

shop_config.yml se genera en la primera ejecución; la tienda en sí permanece deshabilitada hasta que la habilites explícitamente.

Ajustes de config.yml

setupDone

  • Predeterminado: false
  • Controla si la guía de configuración inicial se considera completada
  • Los jugadores con permisos amplios de FreeMinecraftModels reciben el recordatorio de ejecutar /fmm setup mientras este valor permanezca en false
  • El flujo de configuración cambia este valor por ti; no necesitas editarlo a mano durante la incorporación normal

nightbreak.autoDownloadPluginUpdates

  • Predeterminado: false
  • Ajuste compartido de MagmaCore (vive bajo la sección nightbreak: de config.yml)
  • Cuando es true, FreeMinecraftModels descarga automáticamente las actualizaciones del jar del plugin disponibles y los archivos de actualización de contenido al iniciar
  • Las actualizaciones de plugin y contenido descargadas solo se aplican después de que el servidor se reinicie
  • Las descargas automáticas del plugin requieren un token de cuenta de Nightbreak válido y una membresía activa de supporter en Patreon. Sin ambas cosas, deja esto en false y usa el botón de actualización dentro del juego
  • Esto equivale, a nivel de clave de configuración, a ejecutar /fmm downloadpluginupdate / /fmm downloadall en cada arranque; actívalo desde el menú /fmm setup o a mano

useDisplayEntitiesWhenPossible

  • Predeterminado: true
  • Indica a FreeMinecraftModels que prefiera el renderizado mediante display-entity cuando el servidor y la ruta del cliente lo soporten
  • El plugin sigue recurriendo a los displays de armor-stand cuando las display entities no están disponibles (versiones anteriores a 1.19.4 o Bedrock)
  • Los clientes Bedrock son un caso especial, así que no asumas que esto fuerza la misma ruta de renderizado para todos los jugadores

maxModelViewDistance

  • Predeterminado: 60
  • Limita la distancia a la que se envían entidades modeladas a los espectadores
  • Valores más bajos reducen la carga de paquetes y renderizado del cliente en zonas densas con muchos modelos
  • Entidades individuales pueden sobrescribir este valor en runtime mediante ModeledEntity.setViewDistanceOverride(int) — consulta la guía de la API

maxInteractionAndAttackDistance

  • Predeterminado: 3
  • Se aplica a entidades modeladas estáticas y dinámicas
  • Lo usan las comprobaciones de interacción y detección de impactos del runtime

maxInteractionAndAttackDistanceForProps

  • Predeterminado: 6
  • Se aplica a entidades prop
  • Es independiente de la distancia de interacción para entidades estáticas/dinámicas

sendCustomModelsToBedrockClientsV2

  • Predeterminado: true
  • Controla si FreeMinecraftModels intenta enviar modelos personalizados a clientes Bedrock
  • Esta clave reemplaza a la antigua sendCustomModelsToBedrockClients (que tenía como predeterminado false). El cambio de nombre a V2 invierte el predeterminado para que los jugadores Bedrock vean modelos por defecto; si anteriormente establecías la clave antigua de forma explícita, puedes eliminarla y la nueva clave V2 toma el control
  • Si está deshabilitado, los jugadores Bedrock vuelven a la entidad vanilla subyacente cuando exista (y los disfraces no se renderizarán para ellos)
  • Si lo habilitas, asegúrate de que tu ruta de resource pack de Bedrock/Geyser/Floodgate esté realmente lista para esos clientes
  • El logging de diagnóstico en runtime para el pipeline de visualización de Bedrock no es una clave de configuración — se activa en runtime mediante /fmm debug bedrock on|off para que nunca quede activado accidentalmente en producción. Consulta Comandos

skipUnchangedBoneUpdates

  • Predeterminado: true
  • Cuando es true, un hueso de modelo solo envía sus paquetes de movimiento/metadatos por tick a los espectadores si su posición, rotación o escala cambió realmente desde el tick anterior
  • Los huesos perfectamente quietos (props estáticos, partes inactivas de un modelo) no envían nada, lo que recorta drásticamente la carga de paquetes por cliente en zonas densas como hubs de NPC y pueblos
  • La resincronización completa periódica sigue ejecutándose, así que cualquier deriva rara del cliente se autocorrige
  • Ponlo en false solo para restaurar el antiguo comportamiento de "reenviar siempre cada hueso en cada tick" con fines de depuración

useDeltaMetadataPackets

  • Predeterminado: true
  • Cuando es true, el paquete de metadatos por tick para los huesos de modelo con display-entity envía solo los valores que cambiaron (la transformación del hueso) en lugar de reserializar todo el blob de item-display (item model + custom model data) en cada tick
  • El estado completo se sigue enviando cuando un jugador ve un modelo por primera vez y en la resincronización periódica
  • Ponlo en false para restaurar el antiguo comportamiento de instantánea completa en cada tick, con fines de depuración o comparación

maxModelsForProximityOverride

  • Predeterminado: 25
  • Pseudo balanceador de carga para la sobrescritura de visibilidad de corto alcance
  • Normalmente un modelo a menos de 10 bloques de un jugador siempre se muestra, omitiendo el raytrace de línea de visión para que los modelos junto a los que estás no aparezcan de golpe
  • En una zona densa (por ejemplo un hub de NPC de varias plantas) esa sobrescritura convierte decenas de modelos que el jugador en realidad no puede ver — en otras plantas, detrás de paredes — en espectadores que envían paquetes en cada tick
  • Cuando un mundo contiene al menos esta cantidad de modelos cargados, la sobrescritura de corto alcance se desactiva en ese mundo, de modo que el raytrace de oclusión se ejecuta incluso de cerca y descarta los modelos con los que el jugador no tiene línea de visión. Los mundos poco poblados conservan la sobrescritura, así que mantienen el comportamiento sin apariciones bruscas
  • La decisión es por mundo, no global, así que un mundo hub abarrotado no penaliza a los tranquilos
  • Súbelo muchísimo para restaurar en la práctica el comportamiento de sobrescritura siempre activa; ponlo a 0 para exigir siempre línea de visión
  • /fmm packetdebug es la herramienta prevista para medir el efecto — consulta Comandos

preventPropPlacementInProtectedRegions

  • Predeterminado: true
  • Cuando es true, FreeMinecraftModels pregunta a los proveedores de protección registrados de MagmaCore si este jugador concreto puede construir en la celda que ocuparía el prop, y rechaza la colocación si la respuesta es no
  • Los jugadores con el permiso freeminecraftmodels.bypassregionprotection (predeterminado: op) se saltan la comprobación por completo y nunca son bloqueados
  • Los proveedores integrados con reconocimiento de jugador cubren actualmente WorldGuard y GriefPrevention. Cualquier otro plugin puede registrar un proveedor de protección de MagmaCore y será respetado igual. Sin ningún proveedor registrado, la comprobación no tiene efecto
  • El mensaje de rechazo es You don't have permission to place a model here!

La comprobación reconoce al jugador, no solo a la región. Las versiones anteriores preguntaban "¿está esta ubicación dentro de alguna región protegida?" y bloqueaban a todo el mundo. La comprobación actual pregunta "¿puede este jugador construir aquí?", de modo que un jugador que posee legítimamente la reclamación, o es miembro de confianza de ella, o está dentro de su propia región de WorldGuard, puede colocar props ahí con normalidad. Solo se rechaza a los jugadores que no podrían colocar un bloque vanilla en esa celda.

Toda colocación recibe una comprobación de una sola celda; los props voxelizados reciben además una segunda comprobación de todo el volumen:

Tipo de propCeldas comprobadas
Prop normal (de forma libre)La única celda adyacente a la cara del bloque clicado — la celda que ocupará el prop
Prop con voxelize: trueEsa misma celda adyacente primero, y después cada celda de la huella rotada del prop (ancho x alto x profundo) alrededor del punto de colocación alineado a la cuadrícula. Si cualquier celda de ese volumen está fuera de límites, se rechaza toda la colocación

La comprobación de volumen existe porque un prop voxelizado puede tener varios bloques de ancho, así que probar solo la celda clicada permitiría a un jugador ponerse a caballo sobre el límite de una reclamación y soltar un prop grande en la construcción de otra persona. Se ejecuta después de la comprobación de espacio libre, así que Not enough space to place this model! sigue teniendo prioridad cuando la huella está físicamente obstruida.

nota

El permiso de omisión se comprueba antes de la consulta al proveedor, así que conceder freeminecraftmodels.bypassregionprotection es la forma soportada de permitir que el staff coloque props en cualquier sitio sin desactivar esta clave en todo el servidor.

shop_config.yml

La tienda de muebles opcional respaldada por Vault vive en su propia configuración para que pueda habilitarse o ajustarse independientemente del comportamiento principal del plugin. La tienda se niega a registrarse si Vault o un proveedor de economía faltan.

Claves de nivel superior

ClavePredeterminadoDescripción
enabledfalseInterruptor maestro para /fmm shop. El comando solo se registra cuando esto es true y Vault + un proveedor de economía están ambos presentes
defaultPrice100.0Precio escrito en archivos de receta que no establezcan su propio shopPrice en la siguiente carga
menuTitle&8FMM - Furniture ShopTítulo mostrado en la parte superior del inventario de la tienda (soporta códigos de color &)
priceLoreFormat&7Price: &e{price}Línea de lore añadida a cada objeto de la tienda que muestra su precio. Marcador de posición: {price}
clickToBuyLoreFormat&aClick to purchaseLínea de lore añadida a cada objeto de la tienda que invita a la compra

Claves de mensaje (messages.*)

Todos los strings de mensaje soportan códigos de color &.

ClavePredeterminadoMarcadores de posición
messages.purchaseSuccess&aPurchased &f{item} &afor &e{price}&a. Balance: &e{balance}&a.{item}, {price}, {balance}
messages.insufficientFunds&cYou need &e{price} &cto buy &f{item}&c. Balance: &e{balance}&c.{item}, {price}, {balance}
messages.shopDisabled&cThe furniture shop is currently unavailable.ninguno
messages.itemNotForSale&cThat item is not currently for sale.{item}
messages.inventoryFull&eYour inventory was full; &f{item} &ehas been dropped at your feet.{item}

Campos de tienda por receta

Cada archivo de receta en plugins/FreeMinecraftModels/recipes/<model_id>.yml obtiene dos campos adicionales:

CampoPredeterminadoDescripción
shopEnabledtrueSi esta receta es visible en /fmm shop. Recetas con shopEnabled: false siguen siendo fabricables pero nunca se listan para compra
shopPricedefaultPrice de shop_config.ymlCoste en moneda Vault para este objeto específico

El constructor de recetas (/fmm craftify) escribe ambos campos al guardar, de modo que ajustar el precio es solo cuestión de editar texto.

Permisos

Registrados en plugin.yml

PermisoPredeterminadoDescripción
freeminecraftmodels.*opComodín que otorga los permisos de admin, deleteall y disfraz propio/de otros
freeminecraftmodels.adminopAcceso a /fmm admin (el explorador de contenido de administrador) y /fmm giveitem. Otros comandos de administrador/depuración (/fmm location, /fmm spawn, /fmm mount, /fmm itemify, /fmm craftify, /fmm reload, /fmm stats, /fmm hitbox visualize, /fmm debug bedrock, /fmm setup, /fmm initialize, /fmm recommendedplugins, /fmm downloadall, /fmm downloadallcontent, /fmm updatecontent, /fmm downloadpluginupdate) comprueban el comodín freeminecraftmodels.* en su lugar
freeminecraftmodels.deleteallopHijo del comodín; acceso a /fmm deleteall
freeminecraftmodels.disguise.selfopPermite /fmm disguise / /fmm undisguise sobre el emisor
freeminecraftmodels.disguise.othersopPermite disguise/undisguise dirigidos más /fmm disguiselist
freeminecraftmodels.bypassregionprotectionopColocar/interactuar con props dentro de regiones de WorldGuard o reclamaciones de GriefPrevention incluso cuando preventPropPlacementInProtectedRegions está activado
freeminecraftmodels.menutrueAcceso al menú de objetos fabricables /fmm
freeminecraftmodels.shoptrueAcceso a /fmm shop

Configuración YML de Modelo

Cada archivo .bbmodel puede tener un archivo .yml compañero (mismo nombre, mismo directorio) que controla ajustes específicos del modelo. El formato YML unificado soporta los siguientes campos:

isEnabled: true
voxelize: true
solidify: true
scripts:
- my_script.lua
material: DIAMOND_SWORD
name: "&bFrost Blade"
lore:
- "&7A sword forged in ice"
- "&7Deals frost damage"
enchantments:
- SHARPNESS,3
- UNBREAKING,2
CampoTipoDescripción
isEnabledbooleanoSi el modelo se carga (predeterminado: true)
scriptslista de stringsNombres de archivos de script Lua a adjuntar desde plugins/FreeMinecraftModels/scripts/. Incluye .lua por claridad; se aceptan entradas de configuración sin .lua y se resuelven a archivos .lua.
voxelizebooleanoCuando es true, el prop se ajusta a incrementos de rotación de 90 grados y se alinea a la cuadrícula de bloques al colocarse. La huella se calcula desde las dimensiones de la hitbox del modelo (redondeadas a bloques enteros). La colocación verifica que todos los bloques en la huella no son sólidos.
solidifybooleanoCuando es true (requiere voxelize: true), se colocan bloques de barrera solo a nivel de paquete en cada bloque de la huella del prop, dándole colisión del lado del cliente. Estas barreras son invisibles y existen solo en paquetes — no se colocan en el mundo. Las barreras se eliminan automáticamente cuando el prop se recoge o se destruye.
materialstringUn nombre de material Bukkit (p. ej. DIAMOND_SWORD, PAPER). Cuando se establece, el modelo se convierte en un objeto personalizado que los jugadores pueden sostener y equipar
namestringNombre de visualización para el objeto personalizado (soporta códigos de color &)
lorelista de stringsLíneas de lore para el objeto personalizado (soporta códigos de color &)
enchantmentslista de stringsEncantamientos en formato ENCHANTMENT_NAME,LEVEL (p. ej. SHARPNESS,3)

Cuando se establece material, el modelo se registra como un objeto personalizado. Los jugadores pueden recibirlo mediante /fmm giveitem, fabricarlo si se ha configurado una receta, y obtiene acceso a los 22 hooks Lua de objeto.

Los props ejecutan cada script listado bajo scripts: como instancias independientes. Los objetos personalizados actualmente solo usan el primer script válido de la lista; las entradas adicionales después de la primera se ignoran para la vinculación en runtime del objeto.

Notas Operativas

  • /fmm reload reimporta el contenido y regenera el pack de salida, por lo que los cambios de configuración que afectan al comportamiento de renderizado son más fáciles de validar tras una recarga. Se despacha un FmmReloadedEvent en cada recarga para que los plugins dependientes puedan revincular sus adjuntos de modelo.
  • El pack generado es estable a nivel de bytes, así que regenerarlo a partir de un conjunto de modelos sin cambios produce un zip y un SHA1 idénticos. Eso es lo que permite a ResourcePackManager omitir una nueva subida redundante. Consulta Salida del Resource Pack.
  • FreeMinecraftModels solo genera el resource pack; no lo aloja por sí mismo.
  • ResourcePackManager sigue siendo la ruta de entrega recomendada para clientes Java y la ruta documentada más segura para configuraciones mixtas.
  • WorldGuard, WorldEdit, GriefPrevention, Vault, floodgate y Geyser-Spigot están declarados como softdepend en plugin.yml — ninguno es necesario para iniciar el plugin, pero desbloquean funciones específicas cuando están presentes: WorldGuard/WorldEdit/GriefPrevention alimentan tanto los predicados Lua conscientes de la protección como la comprobación de colocación de props con reconocimiento de jugador, Vault habilita la tienda de muebles, y floodgate/Geyser-Spigot habilitan el backend de renderizado de Bedrock.

Cuándo Cambiar Estos Valores

Usa esta configuración para ajustar el comportamiento en runtime, no para gestionar paquetes de contenido.

  • Usa /fmm setup, /fmm downloadall y /fmm updatecontent para el ciclo de vida de paquetes oficiales
  • Usa la carpeta imports para trabajo de importación manual de .bbmodel u otro contenido local
  • Usa config.yml cuando necesites ajustar el modo de render, la distancia de visibilidad, la distancia de interacción, el comportamiento Bedrock, la aplicación de la protección de regiones o las descargas automáticas de actualizaciones
  • Usa skipUnchangedBoneUpdates, useDeltaMetadataPackets y maxModelsForProximityOverride para ajustar paquetes/ancho de banda en mundos densos en modelos. Los tres tienen por defecto el comportamiento optimizado; los ajustes false / muy altos existen para depuración y comparación A/B, no como valores recomendados en producción
  • Usa shop_config.yml (y los campos shopEnabled/shopPrice por receta) para ajustar la tienda de muebles sin tocar código

Advertencias Conocidas

  • El comportamiento Bedrock depende tanto de sendCustomModelsToBedrockClientsV2 como de tu configuración más amplia de Floodgate/Geyser/resource-pack, así que mantén tus afirmaciones conservadoras a menos que hayas probado tu stack exacto.
  • La tienda se deshabilita silenciosamente si falta Vault o un proveedor de economía. Usa /fmm version y revisa la consola al iniciar si /fmm shop falta inesperadamente.