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).
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
- 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
- Scraping: Parseo HTML de mirrors oficiales con Mini Cheerio
- Resolución de URLs: Seguimiento de redirecciones y obtención de enlaces directos
- Descarga paralela: Control de concurrencia con p-limit
- Caché inteligente: Sistema de caché de URLs y manifiestos
- Generación de manifiestos: JSON completo con toda la metadata
- Extracción: Extracción de
Installer.classdel JAR de OptiFine - Descompilación: Uso de CFR para descompilar la clase
- Modificación: Inyección de argumento CLI
--mcdirpara instalación headless - Recompilación: Compilación del código modificado
- Reempaquetado: Actualización del JAR con la clase parcheada
- Instalación automática: Ejecución del instalador sin GUI
- Limpieza: Eliminación de archivos temporales
Seguridad: OptiFine final idéntico al oficial, cambios reversibles, sin permisos de administrador.
- ✨ 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
- 🔧 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
- Node.js 14+ (v16+ recomendado para TypeScript)
- Conexión estable a internet
- ~500MB de espacio en disco por versión
- Java JDK con
javacyjar- Linux: Fedora/DNF, Ubuntu/APT, Arch/Pacman
- Windows: Oracle JDK o Adoptium
- macOS:
brew install openjdk
- CFR 0.152.jar (descompilador Java)
- Colocar en
./Libs/cfr-0.152.jaro directorio actual - Descargar: benf.org/other/cfr
- Colocar en
- Minecraft instalado (para instalación de OptiFine)
# 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 ..# 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# Compilar
npm run build
# Ejecutar
node dist/OptifineDownloader.js --min-version 1.19.2Opciones 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)
# 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 ~/.minecraftoptifine-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
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 Minecraftoptifine_version- Versión completa de OptiFinemirror_url- URL del mirror oficialfinal_url- URL directa de descargaforge_version- Versión de Forge compatible (si aplica)release_date- Fecha de lanzamientofilename- Nombre del archivo JARis_preview- Si es versión preview/betadownloaded- Estado de descargafile_size- Tamaño en byteslocal_path- Ruta local del archivo
Usos del manifest:
- 🎮 Launchers personalizados
- 🗂️ Gestión de versiones
- 📦 Mirrors locales
- 🤖 Automatización de instalaciones
- 📊 Monitoreo de nuevas versiones
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}`);
})();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();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);
}
})();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
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
API basada en EventEmitter para integración avanzada:
scrape:*- Eventos de scrapingresolve:*- Eventos de resolución de URLsdownload:*- Eventos de descargamanifest:*- Eventos de manifesterror- Errores globalescomplete- Finalización con reporte
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
Problema: No se resuelven las URLs finales
# Solución: Aumentar reintentos o verificar conectividad
node OptifineDownloader-v2.js --force-scrape --threads 3Problema: Descargas lentas
# Solución: Aumentar threads (cuidado con rate limiting)
node OptifineDownloader-v2.js --threads 10 --min-version 1.20.0Problema: Manifest corrupto
# Solución: Forzar regeneración
rm COptifine/COptifine_Manifest.json
node OptifineDownloader-v2.js --force-scrapeProblema: 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.jarProblema: Java no encontrado
# Verificar instalación
java -version
javac -version
# Linux: Instalar
sudo apt install default-jdk # Debian/Ubuntu
sudo dnf install java-devel # FedoraProblema: 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¡Contribuciones bienvenidas! Formas de contribuir:
- Reportar bugs en GitHub Issues
- Sugerir features con etiqueta
enhancement - 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
- Usar ESLint/Prettier
- Comentarios claros en funciones complejas
- Tests para nuevas funcionalidades (próximamente)
- Actualizar README si añades features
- GitHub Issues: Para bugs y features
- Autor: NovaStepStudios
- Proyecto: OptiFine Downloader en GitHub
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.
- 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
