NuvikShop icon

NuvikShop -----

The next great shop plugin for Spigot




[​IMG]
NuvikShop
Tu propia tienda tipo Tebex - 100% Configurable y Open Source
✓ Sin comisiones | ✓ Control total | ✓ Código abierto
¿Qué es NuvikShop?
NuvikShop es una alternativa gratuita y open-source a Tebex/BuyCraft que te permite tener tu propia tienda web para vender rangos, items, comandos y cualquier cosa en tu servidor de Minecraft.
Ventajas sobre Tebex:
  • 0% comisiones - Tú te quedas con el 100% (solo pagas las comisiones de Stripe ~2.9%)
  • Control total - El código es tuyo, modifícalo como quieras
  • Sin límites - Productos ilimitados, categorías ilimitadas
  • Personalizable - Ajusta completamente la web a tu estilo
  • Panel de administración - Gestiona productos, tickets y estadísticas
  • Múltiples monedas - USD, EUR, MXN, o cualquier moneda que soporte Stripe
⚙️ Arquitectura del Sistema
Code (Text):

┌─────────────────────────────────────────────────────────────────┐
│                    FLUJO DE UNA COMPRA                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   [JUGADOR]                                                     │
│       │                                                         │
│       ▼                                                         │
│   ┌─────────────┐     ┌───────────┐     ┌─────────────┐        │
│   │   WEB       │────▶│  STRIPE   │────▶│   FLASK     │        │
│   │  (Tienda)   │     │ (Pagos)   │     │ (Backend)   │        │
│   └─────────────┘     └───────────┘     └──────┬──────┘        │
│                                                 │               │
│                                                 ▼               │
│   ┌─────────────┐     ┌───────────┐     ┌─────────────┐        │
│   │  MINECRAFT  │◀────│  PLUGIN   │◀────│    COLA     │        │
│   │  (Servidor) │     │ (Pagos)   │     │ (Comandos)  │        │
│   └─────────────┘     └───────────┘     └─────────────┘        │
│                                                                 │
│   El plugin consulta la API cada X segundos buscando           │
│   comandos pendientes y los ejecuta automáticamente.           │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
 
Captura de pantalla 2025-12-29 220250.png
Componentes del Sistema
El backend se encarga de:
  • Servir la página web de la tienda
  • Procesar pagos con Stripe
  • Guardar tickets en la base de datos (Supabase)
  • Mantener una cola de comandos pendientes
  • Proveer API para que el plugin consulte
Archivo principal: app.py
Endpoints importantes:
Code (Text):

POST /api/create-checkout-session   → Crea sesión de pago en Stripe
GET  /api/plugin/pending            → Devuelve comandos pendientes (para el plugin)
POST /api/plugin/confirm            → Confirma que un comando fue ejecutado
GET  /success                       → Página de éxito después del pago
GET  /cancel                        → Página de pago cancelado
 
Configuración de productos:
Code (Python):

PRODUCTS = {
    'vip': {
        'price_id': 'price_xxxxx' ,   # ID de Stripe
        'mode': 'payment' ,           # payment o subscription
    } ,
    'mvp': {
        'price_id': 'price_yyyyy' ,
        'mode': 'payment' ,
    } ,
}
 
El plugin se conecta al backend cada X segundos para:
  • Verificar si hay comandos pendientes
  • Ejecutar los comandos en la consola
  • Confirmar la ejecución al backend
Configuración (config.yml):
Code (YAML):

# URL de tu servidor web
api-url
: "https://tu-dominio.com"
# Clave secreta (debe coincidir con el backend)
secret-key
: "tu-clave-secreta-aqui"
# Cada cuántos segundos verificar compras
check-interval-seconds
: 10
# Mostrar logs de debug
debug
: false
 
Mensajes en consola:
Code (Text):

[NuvikShop] ✓ Conexión exitosa con el servidor web!
[NuvikShop] ╔═══════════════════════════════════════╗
[NuvikShop] ║  NUEVA COMPRA DETECTADA!           ║
[NuvikShop] ║  Usuario: Steve
[NuvikShop] ║  Producto: vip
[NuvikShop] ║  Comando: lp user xxx parent set vip
[NuvikShop] ╚═══════════════════════════════════════╝
[NuvikShop] ✓ Comando ejecutado para Steve
 
Usamos Supabase (PostgreSQL gratuito) para guardar:
  • products - Catálogo de productos
  • tickets - Historial de compras
  • admin_users - Usuarios del panel admin
Esquema de tickets:
Code (SQL):

CREATE TABLE tickets (
    id TEXT PRIMARY KEY ,
    username TEXT NOT NULL ,
    productId TEXT ,
    product JSONB ,
    STATUS TEXT DEFAULT 'pending' ,
    paymentMethod TEXT ,
    stripeSessionId TEXT ,
    createdAt TIMESTAMPTZ DEFAULT NOW ( ) ,
    updatedAt TIMESTAMPTZ ,
    coupon TEXT ,
    discount NUMERIC DEFAULT 0 ,
    total NUMERIC
);
 
Stripe procesa los pagos reales. Necesitas:
  • Cuenta de Stripe (gratis crear)
  • Crear productos en el Dashboard de Stripe
  • Copiar los price_id al backend
Comisiones de Stripe:
  • ~2.9% + $0.30 por transacción (varía por país)
  • Sin mensualidades
  • Sin contratos
Monedas soportadas: USD, EUR, MXN, GBP, y 135+ más
Instalación Paso a Paso
Paso 1: Configurar Backend
Code (Bash):

# Clonar repositorio
git clone https: //github.com /ReyesAlejandro-Dev /NuvikShop
# Instalar dependencias
pip install -r requirements.txt
# Configurar variables en app.py
# - STRIPE_SECRET_KEY
# - SUPABASE_URL
# - SUPABASE_KEY
# - PLUGIN_SECRET_KEY
# Ejecutar
python app.py
 
Captura de pantalla 2025-12-29 220303.png
Paso 2: Configurar Stripe
1. Crea cuenta en stripe.com
2. Ve a ProductsAdd Product
3. Por cada producto, copia el price_id
4. Pégalos en el diccionario PRODUCTS de config.py
Paso 3: Configurar Supabase
1. Crea proyecto en supabase.com
2. Usa el esquema SQL proporcionado en db/schema.sql
3. Copia URL y API Key a .env
Paso 4: Instalar Plugin
1. Compila el plugin:
Code (Bash):

cd nuvikshop /plugin
mvn clean package
 
2. Copia target/NuvikShop-1.0.0.jar a plugins/
3. Configura plugins/NuvikShop/config.yml
4. Reinicia el servidor
Paso 5: Crear Grupos en LuckPerms
Code (Text):

/lp creategroup iron
/lp creategroup gold
/lp creategroup vip
/lp creategroup mvp
/lp creategroup legend
/lp creategroup llamatop
# Configurar herencia
/lp group gold parent set iron
/lp group vip parent set gold
/lp group mvp parent set vip
/lp group legend parent set mvp
/lp group llamatop parent set legend
 
Personalización
1. Crea el producto en Stripe Dashboard
2. Copia el price_id
3. Añádelo a PRODUCTS en config.py:
Code (Python):

'mi-producto': {
    'price_id': 'price_xxx' ,
    'mode': 'payment' ,
} ,
 
4. Añade el comando en config.py:
Code (Python):

'command': 'give {username} diamond 64' ,
 
En plugins/NuvikShop/config.yml:
Code (YAML):

# Verificar cada 5 segundos (más rápido pero más carga)
check-interval-seconds
: 5
# Verificar cada 30 segundos (menos carga pero más lento)
check-interval-seconds
: 30
 
1. En .env:
Code (Python):

PLUGIN_SECRET_KEY = 'mi-nueva-clave-super-secreta'
 
2. En config.yml del plugin:
Code (YAML):

secret-key
: "mi-nueva-clave-super-secreta"
 
API Reference
Descripción: Obtiene comandos pendientes de ejecución
Headers:
Code (Text):

X-Plugin-Secret: tu-clave-secreta
 
Respuesta exitosa (200):
Code (json (Unknown Language)):

{
    "success": true,
    "commands": [
        {
            "id": "abc123",
            "username": "Steve",
            "player_id": "550e8400-e29b-41d4-a716-446655440000",
            "command": "lp user 550e8400-... parent set vip",
            "product_id": "vip",
            "created_at": "2024-01-15T10:30:00"
        }
    ]
}
 
Error de autenticación (401):
Code (json (Unknown Language)):

{
    "error": "Unauthorized"
}
 
Descripción: Confirma que un comando fue ejecutado exitosamente
Headers:
Code (Text):

X-Plugin-Secret: tu-clave-secreta
Content-Type: application/json
 
Body:
Code (json (Unknown Language)):

{
    "command_id": "abc123"
}
 
Respuesta exitosa (200):
Code (json (Unknown Language)):

{
    "success": true
}
 
❓ FAQ
Los comandos quedan en la cola del backend. Cuando el servidor vuelva a estar online y el plugin se conecte, ejecutará todos los comandos pendientes automáticamente.
Sí, solo instala el plugin en el servidor donde quieres que se ejecuten los comandos (generalmente el lobby o el servidor principal). Si necesitas ejecutar en múltiples servidores, puedes modificar el plugin para conectar con BungeeAPI.
Sí, Stripe soporta suscripciones. Solo cambia mode: 'payment' por mode: 'subscription' en el producto.
Los reembolsos se procesan desde el dashboard de Stripe. Puedes configurar un webhook para charge.refunded y ejecutar un comando de remoción automática.
Soporte

Hecho con ❤️ por el equipo de Llamagedon
⭐ Si te gusta el proyecto, déjanos una estrella en GitHub ⭐

Resource Information
Author:
----------
Total Downloads: 4
First Release: Today at 3:59 AM
Last Update: Today at 3:59 AM
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings