Datos contra ruido.
El proyecto nace de una mezcla rara y potente: juicio externo, benchmarks, amor por la IA y ganas de demostrar con resultados, no con opiniones.
El producto no era el server. Era quitar friccion.
Java, Forge, mods, Playit, payloads, RAM, GPU y logs son detalles que un amigo no deberia sufrir. ScoobCoding convierte esa complejidad en una experiencia tipo consola: abrir, escribir nombre y jugar.
La IA funciono como equipo: arquitecto, programador, QA, disenador, operador y documentador. La interfaz nacio como imagen y luego se hizo codigo.
Arquitectura pensada para no romperse.
La estructura final separa runtime real, cliente, laboratorio, diseno, archivo y copia publicable. Cada carpeta tiene una responsabilidad clara.
Forge real, mundo, mods, configs, panel macOS y scripts de arranque. Es la carpeta viva del servidor.
Launcher Rust, releases, payload y modpack de amigos. El `.exe` crea `ScoobCodingClient/conf` junto a si mismo.
Pruebas automatizadas, evidencias, checks de payload, recursos Windows y estabilidad de servidor.
Copia limpia para publicar: codigo, docs, manifiestos e imagenes; sin mundos, claves, logs ni binarios gigantes.
Lo que se construyo, no solo lo que se imagino.
Las imagenes de anime cuentan la historia; las capturas reales demuestran la app y el launcher.
Las decisiones importantes.
El codigo completo esta en el repo. Aqui se explican los puntos que hacen que el proyecto sea portable, probado y mantenible.
let root_dir = exe_dir.join("ScoobCodingClient");
let conf_dir = root_dir.join("conf");
let game_dir = conf_dir.join("minecraft");
let cache_dir = conf_dir.join("cache");
let runtime_dir = conf_dir.join("runtime");
let logs_dir = conf_dir.join("logs");
match total_mb {
0..=6144 => 2560,
6145..=8192 => 3072,
8193..=12288 => 4096,
12289..=24576 => 5120,
_ => 6144,
}
let serverDir = URL(fileURLWithPath: NSHomeDirectory())
.appendingPathComponent("Desktop/server/01_servidor")
// El panel normaliza comandos humanos:
// chat: /op NombreJugador
// consola: op NombreJugador
require_prop "white-list" "false"
require_prop "enforce-whitelist" "false"
require_file "$CLIENT_DIR/releases/modpack-amigos-forge-1.20.1.zip"
swiftc "$APP_BUNDLE_REAL/Contents/Resources/ServerPanel.swift" \
-o /tmp/MinecraftServerPanel.validate
WORKSPACE = pathlib.Path(__file__).resolve().parents[2]
ROOT = WORKSPACE / "01_servidor"
CLIENT_ROOT = WORKSPACE / "02_cliente"
LAB_ROOT = WORKSPACE / "03_laboratorio"
Pruebas reales, limites reales.
La promesa no es magia. Es evidencia: que paso, que falta y que no se puede fingir desde un Mac.
Leer, entender, reconstruir.
La documentacion larga queda separada para que el README no sea interminable y el proyecto pueda crecer.