Sueta

NuvikShop Keys

1.9.0

⚡ Fast Shop Keys | SellAuth Auto-Sync | Instant Delivery | Multi-Database | Discord

·Plugin

⚡ NUVIKSHOP KEYS v1.9.0 ⚡
Sistema Profesional de Keys para Minecraft

Genera • Vende • ⚡ Entrega Instantánea

DESCRIPCIÓN

NuvikShop Keys es el plugin definitivo para gestionar keys de productos en tu servidor de Minecraft. Integración completa con tiendas online, entrega instantánea, múltiples bases de datos y seguridad de nivel empresarial.

✨ Perfecto para:

  • Servidores con tienda online
  • Venta de rangos VIP/MVP
  • Venta de coins y kits
  • Permisos y comandos personalizados
  • Automatización completa de ventas

✨ CARACTERÍSTICAS PRINCIPALES

Sistema de Keys

  • Generación masiva - Genera hasta 100 keys por comando
  • Formato personalizable - NUVIK-XXXXX-XXXXX o el que quieras
  • Expiración configurable - Por producto, días específicos o sin expiración
  • Múltiples usos - Keys de un solo uso o reutilizables
  • Anti-duplicación - Sistema automático para evitar keys duplicadas
  • Batch inserts - 10-50x más rápido que otros plugins

Integración con Tiendas

  • SellAuth - API completa + Webhooks + Auto-sync ⭐ RECOMENDADO
  • Shoppy.gg - Webhooks + Mapeo de productos
  • SellHub.cs - Webhooks + Soporte completo NUEVO
  • Tebex - Compatible con webhooks genéricos
  • Genérico - Cualquier tienda con webhooks

⚡ Entrega Instantánea (v1.8.0+)

  • Entrega automática cuando el jugador entra al servidor
  • Sin necesidad de /redeem - El producto se entrega automáticamente
  • Compatible con plugins de auth: AuthMe, nLogin, OpeNLogin, LoginSecurity
  • Firmas SHA-256 para máxima seguridad
  • Sistema de cola para entregas pendientes si el jugador está offline

⚠️ IMPORTANTE: La entrega instantánea SOLO funciona con webhooks, no con keys manuales.

Tiendas compatibles:

  • ✅ SellAuth - Requiere configurar webhook + nombre de jugador en custom fields
  • ✅ Shoppy.gg - Requiere configurar webhook + campo de username
  • ✅ SellHub.cs - Requiere configurar webhook + campo de player_name
  • ✅ Genérico - Requiere enviar player_name en el JSON del webhook
  • ❌ Keys manuales - NO soportado (el jugador debe usar /redeem)

️ Bases de Datos

  • SQLite - Local, sin configuración (por defecto)
  • MySQL - Remoto con HikariCP
  • H2 - Embebido ultra-rápido
  • Supabase - PostgreSQL en la nube
  • Migración automática entre bases de datos

Seguridad Empresarial

  • Rate limiting - 1 request/segundo por IP NUEVO
  • Secretos obligatorios en webhooks NUEVO
  • Protección SQL injection NUEVO
  • Constant-time comparison contra timing attacks NUEVO
  • Firmas criptográficas SHA-256
  • Logs de seguridad detallados

⌨️ COMANDOS

Para Jugadores:

/redeem <key>                    Canjear una key

Para Administradores:

/keygen <tipo> [cantidad]        Generar keys
/keygen all [cantidad]           Generar keys de todos los tipos
/keygen <tipo> <cantidad> sync   Generar y subir a SellAuth
/gift <jugador> <tipo>           Regalar producto directamente
/keylist [página]                Ver todas las keys
/keyinfo <key>                   Ver información de una key
/keydelete <key>                 Eliminar una key
/nuvikimport <file> <tipo>       Importar keys desde TXT

/nsk setup                       Asistente de configuración
/nsk reload                      Recargar configuración
/nsk stats                       Ver estadísticas
/nsk sync test                   Probar conexión SellAuth
/nsk sync products               Crear productos en SellAuth
/nsk sync keys <tipo>            Subir keys a SellAuth
/nsk sync all                    Sincronizar todo
/nsk migrate <db> <filtro>       Migrar base de datos
/nsk test-webhook                Probar Discord webhook

PERMISOS

nuvikshop.redeem     Permite canjear keys (default: true)
nuvikshop.admin      Acceso a comandos admin (default: op)
nuvikshop.*          Acceso completo (default: op)

INSTALACIÓN RÁPIDA

Paso 1: Instalación Básica

  1. Descarga NuvikShopKeys.jar
  2. Colócalo en plugins/
  3. Reinicia el servidor
  4. Ejecuta /nsk setup
  5. ¡Listo!

Paso 2: Configurar tu Tienda

Opción 1: SellAuth (Recomendado) ⭐

¿Por qué SellAuth?

  • API completa para automatización
  • Webhooks en tiempo real
  • Panel profesional
  • Múltiples métodos de pago

Configuración:

  1. Ve a https://sellauth.com y crea una cuenta
  2. Copia tu API Key y Shop ID
  3. En el servidor ejecuta: /nsk setup
  4. Sigue el asistente interactivo
  5. Ejecuta: /nsk sync products
  6. Genera keys: /keygen vip 100 sync

¡Automático! Las keys se suben a SellAuth automáticamente.

Opción 2: Shoppy.gg

Configuración:

  1. Panel de Shoppy → Settings → Webhooks
  2. URL: http://tu-ip:8080/webhook/shoppy
  3. Secret: Genera uno seguro (32 caracteres)
  4. Edita config.yml sección webhooks.shoppy
  5. Genera keys: /keygen vip 100
  6. Copia keys de plugins/NuvikShopKeys/generated-keys/
  7. Pega en tu producto de Shoppy
Opción 3: SellHub.cs

Configuración:

  1. Panel de SellHub → Webhooks
  2. URL: http://tu-ip:8080/webhook/sellhub
  3. Secret: Genera uno seguro (32 caracteres)
  4. Edita config.yml sección webhooks.sellhub
  5. Genera keys: /keygen vip 100
  6. Copia keys de plugins/NuvikShopKeys/generated-keys/
  7. Pega en tu producto de SellHub
Opción 4: Webhook Genérico

Compatible con cualquier tienda que soporte webhooks personalizados.

Endpoint: http://tu-ip:8080/webhook/generic

Formato JSON esperado:

{
  "product_id": "vip",
  "email": "[email protected]",
  "order_id": "12345",
  "player_name": "Steve"
}

EJEMPLO DE PRODUCTOS

predefined-commands:
  vip:
    command: "lp user %player% parent set vip"
    description: "Rango VIP"
    price: 9.99
    key-expiration-days: 0
    max-uses: 1

  vip-plus:
    command: "lp user %player% parent set vip-plus"
    description: "Rango VIP+"
    price: 14.99
    key-expiration-days: 0
    max-uses: 1

  coins-1000:
    command: "eco give %player% 1000"
    description: "1000 Coins"
    price: 0.99
    key-expiration-days: 30
    max-uses: 1

  fly:
    command: "lp user %player% permission set essentials.fly true"
    description: "Permiso de vuelo"
    price: 4.99
    key-expiration-days: 0
    max-uses: 1

Variables disponibles:

  • %player% - Nombre del jugador
  • %uuid% - UUID del jugador
  • %key% - Código de la key

FLUJO DE TRABAJO

Con SellAuth (Automático):

Opción A: Con Entrega Instantánea (Recomendado) ⚡

  1. /nsk setup → Configura SellAuth con API Key y Shop ID
  2. Habilita entrega instantánea en config.yml:
    instant-delivery:
         enabled: true
  3. /nsk sync products → Crea productos automáticamente
  4. En SellAuth, añade custom field "player_name" a tus productos
  5. Cliente compra → Ingresa su nombre de Minecraft en el campo player_name
  6. Jugador entra al servidor → ¡Recibe el VIP automáticamente sin hacer nada! ⚡

Opción B: Con Keys Tradicionales

  1. /nsk setup → Configura SellAuth con API Key y Shop ID
  2. /nsk sync products → Crea productos automáticamente
  3. /keygen vip 100 sync → Genera 100 keys VIP y las sube
  4. Cliente compra → Recibe la key por email
  5. Jugador: /redeem NUVIK-XXXXX → Recibe el VIP

Con Otras Tiendas (Shoppy, SellHub, etc.):

Opción A: Con Entrega Instantánea (Recomendado) ⚡

  1. Habilita entrega instantánea en config.yml:
    instant-delivery:
         enabled: true
  2. Configura webhook en tu tienda:
    URL: http://tu-ip:8080/webhook/shoppy (o /sellhub)
    Secret: Tu secreto seguro
  3. Añade campo "username" o "player_name" en tu producto
  4. Cliente compra → Ingresa su nombre de Minecraft
  5. Jugador entra al servidor → ¡Recibe el producto automáticamente! ⚡

Opción B: Con Keys Tradicionales

  1. /keygen vip 100 → Genera 100 keys VIP
  2. Copia keys de generated-keys/
  3. Pega en tu tienda (Shoppy, SellHub, etc)
  4. Configura webhook apuntando a tu servidor
  5. Cliente compra → Recibe key → /redeem → ¡Listo!

CARACTERÍSTICAS AVANZADAS

⚡ Entrega Instantánea - Cómo Funciona

¿Qué es la entrega instantánea?

En lugar de que el jugador tenga que usar /redeem <key>, el producto se entrega automáticamente cuando entra al servidor después de comprar.

Flujo de trabajo:

  1. Cliente compra en tu tienda (SellAuth, Shoppy, etc.)
  2. Tienda envía webhook a tu servidor con el nombre del jugador
  3. Plugin guarda la compra en la tabla pending_deliveries
  4. Jugador entra al servidor
  5. Si hay plugin de auth (AuthMe, etc.):
    - Plugin espera a que el jugador se autentique
    - Después de autenticarse, entrega el producto
  6. Si NO hay plugin de auth:
    - Espera 3 segundos (configurable)
    - Entrega el producto automáticamente
  7. Jugador recibe el producto sin hacer nada ✨

Configuración:

instant-delivery:
  enabled: true                    # Activar entrega instantánea
  delivery-delay-seconds: 3        # Delay si no hay plugin de auth
  auth-timeout-seconds: 60         # Timeout para autenticación
  secret-key: "auto-generado"      # Clave para firmas SHA-256
  cleanup-days: 30                 # Limpiar entregas antiguas

Plugins de autenticación soportados:

  • ✅ AuthMe
  • ✅ nLogin
  • ✅ OpeNLogin
  • ✅ LoginSecurity
  • ⚠️ Sin plugin de auth: Usa delay de 3 segundos

⚠️ REQUISITOS IMPORTANTES:

  1. Webhooks configurados - La entrega instantánea SOLO funciona con webhooks
  2. Nombre de jugador - La tienda debe enviar el nombre del jugador en el webhook
  3. Puerto abierto - El puerto 8080 (o el configurado) debe estar accesible desde internet

Configuración por tienda:

SellAuth:

# En tu producto de SellAuth, añade un custom field:
# Campo: player_name
# Tipo: text
# Requerido: Sí
# El cliente ingresará su nombre de Minecraft al comprar

Shoppy.gg:

# En tu producto de Shoppy, añade un campo personalizado:
# Nombre: username
# Tipo: text
# El cliente ingresará su nombre de Minecraft al comprar

SellHub.cs:

# En tu producto de SellHub, añade un campo:
# Campo: player_name
# Tipo: text
# El cliente ingresará su nombre de Minecraft al comprar

Webhook Genérico:

{
  "product_id": "vip",
  "email": "[email protected]",
  "order_id": "12345",
  "player_name": "Steve"  // ← REQUERIDO para entrega instantánea
}

¿Qué pasa si el jugador está offline?

  • La compra se guarda en pending_deliveries
  • Cuando el jugador entre al servidor, recibirá su producto automáticamente
  • Las entregas pendientes se guardan hasta que se completen
  • Se limpian automáticamente después de 30 días (configurable)

¿Qué pasa si no configuro el nombre de jugador?

  • La entrega instantánea NO funcionará
  • El sistema generará una key normal
  • El jugador deberá usar /redeem <key> manualmente
  • La key se enviará por email al cliente
Notificaciones Discord
discord:
  enabled: true
  webhook-url: "https://discord.com/api/webhooks/xxx/xxx"
  notifications:
    key-generated: true
    key-redeemed: true
    gift-sent: true
    suspicious-activity: true
    purchase: true
Seguridad
security:
  redeem-cooldown: 5
  max-failed-attempts: 5
  lockout-duration: 10
  log-attempts: true

Nuevas características de seguridad v1.9.0:

  • Rate limiting (1 req/seg por IP)
  • Secretos obligatorios en webhooks
  • Protección SQL injection
  • Constant-time token comparison
️ Migración de Base de Datos
/nsk migrate supabase all      Migrar todo a Supabase
/nsk migrate mysql ranks       Migrar solo rangos a MySQL
/nsk migrate sqlite economy    Migrar solo economy a SQLite

Filtros disponibles: all, ranks, kits, economy, perms, fly

⚠️ Se crea un backup automático antes de migrar.

RENDIMIENTO

  • Operaciones asíncronas - No bloquea el servidor
  • Batch inserts - 10-50x más rápido que la competencia
  • HikariCP - Connection pooling profesional
  • Bukkit Scheduler - Optimizado para hostings limitados
  • Memory cleanup - Sin memory leaks
  • Compatible con hostings de bajo costo

REQUISITOS

  • Minecraft: 1.17+
  • Java: 17+
  • Servidor: Spigot, Paper, Purpur
  • Opcional: LuckPerms, Vault, PlaceholderAPI

CHANGELOG v1.9.0

Añadido

  • SellHub.cs Integration - Soporte completo para webhooks
  • Rate Limiting - Protección contra abuso (1 req/seg por IP)
  • Security Hardening - Secretos obligatorios por defecto
  • SQL Injection Protection - Validación de nombres de tabla
  • Constant-Time Comparison - Prevención de timing attacks
  • Configurable Key Limit - Límite máximo configurable
  • Automatic Cleanup - Limpieza programada cada 24h
  • Enhanced Logging - Logs de seguridad detallados

Mejorado

  • Seguridad en webhooks (secretos obligatorios)
  • Mensajes de error más descriptivos
  • Validación de configuración mejorada
  • Limpieza automática de rate limits
  • Calidad de código y mantenibilidad

Seguridad

  • CRÍTICO: Secretos de webhook obligatorios
  • ALTO: Comparación constant-time
  • ALTO: Validación contra SQL injection
  • MEDIO: Rate limiting en webhooks
  • MEDIO: Logs de actividad sospechosa

SOPORTE

⭐ VALORACIONES

Similar projects

Plugin →