Saltar al contenido principal

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​

  1. Instala Vault y un proveedor de economía compatible con Vault (EssentialsX, CMI, etc.).
  2. Inicia el servidor una vez para que se genere plugins/FreeMinecraftModels/shop_config.yml.
  3. Establece enabled: true en shop_config.yml.
  4. Reinicia el servidor o completa correctamente /fmm reload; la tienda se registra durante la inicialización completa.
  5. Ejecuta /fmm shop en 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: true y shopEnabled: true. Las recetas se cargan como un único catálogo: un error de sintaxis YAML, dos archivos de receta habilitados para el mismo model_id o 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​

PermisoPredeterminadoDescripción
freeminecraftmodels.shoptrueRequerido 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 (predeterminado false)
  • defaultPrice — valor para recetas sin shopPrice; un valor no positivo usa 100.0. Cambiarlo no sustituye los precios ya guardados en cada receta
  • menuTitle, priceLoreFormat, clickToBuyLoreFormat — estilo visual
  • messages.* — 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
CampoPredeterminadoComportamiento
shopEnabledtrueCon false, la receta se oculta en las compras. La fabricación sigue dependiendo de la activación de la receta y de registerCraftingRecipes
shopPricedefaultPrice de shop_config.ymlCoste 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:

ResultadoSe desencadena cuandoClave de mensaje
SUCCESSLa retirada tuvo éxito y el objeto cupo en el inventariomessages.purchaseSuccess
SUCCESS_WITH_OVERFLOWLa retirada tuvo éxito pero el objeto tuvo que soltarse a los pies del jugadormessages.purchaseSuccess + messages.inventoryFull
INSUFFICIENT_FUNDSSaldo del jugador por debajo del precio, o el proveedor de economía subyacente rechazó la retiradamessages.insufficientFunds
NOT_FOR_SALELa receta está deshabilitada, tiene shopEnabled: false o su modelo no está cargadomessages.itemNotForSale
SHOP_DISABLEDLa configuración de la tienda o la conexión Vault almacenada indica que está deshabilitadamessages.shopDisabled
DELIVERY_FAILED_REFUNDEDLa retirada tuvo éxito, la entrega falló y se reembolsó la cantidad no entregadaFijo: The item could not be delivered. The undelivered amount was refunded.
DELIVERY_FAILED_REFUND_PENDINGLa retirada tuvo éxito, la entrega falló y el reembolso falló o no se pudo leer la cantidad entregadaFijo: 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 /balance o /eco para confirmar que uno responde)
  • enabled: true en shop_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.