ModsJava
NuvikShop
Minecraft Java mod. Downloads from the MC Java Mods app on Android.
⬇ Download on SpigotNuvikShop
Tu propia tienda tipo Tebex - 100% Configurable y Open Source
✓ Sin comisiones | ✓ Control total | ✓ Código abierto
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
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
Spoiler: 1️⃣ Backend (Flask/Python)
El backend se encarga de:
Endpoints importantes:
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:
PRODUCTS = {
'vip': {
'price_id': 'price_xxxxx' , # ID de Stripe
'mode': 'payment' , # payment o subscription
} ,
'mvp': {
'price_id': 'price_yyyyy' ,
'mode': 'payment' ,
} ,
}
- 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
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
Code (Python):
PRODUCTS = {
'vip': {
'price_id': 'price_xxxxx' , # ID de Stripe
'mode': 'payment' , # payment o subscription
} ,
'mvp': {
'price_id': 'price_yyyyy' ,
'mode': 'payment' ,
} ,
}
Spoiler: 2️⃣ Plugin de Minecraft
El plugin se conecta al backend cada X segundos para:
# 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:
[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
- Verificar si hay comandos pendientes
- Ejecutar los comandos en la consola
- Confirmar la ejecución al backend
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
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
Spoiler: 3️⃣ Base de Datos (Supabase)
Usamos Supabase (PostgreSQL gratuito) para guardar:
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
);
- products - Catálogo de productos
- tickets - Historial de compras
- admin_users - Usuarios del panel admin
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
);
Spoiler: 4️⃣ Pasarela de Pagos (Stripe)
Instalación Paso a Paso
Stripe procesa los pagos reales. Necesitas:
- Cuenta de Stripe (gratis crear)
- Crear productos en el Dashboard de Stripe
- Copiar los price_id al backend
- ~2.9% + $0.30 por transacción (varía por país)
- Sin mensualidades
- Sin contratos
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
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
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
Spoiler: Añadir nuevos productos
1. Crea el producto en Stripe Dashboard
2. Copia el price_id
3. Añádelo a PRODUCTS en config.py:
'mi-producto': {
'price_id': 'price_xxx' ,
'mode': 'payment' ,
} ,
4. Añade el comando en
config.py:
'command': 'give {username} diamond 64' ,
2. Copia el price_id
3. Añádelo a PRODUCTS en config.py:
Code (Python):
'mi-producto': {
'price_id': 'price_xxx' ,
'mode': 'payment' ,
} ,
Code (Python):
'command': 'give {username} diamond 64' ,
Spoiler: Cambiar intervalo de polling
En
plugins/NuvikShop/config.yml:
# 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
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
Spoiler: Cambiar clave de seguridad
API Reference
1. En
.env:
PLUGIN_SECRET_KEY = 'mi-nueva-clave-super-secreta'
2. En
config.yml del plugin:
secret-key : "mi-nueva-clave-super-secreta"
Code (Python):
PLUGIN_SECRET_KEY = 'mi-nueva-clave-super-secreta'
Code (YAML):
secret-key : "mi-nueva-clave-super-secreta"
Spoiler: GET /api/plugin/pending
Descripción: Obtiene comandos pendientes de ejecución
Headers:
X-Plugin-Secret: tu-clave-secreta
Respuesta exitosa (200):
{
"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):
{
"error": "Unauthorized"
}
Headers:
Code (Text):
X-Plugin-Secret: tu-clave-secreta
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"
}
]
}
Code (json (Unknown Language)):
{
"error": "Unauthorized"
}
Spoiler: POST /api/plugin/confirm
❓ FAQ
Descripción: Confirma que un comando fue ejecutado exitosamente
Headers:
X-Plugin-Secret: tu-clave-secreta
Content-Type: application/json
Body:
{
"command_id": "abc123"
}
Respuesta exitosa (200):
{
"success": true
}
Headers:
Code (Text):
X-Plugin-Secret: tu-clave-secreta
Content-Type: application/json
Code (json (Unknown Language)):
{
"command_id": "abc123"
}
Code (json (Unknown Language)):
{
"success": true
}
Spoiler: ¿Qué pasa si el servidor está offline cuando alguien compra?
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.
Spoiler: ¿Puedo usar esto con BungeeCord/Velocity?
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.
Spoiler: ¿Soporta suscripciones mensuales?
Sí, Stripe soporta suscripciones. Solo cambia
mode: 'payment' por
mode: 'subscription' en el producto.
Spoiler: ¿Cómo manejo reembolsos?
Soporte
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.
- Discord: discord.gg/EqngKZtzDG
- GitHub: github.com/Nuvik
- Issues: Reporta bugs en GitHub Issues
Hecho con ❤️ por el equipo de Llamagedon
⭐ Si te gusta el proyecto, déjanos una estrella en GitHub ⭐
Quick facts
- Edition: Minecraft Java
- File type: .jar
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
NuvikShop is a free Minecraft Java mod. Downloaded 16 times (via Spigot). Download it and open it directly in the game.