El engine expone una API REST en http://localhost:7878 (el puerto es configurable). Todos los endpoints devuelven JSON. Los errores siempre incluyen un campo error con la descripción.
Información general de la API y lista de endpoints disponibles.
curl http://localhost:7878/apiRespuesta:
{
"name": "novacore-engine",
"vendor": "NovaStepStudios",
"version": "1.0.0",
"java": "21.0.3",
"os": "Linux",
"endpoints": {
"install": "POST /install",
"launch": "POST /launch",
"launch_kill": "POST /launch/kill/:id",
"launch_status": "GET /launch/status/:id",
"progress": "GET /progress?sessionId=...",
"sessions": "GET /progress",
"versions": "GET /versions",
"runtime": "POST /runtime/download",
"instances": "GET|POST /instances",
"system": "GET /system/resources",
"modloaders": "GET /modloaders",
"close": "POST /close",
"debug": {
"client": "GET /debug/download/client",
"libraries": "GET /debug/download/libraries",
"assets": "GET /debug/download/assets",
"natives": "GET /debug/download/natives"
}
}
}Detecta los recursos del sistema y da recomendaciones de configuración para Minecraft.
curl http://localhost:7878/system/resourcesRespuesta:
{
"cpu": {
"cores": 8,
"optimalDlThreads": 16
},
"ram": {
"totalMb": 16384,
"estimatedFreeMb": 10240,
"reservedForOsMb": 2048
},
"recommended": {
"downloadThreads": 16,
"mcMinRamMb": 512,
"mcMaxRamMb": 4096,
"gcPreset": "g1gc_optimized"
}
}Lista las versiones de Minecraft disponibles desde el manifest de Mojang.
# Todas las versiones
curl http://localhost:7878/versions
# Solo releases
curl "http://localhost:7878/versions?type=release"
# Solo snapshots
curl "http://localhost:7878/versions?type=snapshot"Parámetros de query:
| Parámetro | Valores | Descripción |
|---|---|---|
type |
release, snapshot, old_alpha, old_beta |
Filtrar por tipo |
Respuesta:
{
"latest": {
"release": "1.21.1",
"snapshot": "24w14a"
},
"count": 50,
"filter": "release",
"versions": [
{
"id": "1.21.1",
"type": "release",
"releaseTime": "2024-08-08T12:00:00+00:00",
"url": "https://..."
}
]
}Inicia la instalación de una versión de Minecraft. Devuelve un sessionId inmediatamente y procede en segundo plano. El progreso se puede seguir por WebSocket o polling en /progress.
curl -X POST http://localhost:7878/install \
-H "Content-Type: application/json" \
-d '{
"version": "1.21.1",
"instancePath": "/home/user/.launcher/instances/mi-instancia",
"sharedPath": "/home/user/.launcher/shared",
"download": {
"client": true,
"libraries": true,
"assets": true,
"natives": true,
"jvm": false
},
"verifySHA1": true,
"maxThreads": 0
}'Body:
| Campo | Tipo | Default | Descripción |
|---|---|---|---|
version |
string |
— | ID de la versión a instalar (ej: "1.21.1") |
instancePath |
string |
— | Ruta al directorio de la instancia |
sharedPath |
string | null |
null |
Ruta compartida para libs/assets entre instancias |
download.client |
boolean |
true |
Descargar el client.jar |
download.libraries |
boolean |
true |
Descargar librerías |
download.assets |
boolean |
true |
Descargar assets (sonidos, texturas) |
download.natives |
boolean |
true |
Descargar nativos de la plataforma |
download.jvm |
boolean |
false |
Descargar el JVM de Mojang para esta versión |
verifySHA1 |
boolean |
true |
Verificar integridad de archivos existentes |
maxThreads |
number |
0 |
Threads de descarga. 0 = auto según CPU |
debug |
boolean |
false |
Emitir eventos de debug detallados |
Respuesta:
{
"sessionId": "session-1710000000000-1",
"version": "1.21.1",
"instancePath": "/home/user/.launcher/instances/mi-instancia",
"status": "started",
"progress": "GET /progress?sessionId=session-1710000000000-1",
"websocket": "ws://localhost:7879"
}Consulta el estado de una sesión de descarga.
# Una sesión específica
curl "http://localhost:7878/progress?sessionId=session-1710000000000-1"
# Todas las sesiones activas
curl http://localhost:7878/progressRespuesta (sesión específica):
{
"sessionId": "session-1710000000000-1",
"status": "completed",
"createdAt": 1710000000000,
"totalFiles": 312,
"completedFiles": 287,
"skippedFiles": 25,
"failedFiles": 0,
"pendingFiles": 0,
"totalBytes": 215000000,
"downloadedBytes": 215000000,
"overallPercent": 100
}Respuesta (todas las sesiones):
{
"count": 2,
"sessions": [ ... ]
}Lanza Minecraft. Devuelve un launchId inmediatamente y el proceso corre en background. Los logs del juego llegan por WebSocket como eventos game_log.
curl -X POST http://localhost:7878/launch \
-H "Content-Type: application/json" \
-d '{
"version": "1.21.1",
"instancePath": "/home/user/.launcher/instances/mi-instancia",
"auth": {
"username": "MiUsuario",
"uuid": "uuid-del-jugador",
"accessToken": "token-de-microsoft",
"userType": "msa"
},
"jvm": {
"minMemoryMb": 512,
"maxMemoryMb": 4096
}
}'Body completo:
| Campo | Tipo | Default | Descripción |
|---|---|---|---|
version |
string |
— | Versión a lanzar |
instancePath |
string |
— | Ruta de la instancia |
sharedPath |
string | null |
null |
Shared path (si las libs están ahí) |
javaPath |
string | null |
null |
Ruta al ejecutable Java. null = usa el bundled de Mojang o el del sistema |
hardwareAcceleration |
boolean |
false |
Agrega args para aceleración de hardware |
gcPreset |
string |
"auto" |
Preset de GC: auto, g1gc_basic, g1gc_optimized, zgc, shenandoah |
gpuPreference |
string |
"auto" |
Preferencia de GPU: auto, dgpu, igpu |
auth.username |
string |
"Player" |
Nombre de usuario |
auth.uuid |
string |
generado | UUID del jugador |
auth.accessToken |
string |
"0" |
Token de acceso (MSA, o "0" para offline) |
auth.userType |
string |
"msa" |
Tipo: msa, legacy, offline |
jvm.minMemoryMb |
number |
0 |
RAM mínima (0 = auto) |
jvm.maxMemoryMb |
number |
0 |
RAM máxima (0 = auto) |
jvm.extraArgs |
string[] |
[] |
Args JVM adicionales |
window.width |
number |
— | Ancho de la ventana |
window.height |
number |
— | Alto de la ventana |
window.fullscreen |
boolean |
false |
Pantalla completa |
launcher.name |
string |
— | Nombre del launcher (para branding) |
launcher.version |
string |
— | Versión del launcher |
game.serverHost |
string |
— | Conectar directo a un servidor al arrancar |
game.serverPort |
number |
— | Puerto del servidor |
Respuesta:
{
"launchId": "launch-1710000000000-1",
"status": "launching",
"version": "1.21.1",
"username": "MiUsuario",
"instancePath": "/home/user/.launcher/instances/mi-instancia",
"authlibInjector": { "enabled": false },
"message": "Minecraft launching in background",
"kill": "POST /launch/kill/launch-1710000000000-1"
}Consulta si un proceso de Minecraft sigue corriendo.
curl http://localhost:7878/launch/status/launch-1710000000000-1Respuesta:
{
"launchId": "launch-1710000000000-1",
"running": true,
"status": "running"
}Termina un proceso de Minecraft en ejecución.
curl -X POST http://localhost:7878/launch/kill/launch-1710000000000-1Respuesta:
{
"launchId": "launch-1710000000000-1",
"status": "killed"
}Lista todas las instancias registradas.
curl http://localhost:7878/instancesRespuesta:
{
"count": 2,
"instances": [
{
"id": "uuid-de-la-instancia",
"name": "1.21.1-vanilla",
"mcVersion": "1.21.1",
"modLoader": "vanilla",
"minMemoryMb": 512,
"maxMemoryMb": 4096,
"gcPreset": "g1gc_optimized",
"createdAt": "2024-03-17T22:00:00Z",
"lastPlayedAt": null,
"totalPlayHours": "0h 0m",
"installed": true,
"path": "/home/user/.launcher/instances/1.21.1-vanilla"
}
]
}Crea una nueva instancia (y opcionalmente la instala de una).
curl -X POST http://localhost:7878/instances \
-H "Content-Type: application/json" \
-d '{
"name": "mi-instancia",
"mcVersion": "1.21.1",
"config": {
"modLoader": "vanilla",
"minMemoryMb": 512,
"maxMemoryMb": 4096,
"gcPreset": "g1gc_optimized"
},
"autoInstall": false
}'Si autoInstall es true, también podés pasar un campo install con las opciones de instalación (mismas que POST /install).
Obtiene los detalles de una instancia por ID o nombre.
curl http://localhost:7878/instances/mi-instancia
curl http://localhost:7878/instances/uuid-de-la-instanciaActualiza la configuración de una instancia.
curl -X PATCH http://localhost:7878/instances/mi-instancia \
-H "Content-Type: application/json" \
-d '{
"maxMemoryMb": 8192,
"gcPreset": "zgc"
}'Borra una instancia del registro (no borra los archivos del disco).
curl -X DELETE http://localhost:7878/instances/mi-instanciaDescarga el runtime de Java (JVM) de Mojang para una versión específica.
curl -X POST http://localhost:7878/runtime/download \
-H "Content-Type: application/json" \
-d '{
"version": "1.21.1",
"instancePath": "/home/user/.launcher/instances/mi-instancia",
"sharedPath": "/home/user/.launcher/shared"
}'Body:
| Campo | Tipo | Default | Descripción |
|---|---|---|---|
version |
string |
— | Versión a instalar |
instancePath |
string |
— | Ruta de la instancia (destino por defecto instancePath/runtime) |
sharedPath |
string | null |
null |
Ruta compartida opcional. Si se usa, el runtime se pondrá en sharedPath/java y se compartirá con otras instalaciones. |
Cerrará de manera elegante (Graceful Tree-Kill Shutdown) todas las instancias activas administradas por el Engine y luego cerrará el Engine de manera segura.
curl -X POST http://localhost:7878/closeRespuesta:
{
"status": "closing",
"killedInstances": 1,
"message": "NovaCore-Engine is shutting down cleanly"
}Permite administrar rutinas de instalación complejas para modloaders como Forge, Fabric o NeoForge de manera delegada.
Lista los gestores instalables disponibles.
curl http://localhost:7878/modloaders
# {"loaders": ["fabric", "forge", "neoforge", "quilt", "legacyfabric", "optifine"]}Obtiene las versiones disponibles de un cargador para la versión de Minecraft elegida.
curl http://localhost:7878/modloaders/versions/fabric/1.21.1Inicia la preparación asincrónica y la instalación de un ModLoader para una instancia en específico. Retorna un sessionId e inicia descargas en background que emiten eventos.
curl -X POST http://localhost:7878/modloaders/install \
-H "Content-Type: application/json" \
-d '{
"loader": "fabric",
"loaderVersion": "0.15.7",
"minecraftVersion": "1.21.1",
"resolvedInstancePath": "/instances/mi-instancia",
"resolvedLibrariesPath": "/shared/libraries"
}'Devuelve el JSON de estado actual (qué loader está inyectado actualmente en esa instancia). instancePath debe ir codificado en URL (%2Finstances%2F...).
Elimina los rastros y configuraciones en disco de que existiera un ModLoader instalado para la instancia.
Devuelve el estado detallado de cada archivo dentro de una categoría para una sesión activa. Útil para debuggear problemas de instalación.
# Ver estado de todos los assets de una sesión
curl "http://localhost:7878/debug/download/assets?sessionId=session-1710000000000-1"
# Sin sessionId devuelve la sesión más reciente
curl http://localhost:7878/debug/download/clientCategorías: client, libraries, assets, natives
Respuesta:
{
"sessionId": "session-1710000000000-1",
"category": "assets",
"total": 280,
"summary": {
"done": 250,
"skipped": 28,
"failed": 0,
"pending": 2,
"downloading": 0
},
"files": [
{
"file": "objects/00/00abc123...",
"status": "done",
"size": 4096,
"downloaded": 4096,
"progress": 100,
"destination": "/home/user/.launcher/shared/assets/objects/00/00abc123",
"url": "https://resources.download.minecraft.net/..."
}
]
}