# Frandolo's Inferno — Workflow de updates con Packwiz + Prism

Setup completo el **2026-05-02**. Stack: Packwiz CLI (local) + Caddy en daffi-server + Prism Launcher portable distribuido a jugadores.

## Arquitectura

```
[Tu PC]                          [daffi-server :8080]            [Player]
FrandolosInferno/      rsync     packwiz-host/public/    HTTP    Prism portable
├── pack.toml         ────►      ├── pack.toml          ◄────    ├── prismlauncher.exe
├── index.toml                   ├── index.toml                   └── instances/Frandolo's Inferno/
├── mods/                        ├── mods/                            ├── instance.cfg (PreLaunch)
├── kubejs/                      ├── kubejs/                          └── .minecraft/
└── ...                          └── ...                                  └── packwiz-installer-bootstrap.jar
```

Cada launch del player → bootstrap revisa `pack.toml` → baja diff → MC arranca con todo actualizado.

## Workflow para actualizar el modpack

### 1. Hacés el cambio en tu PC

Por ejemplo:
- Editar/agregar un mod en `mods/`
- Editar `kubejs/startup_scripts/*.js` (nuevos requisitos PMMO, nuevas skills)
- Editar configs en `config/`

> ⚠️ Recordá: cambios en `kubejs/server_scripts/**` quedan SOLO en el server (lobby/main vía SSH). Esos no van al cliente.

### 2. Refresh del index packwiz

```powershell
cd C:\Users\kossc\curseforge\minecraft\Instances\FrandolosInferno
packwiz refresh
```

(Si no tenés `packwiz` en PATH local, instalalo: https://packwiz.infra.link/ o usalo desde el sandbox de Claude)

Esto recalcula los hashes del index. Solo los archivos modificados se marcan en el diff.

### 3. Sync al server

```bash
# Extraer la lista de archivos del index
grep '^file = ' index.toml | sed 's/^file = "//;s/"$//' > /tmp/files-to-sync.txt
echo "pack.toml" >> /tmp/files-to-sync.txt
echo "index.toml" >> /tmp/files-to-sync.txt

# Push a daffi-server
rsync -az --files-from=/tmp/files-to-sync.txt --partial \
  ./ daffi-server:/home/daffi/frandolos-inferno/packwiz-host/public/
```

(El primer sync es ~1 GB. Updates posteriores son segundos.)

### 4. Listo — al próximo launch los players reciben el update

No tenés que avisar a nadie. La próxima vez que alguien abra Prism y la instancia, el bootstrap detecta el cambio en pack.toml y baja solo los archivos modificados.

---

## Cambios server-side (no afectan al cliente)

Si solo cambiás `kubejs/server_scripts/**` o configs server-only del lobby/main:

1. Edición directa via SSH a daffi-server (paths en `reference_ssh_server.md`)
2. Reload con `/kubejs reload server_scripts` desde la consola del server (no requiere reinicio)
3. NO requiere update del cliente

---

## Comandos para administrar el host packwiz

```bash
# Iniciar Caddy (host HTTP)
ssh daffi-server 'bash ~/frandolos-inferno/start_packwiz_host.sh'

# Detener
ssh daffi-server 'bash ~/frandolos-inferno/stop_packwiz_host.sh'

# Ver logs de acceso
ssh daffi-server 'tail -50 ~/frandolos-inferno/packwiz-host/access.log'

# Ver consola Caddy en vivo
ssh daffi-server 'screen -r packwiz-host'   # Ctrl-A D para salir
```

---

## Setup de un nuevo player

1. Mandarle `FrandolosInferno-Cliente.zip` (en este folder, 22 MB)
2. Player lo extrae, abre `PrismLauncher\prismlauncher.exe`
3. Login con cuenta Microsoft de Minecraft
4. Doble-click en la instancia "Frandolo's Inferno"
5. Espera el primer launch (~1 GB de mods + Java + Forge, varios minutos)

---

## Troubleshooting

### El bootstrap no descarga nada / da error de conexión

- Verificá que el puerto **25568** esté abierto en el router del server (port forward TCP 25568 → 192.168.1.76:25568)
- Probá `curl -I http://play.daffi.cloud:25568/pack.toml` desde una red externa
- Verificá Caddy corriendo: `ssh daffi-server 'screen -ls'` (debe estar `packwiz-host`)

### "Pack format" mismatch

Si después de cambiar de versión de packwiz (CLI) el bootstrap se queja del format:
- Asegurate que `pack.toml` tenga `pack-format = "packwiz:1.1.0"` (compatible con bootstrap v0.0.3)

### IP pública cambió (ISP residencial dinámico)

Ya está resuelto con DDNS: el `instance.cfg` apunta a `http://play.daffi.cloud:25568/pack.toml`, y un systemd timer en daffi-server (`hostinger-ddns.timer`, cada 5 min) mantiene `play.daffi.cloud` apuntando a la IP pública vía API de Hostinger. Si por alguna razón querés volver a IP fija, edita `instance.cfg` en `instances/FrandolosInferno/` y redistribuí el ZIP.

### Player abre Prism y no ve la instancia

Asegurate que extrajo TODA la carpeta PrismLauncher y mantuvieron la estructura. La instancia vive en `PrismLauncher\instances\FrandolosInferno\`.

---

## Archivos relevantes en este repo

| Archivo | Para qué |
|---------|----------|
| `pack.toml` | Metadata del modpack (versión, MC, Forge) |
| `index.toml` | Lista de TODOS los archivos del modpack con su hash |
| `.packwizignore` | Patrones de archivos a NO incluir (server_scripts, caches, archivos personales) |
| `FrandolosInferno-Cliente-v5.zip` | El ZIP listo para distribuir a jugadores (versión actual, con dominio play.daffi.cloud) |

