Tienda de muebles de FreeMinecraftModels
Para una economía de solo compras, establece registerCraftingRecipes: false en config.yml y reinicia. Las entradas válidas y habilitadas permanecen en el catálogo de la tienda, pero se eliminan de la fabricación de Bukkit y del menú de objetos fabricables /fmm de los jugadores. La opción vale true por defecto.
FreeMinecraftModels incluye una tienda opcional respaldada por Vault que permite a los jugadores comprar props fabricables con moneda del juego. La tienda está deshabilitada por defecto — solo se registra a sí misma cuando se habilita explícitamente y hay un proveedor de economía Vault disponible.
Configuración rápida
- Instala Vault y un proveedor de economía compatible con Vault (EssentialsX, CMI, etc.).
- Inicia el servidor una vez para que se genere
plugins/FreeMinecraftModels/shop_config.yml. - Establece
enabled: trueenshop_config.yml. - Reinicia el servidor o completa correctamente
/fmm reload; la tienda se registra durante la inicialización completa. - Ejecuta
/fmm shopen el juego para confirmar que el menú se abre.
Si falta algún requisito, el subcomando de la tienda no se registra, por lo que su controlador no utiliza el mensaje configurable de tienda deshabilitada. Si la tienda está habilitada pero falta Vault o su proveedor de economía, FMM registra una advertencia específica.
Cómo funciona
- La tienda lee las recetas de
plugins/FreeMinecraftModels/recipes/. - La tienda muestra las recetas cargadas con
isEnabled: trueyshopEnabled: true. Las recetas se cargan como un único catálogo: un error de sintaxis YAML, dos archivos de receta habilitados para el mismomodel_ido una receta que el servidor rechace hacen fallar todo el catálogo en lugar de descartar una sola entrada, así que revisa la consola después de/fmm reload. El registro sigue construyendo y validando la receta cuando la fabricación está deshabilitada - Cada entrada usa un objeto de papel con la apariencia del modelo cuando está disponible, una línea de precio, una indicación de compra y el ID del modelo. Las compras entregan el objeto de papel para colocar el modelo; esta vía no crea un arma definida por su
material:y encantamientos - Hacer clic en una entrada llama a
PurchaseHandler, que comprueba el saldo del jugador a través de Vault, retira el precio y le entrega al jugador el objeto de colocación. Los objetos que no caben en el inventario se sueltan a los pies del jugador.
Permisos
| Permiso | Predeterminado | Descripción |
|---|---|---|
freeminecraftmodels.shop | true | Requerido para abrir la tienda. El predeterminado es true para que todo jugador pueda explorar |
El permiso por sí solo no habilita la tienda — enabled: true en shop_config.yml y un proveedor de economía en funcionamiento siguen siendo necesarios.
shop_config.yml
Consulta la página de Configuración para la referencia completa de claves. Las claves principales son:
enabled— interruptor maestro (predeterminadofalse)defaultPrice— valor para recetas sinshopPrice; un valor no positivo usa100.0. Cambiarlo no sustituye los precios ya guardados en cada recetamenuTitle,priceLoreFormat,clickToBuyLoreFormat— estilo visualmessages.*— cinco mensajes de respuesta personalizables
Todos los textos de los mensajes admiten códigos de color & y los marcadores de posición indicados en la referencia de configuración.
Campos por receta
Cada receta en plugins/FreeMinecraftModels/recipes/<model_id>.yml lleva dos campos específicos de tienda:
isEnabled: true
model_id: "wooden_chair"
shape:
- "L L"
- "LLL"
- "L L"
ingredients:
L: OAK_LOG
shopEnabled: true
shopPrice: 250.0
| Campo | Predeterminado | Comportamiento |
|---|---|---|
shopEnabled | true | Con false, la receta se oculta en las compras. La fabricación sigue dependiendo de la activación de la receta y de registerCraftingRecipes |
shopPrice | defaultPrice de shop_config.yml | Coste en moneda Vault cuando el jugador hace clic en el objeto |
El constructor /fmm craftify escribe ambos campos al guardar, así que ajustar el precio es solo una edición de texto en el archivo de receta seguida de /fmm reload.
Resultados de compra
El PurchaseHandler reconoce siete resultados. Los cinco primeros se asocian a mensajes configurables en shop_config.yml; los dos mensajes de fallo de entrega son fijos:
| Resultado | Se desencadena cuando | Clave de mensaje |
|---|---|---|
SUCCESS | La retirada tuvo éxito y el objeto cupo en el inventario | messages.purchaseSuccess |
SUCCESS_WITH_OVERFLOW | La retirada tuvo éxito pero el objeto tuvo que soltarse a los pies del jugador | messages.purchaseSuccess + messages.inventoryFull |
INSUFFICIENT_FUNDS | Saldo del jugador por debajo del precio, o el proveedor de economía subyacente rechazó la retirada | messages.insufficientFunds |
NOT_FOR_SALE | La receta está deshabilitada, tiene shopEnabled: false o su modelo no está cargado | messages.itemNotForSale |
SHOP_DISABLED | La configuración de la tienda o la conexión Vault almacenada indica que está deshabilitada | messages.shopDisabled |
DELIVERY_FAILED_REFUNDED | La retirada tuvo éxito, la entrega falló y se reembolsó la cantidad no entregada | Fijo: The item could not be delivered. The undelivered amount was refunded. |
DELIVERY_FAILED_REFUND_PENDING | La retirada tuvo éxito, la entrega falló y el reembolso falló o no se pudo leer la cantidad entregada | Fijo: The purchase could not be settled. The shop has been disabled; contact an administrator to review your payment. |
Usa valores finitos y no negativos para shopPrice. El controlador de compras no los valida antes de llamar a Vault. Una respuesta de retirada rechazada devuelve INSUFFICIENT_FUNDS, pero aquí no se capturan las excepciones del proveedor durante la retirada. La conexión guarda el proveedor durante la inicialización y no detecta continuamente su desaparición.
Si la entrega lanza una excepción después de la retirada, FMM cuenta qué parte de la compra llegó al inventario o al suelo y devuelve el precio del resto. Cuando ese reembolso falla, o no se puede leer la cantidad entregada, FMM deshabilita la tienda y registra [FMM Shop] Disabled after unresolved purchase con el UUID del jugador y la cantidad que hay que revisar. La tienda sigue deshabilitada hasta que regularices el pago y ejecutes /fmm reload.
Solución de problemas
/fmm shop no existe.
La tienda no está registrada. Verifica los tres:
- Vault está instalado
- Hay un proveedor de economía registrado (ejecuta
/balanceo/ecopara confirmar que uno responde) enabled: trueenshop_config.yml
Después reinicia el servidor o completa /fmm reload. Una recarga solo de contenido iniciada por el importador no reinicializa la configuración de la tienda ni registra su comando.
Faltan objetos que espero ver en el menú.
Abre el archivo de receta en plugins/FreeMinecraftModels/recipes/. Comprueba que tanto isEnabled como shopEnabled son true. Ejecuta /fmm reload tras editar.
A los jugadores se les cobra pero no reciben el objeto.
Busca el objeto sobrante a los pies del jugador y revisa la consola alrededor del clic. Una respuesta de retirada rechazada devuelve INSUFFICIENT_FUNDS; una excepción del proveedor durante la retirada no se convierte en ese resultado. Una entrega fallida registra [FMM Shop] Item delivery failed con la cantidad entregada y el reembolso. Si la consola muestra [FMM Shop] Disabled after unresolved purchase, el reembolso no se completó: regulariza ese pago a mano, conserva el registro de consola y la prueba de la transacción del proveedor, y después ejecuta /fmm reload para volver a habilitar la tienda.