Skip to content

Este modulo esta echo tanto en JS y TS este modulo esta pensado para applicaciones echas en NodeJS/Electron con una base solida y modular para adaptarlo a cualquier proyecto facilmente

License

Notifications You must be signed in to change notification settings

Stepnicka012/OptifineDownloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


OptiFine Downloader & Patcher es una suite completa escrita en JavaScript/TypeScript y Node.js, diseñada para:

  • 📥 Descargar automáticamente todas las versiones de OptiFine desde sus mirrors oficiales
  • 🔧 Instalar OptiFine sin interfaz gráfica mediante automatización del instalador oficial
  • 📦 Generar manifiestos JSON con metadata completa para launchers y herramientas
  • 🎯 Sistema modular basado en eventos para integración avanzada
  • 🛠️ Facilitar integración en scripts, launchers y servidores
  • Ejecución en paralelo usando control de concurrencia
  • 🌐 100% Node.js puro - sin dependencias externas en la versión v2 ( En JS )

El proyecto está pensado para usuarios avanzados y desarrolladores que necesiten control total sobre las versiones de OptiFine en entornos multiplataforma (Windows, Linux, macOS).


⚠️ DISCLAIMER LEGAL

OptiFine Downloader & Patcher es open-source y automatiza procesos que puedes hacer manualmente:

  • ✅ Descarga OptiFine desde mirrors oficiales
  • ✅ NO distribuye OptiFine ni versiones modificadas
  • ✅ Automatiza el instalador oficial sin reemplazarlo
  • ✅ Uso personal y educativo

Derechos de Propiedad

  • OptiFine: sp614x, todos los derechos reservados, optifine.net
  • Minecraft: Mojang Studios / Microsoft, requiere licencia válida
  • OptiFine Downloader & Patcher: NovaStepStudios, MIT License, NO afiliado a OptiFine o Mojang

⚙️ Cómo Funciona

📥 Downloader (OptifineDownloader.js / .ts)

  1. Scraping: Parseo HTML de mirrors oficiales con Mini Cheerio
  2. Resolución de URLs: Seguimiento de redirecciones y obtención de enlaces directos
  3. Descarga paralela: Control de concurrencia con p-limit
  4. Caché inteligente: Sistema de caché de URLs y manifiestos
  5. Generación de manifiestos: JSON completo con toda la metadata

🔧 Patcher (OptifinePatcher.js / .ts)

  1. Extracción: Extracción de Installer.class del JAR de OptiFine
  2. Descompilación: Uso de CFR para descompilar la clase
  3. Modificación: Inyección de argumento CLI --mcdir para instalación headless
  4. Recompilación: Compilación del código modificado
  5. Reempaquetado: Actualización del JAR con la clase parcheada
  6. Instalación automática: Ejecución del instalador sin GUI
  7. Limpieza: Eliminación de archivos temporales

Seguridad: OptiFine final idéntico al oficial, cambios reversibles, sin permisos de administrador.


🚀 Características

Downloader

  • ✨ Compatible con Windows, Linux y macOS
  • 📦 Descarga de versiones estables y preview/beta
  • 🔍 Filtrado por versión mínima/máxima de Minecraft
  • Multithreading y control de concurrencia
  • 💾 Sistema de caché para manifiestos y URLs
  • 📊 Generación de manifiestos JSON completos
  • 🎭 Interfaz CLI interactiva
  • 🔄 Reintentos automáticos ante fallos
  • 📈 Barra de progreso en tiempo real
  • 🎯 100% Node.js puro (v2) o TypeScript modular con eventos

Patcher

  • 🔧 Instalación completamente automatizada
  • 🎯 Sin dependencias externas (solo Java y CFR)
  • 🔄 Extracción ZIP pura en Node.js (fallback a comandos del sistema)
  • 📝 Modificación de manifiesto JAR
  • 🧹 Limpieza automática de archivos temporales
  • 🛡️ Manejo robusto de errores

🛠️ Requisitos

Para Downloader

  • Node.js 14+ (v16+ recomendado para TypeScript)
  • Conexión estable a internet
  • ~500MB de espacio en disco por versión

Para Patcher

  • Java JDK con javac y jar
    • Linux: Fedora/DNF, Ubuntu/APT, Arch/Pacman
    • Windows: Oracle JDK o Adoptium
    • macOS: brew install openjdk
  • CFR 0.152.jar (descompilador Java)
  • Minecraft instalado (para instalación de OptiFine)

📦 Instalación

# Clonar repositorio
git clone https://github.com/NovaStepStudios/optifine-downloader.git
cd optifine-downloader

# Para versión TypeScript (recomendado)
npm install
npm run build

# Descargar CFR
mkdir -p Libs
cd Libs
wget https://github.com/leibnitz27/cfr/releases/download/0.152/cfr-0.152.jar
cd ..

▶️ Uso Básico

🔽 Downloader

Versión v2 (Node.js puro - Sin dependencias)

# Ayuda
node OptifineDownloader-v2.js --help

# Descargar versiones 1.19.2+
node OptifineDownloader-v2.js --min-version 1.19.2

# Descargar sin previews
node OptifineDownloader-v2.js --min-version 1.20.0 --no-previews

# Solo generar manifest (sin descargar)
node OptifineDownloader-v2.js --manifest-only --min-version 1.21.0

# Modo rápido (10 threads)
node OptifineDownloader-v2.js --fast --min-version 1.20.0

# Forzar scraping (ignorar caché)
node OptifineDownloader-v2.js --force-scrape

Versión TypeScript (Modular con eventos)

# Compilar
npm run build

# Ejecutar
node dist/OptifineDownloader.js --min-version 1.19.2

Opciones disponibles:

  • --min-version <ver> - Versión MÍNIMA de Minecraft (ej: 1.19.2)
  • --max-version <ver> - Versión MÁXIMA de Minecraft (ej: 1.21.0)
  • --output <dir> - Directorio de salida (default: COptifine)
  • --threads <n> - Número de threads (default: 5)
  • --no-previews - NO descargar versiones preview/beta
  • --previews-only - SOLO descargar versiones preview
  • --manifest-only - Solo generar manifest, NO descargar archivos
  • --force-scrape - Forzar scraping (ignorar caché)
  • --silent - Modo silencioso (menos logs)
  • --fast - Modo rápido (más threads)

🔧 Patcher

# Sintaxis básica
node OptifinePatcher.js <optifine.jar> <minecraft_dir> [java_cmd]

# Ejemplos
node OptifinePatcher.js OptiFine_1.20.1_HD_U_I6.jar ~/.minecraft
node OptifinePatcher.js OptiFine.jar . java17

# Windows
node OptifinePatcher.js OptiFine_1.21.1.jar C:\Users\Usuario\AppData\Roaming\.minecraft

# Versión TypeScript
node dist/OptifinePatcher.js OptiFine_1.20.1_HD_U_I6.jar ~/.minecraft

📊 Estructura del Proyecto

optifine-downloader/
├── OptifineDownloader-v2.js    # Versión Node.js puro (sin deps)
├── OptifineDownloader.ts       # Versión TypeScript modular
├── OptifinePatcher.js          # Patcher Node.js
├── OptifinePatcher.ts          # Patcher TypeScript
├── Libs/
│   └── cfr-0.152.jar          # Descompilador CFR
├── COptifine/                  # Salida por defecto
│   ├── Jar/                    # JARs descargados
│   └── COptifine_Manifest.json # Manifest generado
├── package.json
├── tsconfig.json
└── README.md

📄 Formato del Manifiesto JSON

El manifest generado contiene información completa de cada versión:

[
  {
    "minecraft_version": "1.21.10",
    "optifine_version": "OptiFine HD U J7 pre11",
    "mirror_url": "http://optifine.net/adloadx?f=preview_OptiFine_1.21.10_HD_U_J7_pre11.jar",
    "final_url": "https://optifine.net/downloadx?f=preview_OptiFine_1.21.10_HD_U_J7_pre11.jar&x=abc123",
    "forge_version": "Forge 60.1.0",
    "release_date": "03.12.2025",
    "filename": "preview_OptiFine_1.21.10_HD_U_J7_pre11.jar",
    "is_preview": true,
    "downloaded": true,
    "file_size": 5242880,
    "local_path": "./COptifine/Jar/preview_OptiFine_1.21.10_HD_U_J7_pre11.jar"
  }
 Etc...

Campos del manifest:

  • minecraft_version - Versión de Minecraft
  • optifine_version - Versión completa de OptiFine
  • mirror_url - URL del mirror oficial
  • final_url - URL directa de descarga
  • forge_version - Versión de Forge compatible (si aplica)
  • release_date - Fecha de lanzamiento
  • filename - Nombre del archivo JAR
  • is_preview - Si es versión preview/beta
  • downloaded - Estado de descarga
  • file_size - Tamaño en bytes
  • local_path - Ruta local del archivo

Usos del manifest:

  • 🎮 Launchers personalizados
  • 🗂️ Gestión de versiones
  • 📦 Mirrors locales
  • 🤖 Automatización de instalaciones
  • 📊 Monitoreo de nuevas versiones

🎯 Uso Avanzado

Como Módulo Node.js

Downloader

const { scrapeOptifineManifest, downloadAllFiles } = require('./OptifineDownloader-v2.js');

const config = {
    min_version: "1.20.0",
    max_threads: 10,
    base_dir: "MisOptiFine",
    download_previews: false,
    silent: true
};

(async () => {
    const manifest = await scrapeOptifineManifest(config);
    const results = await downloadAllFiles(manifest, config);
    console.log(`Descargados: ${results.downloaded}`);
})();

Downloader TypeScript (con eventos)

import { OptiFineDownloader } from './OptifineDownloader';

const downloader = new OptiFineDownloader({
    min_version: "1.20.0",
    max_threads: 10,
    download_previews: false
});

// Escuchar eventos
downloader.on('download:file:success', (entry, bytes) => {
    console.log(`✅ ${entry.optifine_version} - ${(bytes / 1024 / 1024).toFixed(2)} MB`);
});

downloader.on('complete', (report) => {
    console.log(`Total descargado: ${report.summary.total_mb.toFixed(2)} MB`);
});

// Ejecutar
const report = await downloader.run();

Patcher

const OptifinePatcher = require('./OptifinePatcher.js');

(async () => {
    try {
        await OptifinePatcher.executeOptifine(
            './OptiFine_1.20.1_HD_U_I6.jar',
            '~/.minecraft',
            'java'
        );
        console.log('¡OptiFine instalado!');
    } catch (error) {
        console.error('Error:', error.message);
    }
})();

🎨 Características Técnicas

Mini Cheerio (Parser HTML)

Implementación ligera de jQuery-like para parseo HTML sin dependencias:

  • Búsqueda de elementos con selectores
  • Extracción de atributos
  • Manejo de tablas y listas
  • Decodificación de entidades HTML

P-Limit (Control de Concurrencia)

Sistema de cola para limitar ejecuciones paralelas:

  • Control fino de threads
  • Prevención de saturación de conexiones
  • Manejo de errores por tarea
  • Compatible con Promises/async-await

Sistema de Eventos (TypeScript)

API basada en EventEmitter para integración avanzada:

  • scrape:* - Eventos de scraping
  • resolve:* - Eventos de resolución de URLs
  • download:* - Eventos de descarga
  • manifest:* - Eventos de manifest
  • error - Errores globales
  • complete - Finalización con reporte

Extracción ZIP Pura (Patcher)

Implementación de lectura ZIP en Node.js puro:

  • Parseo de estructuras ZIP/JAR
  • Lectura de EOCD y Central Directory
  • Soporte para compresión DEFLATE
  • Fallback a comandos del sistema

🔧 Solución de Problemas

Downloader

Problema: No se resuelven las URLs finales

# Solución: Aumentar reintentos o verificar conectividad
node OptifineDownloader-v2.js --force-scrape --threads 3

Problema: Descargas lentas

# Solución: Aumentar threads (cuidado con rate limiting)
node OptifineDownloader-v2.js --threads 10 --min-version 1.20.0

Problema: Manifest corrupto

# Solución: Forzar regeneración
rm COptifine/COptifine_Manifest.json
node OptifineDownloader-v2.js --force-scrape

Patcher

Problema: CFR no encontrado

# Solución: Verificar ubicación
ls -la Libs/cfr-0.152.jar

# O descargar
mkdir -p Libs
cd Libs
wget https://github.com/leibnitz27/cfr/releases/download/0.152/cfr-0.152.jar

Problema: Java no encontrado

# Verificar instalación
java -version
javac -version

# Linux: Instalar
sudo apt install default-jdk  # Debian/Ubuntu
sudo dnf install java-devel   # Fedora

Problema: Error al compilar Installer.class

# Solución: Verificar versión de Java (requiere 8+)
java -version

# O especificar java diferente
node OptifinePatcher.js OptiFine.jar ~/.minecraft /usr/lib/jvm/java-17-openjdk/bin/java

🤝 Contribuir

¡Contribuciones bienvenidas! Formas de contribuir:

  1. Reportar bugs en GitHub Issues
  2. Sugerir features con etiqueta enhancement
  3. Pull Requests:
    • Fork del repositorio
    • Crear branch: git checkout -b feature/nueva-funcionalidad
    • Commit: git commit -m "feat: descripción"
    • Push: git push origin feature/nueva-funcionalidad
    • Abrir Pull Request

Estándares de Código

  • Usar ESLint/Prettier
  • Comentarios claros en funciones complejas
  • Tests para nuevas funcionalidades (próximamente)
  • Actualizar README si añades features

📞 Contacto y Soporte


📜 Licencia

MIT License - Ver archivo LICENSE para detalles

Disclaimer: Este proyecto automatiza la descarga e instalación legítima de OptiFine. Uso educativo y de desarrollo. No afiliado con OptiFine o Mojang Studios.


🎯 Roadmap

  • Tests unitarios con Jest
  • GitHub Actions para CI/CD
  • Interfaz web con Express
  • Docker container
  • Integración con launchers populares
  • Sistema de notificaciones de nuevas versiones
  • API REST para servicios externos
  • Plugin para VSCode

Hecho con ❤️ por NovaStepStudios

⭐ Si te gusta el proyecto, dale una estrella en GitHub

About

Este modulo esta echo tanto en JS y TS este modulo esta pensado para applicaciones echas en NodeJS/Electron con una base solida y modular para adaptarlo a cualquier proyecto facilmente

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published