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
✓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. │
│ │
└─────────────────────────────────────────────────────────────────┘
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):
CREATETABLE tickets
( id TEXT
PRIMARYKEY, username TEXT
NOTNULL, productId TEXT
, product JSONB
, STATUS TEXT
DEFAULT'pending', paymentMethod TEXT
, stripeSessionId TEXT
, createdAt TIMESTAMPTZ
DEFAULT NOW
(), updatedAt TIMESTAMPTZ
, coupon TEXT
, discount
NUMERICDEFAULT0, 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
Paso 2: Configurar Stripe 1. Crea cuenta en
stripe.com 2. Ve a
Products →
Add 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:
# 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:
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.