"Papa, els NPCs em parlen en català i em coneixen pel nom. Això és màgia?" — No, fill. Són 4 contenedores Docker, un LLM y 279 líneas de diálogo generadas a las 3 de la madrugada.
Hace tres meses empecé a construir un servidor de Minecraft para mis hijos. La idea era simple: un mundo medieval donde pudieran jugar juntos. Pero en algún punto entre configurar el primer NPC y verles la cara cuando ese NPC les habló en catalán, el proyecto se convirtió en otra cosa. Se convirtió en un juego que no tiene final —literalmente— porque cada noche, mientras duermen, una IA revisa qué han hecho, genera nuevas aventuras, nuevos diálogos, nuevas misiones, y cuando se levantan por la mañana el mundo ha cambiado.
Este artículo es el recorrido técnico completo de AIMC (AI Minecraft): la arquitectura, las decisiones, los fracasos, y por qué creo que este tipo de proyectos representan algo más grande que un servidor de Minecraft. Es la demostración de que la IA generativa no es solo para dashboards corporativos —es para hacer que tu hijo de ocho años practique lectura comprensiva en su lengua materna sin darse cuenta de que está aprendiendo.
El Minecraft vanilla tiene un problema que todo padre conoce: después de dos semanas, los niños lo dejan. No porque el juego sea malo, sino porque es estático. Construyes una casa, matas al Ender Dragon, y ya. No hay narrativa emergente. No hay sorpresas. El mundo no te necesita.
La pregunta que me hice fue: ¿y si el mundo te necesitara? ¿Y si cada vez que entraras hubiera algo nuevo? Un mercader que ha llegado con un encargo urgente. Un rumor sobre una cueva al norte donde un mago oscuro está acumulando poder. Un herrero que necesita materiales raros y te ofrece una espada encantada a cambio. No un evento aleatorio generado por dados —una historia coherente, que recuerda lo que hiciste ayer, que reacciona a tus decisiones.
Esa es la visión de AIMC. Y no es teórica: lleva funcionando varias semanas.
AIMC corre como un stack Docker Compose con cuatro servicios que se hablan entre sí:
services:
postgres: # Estado persistente — aventuras, misiones, jugadores
ai-director: # Cerebro — FastAPI + Claude + TTS pipeline
paper: # Servidor Minecraft — Paper 1.21.4 + bridge plugin
cdn: # nginx — resource packs + audio para clientes
El flujo es deliberadamente simple. El jugador interactúa con un NPC en el juego. El bridge plugin (Java, Javalin HTTP embebido) intercepta ese clic y lo envía al AI Director (Python, FastAPI). El Director consulta el estado del jugador en PostgreSQL, decide qué diálogo mostrar, genera la respuesta si es necesario via Claude, sintetiza audio via Edge TTS, y devuelve al bridge el texto + el comando de sonido. El bridge muestra el diálogo en el chat del juego y reproduce la voz del NPC. Todo en menos de dos segundos.
Servidor Minecraft optimizado. Build 232 pinneado (Citizens se rompe en builds posteriores). Puerto 25566 juego + 8765 HTTP bridge.
Python con uv. Anthropic SDK, edge-tts, ffmpeg, SQLAlchemy 2 async, httpx. Puerto 8000. El cerebro del sistema.
7 migraciones Alembic. Tablas: adventures, world_bibles, deployments, player_quest_status, dialogue_trees.
Sirve resource packs + schematics desde el volumen compartido aimc-audio. Los clientes descargan audio de aquí.
El puente entre Minecraft y la IA es un plugin Java con Javalin 6.3 embebido que expone una API REST. No es un mod del cliente —es servidor puro. Los endpoints cubren todo lo que la IA necesita para operar sobre el mundo:
# Rutas principales del bridge (AIMC v0.6.0)
/health # Heartbeat
/cmd # Ejecuta comandos MC (allowlist configurable)
/state # Posición + inventario del jugador
/npc/spawn # Crea NPC con skin, rol, posición
/structure/paste-schematic # Pega .schematic vía FAWE
/world/fill-region # Rellena región con bloque
/world/prepare-stage # Prepara canvas plano para construcción
/adventure/deploy # Despliega aventura completa (NPCs + diálogos + quests)
/chest/place # Coloca cofre con loot
/mob/spawn # Genera mobs con NBT (profesión de aldeano, etc.)
La decisión de hacer un bridge HTTP en lugar de un plugin monolítico fue deliberada: el AI Director es Python, y quiero poder iterar en la lógica de IA sin recompilar Java. El bridge es un thin adapter que traduce intenciones de alto nivel ("coloca un NPC herrero aquí") a comandos de Bukkit. La inteligencia vive fuera del juego.
Mis hijos hablan catalán. El catalán es su lengua materna, la que usan en la escuela, la que hablan con sus amigos. Pero casi todo el contenido digital que consumen —juegos, YouTube, series— está en castellano o inglés. El catalán queda relegado a los deberes.
AIMC invierte esa ecuación. Todos los NPCs hablan catalán. Cada línea de diálogo, cada misión, cada descripción de objeto está en catalán. Y no solo texto: los NPCs tienen voz.
El pipeline es: Story Bible (Claude genera narrativa) → Dialogue Tree (se estructura en nodos con condiciones) → Edge TTS (sintetiza audio) → Resource Pack (empaqueta OGG Vorbis) → CDN (sirve al cliente).
Las voces son ca-ES-EnricNeural para personajes masculinos y ca-ES-JoanaNeural para femeninos —las voces catalanas de Microsoft Edge TTS, gratuitas y sorprendentemente naturales. El audio se convierte a OGG Vorbis mono 44.1kHz con ffmpeg (formato nativo de Minecraft) y se empaqueta en un resource pack que el cliente descarga automáticamente al conectarse.
El resultado es que cuando un niño hace clic en "Mossèn Llorenç" en la iglesia de Apex, el sacerdote le dice en voz alta, en catalán: "Benvingut, aventurer. L'església guarda secrets antics que potser podrien ajudar-te en la teva missió." Y el texto aparece en el chat para que lo lean.
Cada NPC tiene voz propia generada por Edge TTS en catalán. Estos son algunos saludos reales del juego — 599 archivos de audio en total:
El señor feudal de la ciudad
El sacerdote de la iglesia
El erudito de la torre
El herrero del pueblo
La vendedora del mercado
El joven estudiante
Los NPCs no son maniquíes estáticos. Cada uno tiene un rol (lord, herrero, maga, tabernera, guardia), un skin asignado del pool de Hermitcraft (Grian para el Lord, Etho para los eruditos, Technoblade para los herreros), una posición calibrada al bloque —verificada con un protocolo de 6 pasos que incluye comprobación de suelo, pies, cabeza y esquinas— y un árbol de diálogo que cambia según el estado del jugador.
El herrero Joan, por ejemplo, empieza presentándose. Si el jugador ha aceptado la quest principal, Joan menciona que ha oído rumores sobre la reliquia perdida. Si el jugador ya ha completado la quest, Joan lo felicita y le ofrece un descuento en su tienda. Son 279 líneas de diálogo solo para la aventura principal, y cada NPC sabe en qué punto de la historia está el jugador.
La ciudad de Apex tiene 61 NPCs activos con nombre, rol y personalidad. Más allá de la narrativa, 13 de ellos son vendedores con tiendas funcionales —6 paradas de mercado (verdura, carne, pescado, pan, lana, herramientas), 2 tiendas generales, una herrería, una armería, una posada, una taberna, y un mercado de lujo— cada uno con su inventario propio a través de la Bukkit Merchant API. El jugador hace clic derecho y se abre la interfaz de comercio nativa de Minecraft. Cero comandos de chat. Todo pensado para que un niño de seis años lo pueda usar.
Un mundo con historia necesita mecánicas. La última fase del proyecto (Phase 44) ha añadido un sistema RPG completo:
| Clase | Arquetipo | Trees primarios | Habilidad activa |
|---|---|---|---|
| Paladí | Tank | heavy_armor + heavy_weapons | Crit de Guerra (taunt 8s) |
| Mag | DPS | enchanting + archery | Bola de Foc (projectile) |
| Druida | Healer | farming + alchemy | Aura de Curació (5 bloques) |
Detrás de esto hay ValhallaMMO, un plugin de skill trees con perks ramificados que avanza por XP en acciones relevantes (el herrero mejora forjando, el mago encantando). Las clases se definen en un fichero Python (class_config.py) que el AI Director lee para asignar items iniciales, puntos de habilidad y etiquetas de clase al jugador. El bridge traduce eso a comandos de ValhallaMMO.
Para juego cooperativo, AlessioDP Parties (con backend PostgreSQL compartido) permite crear grupos. Y en el cliente, Xaero's Minimap muestra aliados, NPCs y objetivos en un minimapa que se sincroniza con el servidor via MapModCompanion.
Todo se opera desde la hotbar del juego. Nada de /party create en el chat. Un item en el slot 9 abre un menú de inventario con botones clickeables. Si un niño sabe hacer clic, sabe jugar.
La aventura principal de Apex —"L'Enigma d'Apex"— es una cadena de 8 pasos con un arco narrativo completo: una reliquia perdida, un mago oscuro, pistas distribuidas por la ciudad, una mazmorra final, y un enfrentamiento con boss. La genera Claude a partir de un Story Bible que define el tono, los personajes y los hilos argumentales. El AI Director la estructura como un grafo de nodos con condiciones de avance y la despliega en el servidor.
ApexMapRenderer dibuja un mapa del mundo con cursores de NPCs, posición del jugador y objetivo activo. Zoom ajustable con comando.Y cuando el jugador completa todo esto, la pregunta es: ¿y ahora qué?
Aquí está el corazón del proyecto. La respuesta a "¿y ahora qué?" es: mañana hay más.
La idea es un cron job nocturno que ejecuta un ciclo completo de generación:
player_quest_status de PostgreSQL. ¿Qué quests ha completado el jugador? ¿Con qué NPCs ha hablado? ¿Qué nivel tiene? ¿Qué items lleva?/adventure/deploy del bridge recibe el paquete completo y lo aplica al mundo en caliente.Cuando mis hijos se conectan por la mañana, hay una quest nueva esperándoles. Un NPC que ayer no estaba les saluda por su nombre. El mundo ha evolucionado. Y lo único que yo he hecho es dormir.
El juego infinito no es una promesa de marketing. Es un cron job, un LLM y una base de datos.
Uno de los fracasos más formativos del proyecto fue intentar generar ciudades de forma procedural. Pasé 9 iteraciones —layout engines, zone bitmasks, density tuning, vegetation passes— y el resultado era siempre el mismo: casas que se solapaban, interiores vacíos, calles que no llevaban a ningún sitio. Mis hijos lo miraban con la educación de quien sabe que papá ha trabajado mucho, pero la primera vez que les enseñé un screenshot procedural, el mayor dijo: "Está bien, pero no parece de verdad."
El pivote fue radical: dejar de generar y empezar a curar. La comunidad de Minecraft lleva 15 años construyendo ciudades medievales espectaculares. Apex Medieval, un schematic de 186x167 bloques descargado de mcbuild.org, tiene calles empedradas, una catedral gótica, un castillo con biblioteca y sala del trono, una posada de tres plantas, una plaza de mercado con paradas, una herrería con yunque funcional, y casas con interiores decorados hasta el detalle de las cortinas.
FastAsyncWorldEdit (FAWE) permite pegar estos schematics en el mundo del servidor de forma asíncrona, sin lag. El pipeline es: descarga el schematic → pega via API del bridge → captura POIs caminando por el mapa (una inversión de 20 minutos por sitio que se reutiliza en cada wipe) → despliega NPCs en las posiciones capturadas → verifica visualmente con un renderer top-down que lee los archivos de región directamente.
El resultado es un mundo que parece construido a mano, porque lo fue —por otro humano, hace años, con una dedicación que ningún LLM puede igualar hoy. La IA aporta la vida (NPCs, diálogos, quests, voz), no la arquitectura. Es una combinación que funciona mucho mejor que cualquiera de las dos por separado.
| Métrica | Valor |
|---|---|
| NPCs activos (Apex) | 61 con nombre + rol + skin + diálogo |
| NPCs totales desplegados | 113 |
| Líneas de diálogo (aventura principal) | 279 |
| Vendedores con tienda funcional | 13 |
| Items en venta | 50+ |
| POIs capturados | 30 |
| Voices TTS generadas | 279+ archivos OGG |
| Quests activas | 1 principal (8 pasos) + 9 secundarias |
| Clases RPG | 3 (Paladí, Mag, Druida) |
| Migraciones Alembic (DB) | 7 |
| Endpoints del bridge | 15+ |
| Coste de hosting | 0 (bare metal propio) |
| Coste de TTS | 0 (Edge TTS gratuito) |
| Coste de LLM | Suscripción Claude existente |
.schematic, Sponge .schem, WorldEdit) codifica el offset de forma diferente. Pasé tres sesiones enteras con NPCs hundidos en el suelo o flotando en el aire antes de estandarizar: el Y de la superficie en superflat es 2, no 66. El del schematic de Apex es 5. Cada pega requiere paste_pos = target - WEOffset.aimc-audio es un volumen Docker montado en el Director (rw) y en el CDN (ro). El Director genera los archivos OGG, el CDN los sirve. Sin copias, sin sincronización, sin S3.La mayoría de artículos sobre IA aplicada hablan de enterprise, de productividad, de transformación digital. Y está bien. Pero hay una dimensión que se menciona poco: la IA como herramienta de paternidad.
Yo no estoy construyendo AIMC para publicar un paper ni para monetizarlo. Lo construyo porque quiero pasar tiempo con mis hijos haciendo algo que les fascina, y quiero que ese tiempo tenga valor más allá del entretenimiento. Quiero que lean catalán sin que sea una obligación. Quiero que aprendan a colaborar en equipo (el Paladí tanquea mientras el Druida cura —eso es coordinación). Quiero que experimenten un mundo que responde a sus decisiones, que les enseña que las acciones tienen consecuencias narrativas.
Y quiero que vean que su padre puede construir algo así. Que la tecnología no es una caja negra: es una herramienta que se puede moldear para crear experiencias que no existen en ningún marketplace.
La IA me permite hacerlo porque elimina las dos barreras que antes lo hacían impracticable: el contenido y la escala. Antes, crear 279 líneas de diálogo coherentes, con arcos narrativos, en catalán, habría sido un trabajo de semanas. Claude lo hace en minutos. Antes, sintetizar voz en catalán requería licencias caras o voces robóticas. Edge TTS lo resuelve gratis. Antes, diseñar un sistema de quests con estado persistente y diálogos condicionales era un proyecto de ingeniería de meses. Con un LLM que genera configuraciones de quest a partir de una narrativa en lenguaje natural, es una tarde.
No estoy diciendo que sea fácil. Son 44 fases, cientos de horas, y el proyecto está lejos de terminado. Pero el ratio entre esfuerzo y resultado ha cambiado fundamentalmente. Un padre con conocimientos de ingeniería y acceso a un LLM puede construir experiencias que antes requerían un estudio indie con presupuesto.
El cron nocturno es la pieza que falta para cerrar el bucle. Hoy las aventuras se generan cuando yo las pido; mañana se generarán solas. El pipeline está preparado —cada pieza (análisis de estado, generación narrativa, TTS, deploy) funciona de forma independiente— y solo queda orquestarlas en un job programado.
Más allá de eso:
AIMC no es un producto. Es un proyecto de padre ingeniero que quiere que sus hijos vivan algo que no se puede comprar en ninguna tienda: un mundo que les conoce, les habla en su lengua, y crece con ellos. Es también una demostración técnica de que el stack actual de IA generativa —LLMs, TTS, orquestación agéntica— es lo suficientemente maduro como para construir experiencias interactivas ricas sin presupuesto enterprise.
Cuatro contenedores Docker. Una suscripción a Claude. Voces catalanas gratuitas. Y un niño que esta mañana me ha dicho: "Papa, el Mossèn Llorenç m'ha dit que la reliquia és a la cova del nord. Puc anar-hi?"
Sí, hijo. Puedes ir. Y mañana habrá algo nuevo esperándote.