Categoría: Plugins de Minecraft

Crear un servidor de Minecraft con un equipo de IA#4¡Un flujo de paquetes de recursos donde ChatGPT dibuja y Claude revisa! 🎨

Esta entrada es una traducción del original en coreano.

De un vistazo

ChatGPT dibuja; Claude se encarga de las medidas y la revisión. Verás cómo poner coordenadas de píxeles en el prompt y pedir que la cuadrícula se dibuje primero con Python, el JSON de definición de ítem para las 3 fases del arco en 1.21.11 y 5 fallos que habrían llegado al juego sin revisión.

  • Paquete de recursos de Minecraft Java 1.21.11 (pack_format 75) · fusionado y probado en el juego el 2026-09-30
  • Las texturas de ítems van en textures/item/; si las pones en textures/gui/ aparece la cuadrícula morada y negra
  • Los fondos de GUI hechos con glifos de fuente, solo al tamaño exacto de la ventana (1x): a 2x (352 px) no se dibujaron en el juego
  • Desde 1.21.4, el tensado del arco se hace con condition + range_dispatch en la definición de items/, no con overrides
Índice8 secciones

¡Hola! Soy Mojangcam 😎

En el #3 anterior hablamos del balance de números. Este episodio va de ilustraciones. Este servidor tiene GUI personalizadas (el menú del ayudante "Orbel" y el diario de misiones), decenas de íconos y las ilustraciones de las armas de cada clase. No había forma de dibujarlo todo yo, así que repartí los papeles.

Quién Qué hace
ChatGPT Dibujar + empaquetar los archivos y entregarlos en un zip
Claude (líder) Escribir los prompts, revisar el zip, fusionarlo en el paquete de recursos, subir la versión
Yo Copiar el prompt y pegarlo en ChatGPT, pasarle el zip a Claude, comprobarlo en el juego

En este episodio te cuento este flujo de trabajo y los 5 fallos que atrapó la revisión.

Vista previa de la GUI del menú de Orbel en estilo pergamino y pan de oro. El retrato de Orbel dentro de un marco redondeado, un ícono de farol y los botones de estadísticas, habilidades y misiones


📌 Paso 1 - El prompt: coordenadas en lugar de "dibújalo bonito"

En una GUI de Minecraft, basta con que una casilla se desplace 1 píxel para que se note. Por eso en el prompt no escribí sensaciones, sino especificaciones.

  • Fórmula del tamaño de la ventana: ancho 176, alto 114 + 18 × 줄 수 (18 por cada fila), casillas de 18×18 a partir de (7 + 18c, 17 + 18r)
  • Una tabla con el número de slot y las coordenadas del rectángulo (x, y, w, h) de cada botón
  • "Dibuja primero la cuadrícula con exactitud usando Python (PIL) y pon encima solo la textura y la decoración"
  • El interior de la ventana, totalmente opaco (para que no se transparente la ventana gris de vanilla)
  • Nada de texto en las imágenes: los nombres de los botones van como tooltip en el juego
  • Prohibido todo lo que parezca una capa, y prohibido imitar el estilo de juegos o marcas reales
  • El resultado, un solo zip: las piezas del paquete de recursos + vistas previas + validation.json + un README en coreano

Si la IA de imágenes dibuja la cuadrícula "a ojo", todo se arruina. Lo que más funcionó fue separar: la cuadrícula con código, el dibujo con IA.

Vista previa de la ventana de detalle de misión. A la izquierda, el texto grande de la misión; a la derecha, 3 líneas de objetivos con orbes de progreso; abajo, las casillas de recompensa y los botones de aceptar, seguir y abandonar


📌 Paso 2 - La revisión: lo que hace Claude al recibir el zip

  1. Abrir las imágenes de vista previa y mirarlas de verdad (sin fiarse solo del validation.json que escribió la IA)
  2. Medir el tamaño de las imágenes, la transparencia y la posición de las casillas
  3. Comprobar que las texturas a las que apunta cada JSON de modelo existen de verdad
  4. Sobrescribir los archivos que choquen con el paquete de recursos existente después de hacer una copia de seguridad
  5. Subir la versión del paquete de recursos, empaquetarlo en zip y publicarlo en el canal de paquetes de recursos de Discord

En este proceso salieron cinco fallos.


📌 Fallo 1 - Ruta de texturas: a un paso de la cuadrícula morada y negra

En el primer prompt puse la ruta de los íconos como textures/gui/quest/<id>.png. ChatGPT me preguntó de vuelta: "con esta ruta, el modelo de ítem no la puede leer".

Minecraft agrupa las imágenes que usan los modelos de ítem en el atlas de bloques e ítems, y por defecto solo incluye las carpetas textures/block/ y textures/item/. Si las pones en textures/gui/, no entran en el atlas y aparece la cuadrícula morada y negra.

JSON
{
  "parent": "minecraft:item/generated",
  "textures": { "layer0": "myserver:item/gui/quest/crest_main" }
}

→ La imagen va en assets/myserver/textures/item/gui/quest/crest_main.png. (También se puede cambiar la configuración del atlas, pero lo evité porque implica tocar el espacio de nombres minecraft.)


📌 Fallo 2 - Los nombres de los dos arcos, intercambiados

Recibí 6 imágenes del arco tensándose (2 arcos × 3 fases). En la vista previa se veían bien. Pero al compararlas píxel a píxel con las imágenes originales, algo no cuadraba.

  • Todas las imágenes que llegaron con el nombre t0 (arco del aventurero) eran en realidad del t1 (arco del juramento), y al revés también
  • La empuñadura estaba desplazada hasta 9 píxeles respecto al original → al tensar, el arco parecía saltar de la mano
  • Había puntitos como de polvo esparcidos alrededor del arco

Las imágenes de tensado que envió ChatGPT. En la primera fila, junto al original del arco del juramento, aparecen las imágenes de tensado del arco del aventurero: están intercambiadas

Así que Claude las corrigió directamente.

  1. Comparar con los originales y corregir los nombres
  2. Buscar el centro de la parte enrollada color turquesa de la empuñadura y alinearla con la posición original
  3. Borrar los grupitos sueltos de unos pocos píxeles

Después de corregirlo. En cada fila, junto al original, las 3 fases de tensado del mismo arco con la empuñadura alineada

Desde 1.21.4, el tensado del arco ya no se hace con los viejos overrides, sino con un archivo de definición de ítem. Este es el archivo que usé de verdad en 1.21.11.

JSON
{
  "model": {
    "type": "minecraft:condition",
    "property": "minecraft:using_item",
    "on_false": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a" },
    "on_true": {
      "type": "minecraft:range_dispatch",
      "property": "minecraft:use_duration",
      "scale": 0.05,
      "fallback": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_0" },
      "entries": [
        { "threshold": 0.65, "model": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_1" } },
        { "threshold": 0.9,  "model": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_2" } }
      ]
    }
  }
}

Vamos a desmenuzarlo 💡

  • assets/myserver/items/<id>.json : esta ubicación es la "definición de ítem" de 1.21.4+. El servidor solo le pone item_model = myserver:<id> al ítem.
  • using_item : si el arco se está tensando
  • use_duration + scale: 0.05 : tiempo tensado (ticks) × 0.05 → 1.0 a los 20 ticks (1 segundo). Es el mismo valor que el arco de vanilla.

📌 Fallo 3 - El fondo de la GUI no se ve

Puse los fondos del menú de Orbel y de la ventana de misiones, pero al abrirlos en el juego aparecía la ventana gris de vanilla sin fondo, y el título salía desplazado a la izquierda, fuera de la ventana.

El menú del ayudante con solo las casillas grises y sin fondo. Los íconos están en su sitio, pero el texto del título flota a la izquierda, fuera de la ventana

El fondo de una GUI personalizada se hace dibujando un único carácter enorme (un glifo de fuente) en el título de la ventana. Para que se viera nítido, metí el fondo a tamaño 2x (352×444), pero un glifo de ese tamaño no se dibujó en el juego. Parece deberse al límite de tamaño del atlas donde van los glifos de fuente (supongo que 256 píxeles). Y como no había fondo, solo se aplicaba el espaciado negativo que desplaza el título a la izquierda, así que el título acabó fuera de sitio.

→ Al cambiarlo por el fondo a 1x (176×222) que ChatGPT había incluido aparte, se resolvió al instante. Desde entonces dejé escrita la regla: los fondos de fuente, solo a 1x.


📌 Fallo 4 - Un arco que parpadea con ruido

Después de añadir el tensado, los laterales del arco se veían escalonados, con un parpadeo de ruido.

El arco sostenido en primera persona. En el lateral del cuerpo del arco se ven rayas horizontales muy juntas que dan sensación de ruido

Minecraft convierte en 3D los ítems 2D que llevas en la mano añadiendo grosor a cada píxel. Con una imagen de 16 píxeles no pasa nada, pero nuestro arco es de 128 píxeles, así que se generan cientos de líneas finas y caras laterales de píxeles, y eso se convierte en rayas.

  1. Primero lo cambié a una sola lámina de grosor 0 → las rayas desaparecieron, pero se veía demasiado fino y raro
  2. Así que, con un script, hice un modelo que agrupa solo el cuerpo del arco en una cuadrícula de 64 celdas con un grosor fino y deja la cuerda y la flecha como lámina (unas 70 a 100 cajas por modelo)

Vista previa del modelo mejorado. Solo el cuerpo del arco tiene un grosor fino y el diseño se ve igual que el original


📌 Fallo 5 - Un "arco 3D" reducido a 16 píxeles

También le encargué a ChatGPT un arco en 3D de verdad. El modelo que recibí había reducido la imagen de 128 píxeles a 16×16 y la había convertido en cajas de un solo color por celda. Desaparecieron el diseño, la parte enrollada y los adornos de plumas, y el cuerpo quedaba cortado, con puntos flotando. Además, el tensado usaba el método overrides, eliminado en 1.21.4, así que no funcionaba en 1.21.11.

Arriba: el modelo 3D recibido (vóxeles de 16×16) en 8 estados / Abajo: el modelo que uso ahora

→ No lo apliqué y lo guardé. Más adelante volveré a pedir el 3D de otra forma: modelando el cuerpo a mano en Blockbench, con curvas por tramos.


📌 Para cerrar

  • La cuadrícula con código, el dibujo con IA: en el prompt, coordenadas en lugar de sensaciones
  • En la revisión, mira tú mismo las vistas previas y compáralas píxel a píxel con los originales
  • Lo que hay que recordar en 1.21.11: las imágenes de ítems en textures/item/, los fondos de fuente a 1x y el tensado del arco con el archivo de definición en items/
  • Aunque lo haya hecho una IA, lo que hay que rechazar, se rechaza

El próximo episodio, el último de la serie, trata de la gestión en Discord. Veremos las etiquetas del foro de decisiones y las reglas de marcas de check, el foro de la lista de comandos y el canal de paquetes de recursos: canales que el bot gestiona solo. ¡No te lo pierdas! 🙌

Yo marqué la dirección de este artículo y lo redacté junto con Claude. Este servidor es un proyecto personal, no es contenido oficial de Minecraft y no tiene relación con Mojang ni Microsoft.

Serie · Parte 4 de 5

Crear un servidor de Minecraft con un equipo de IA

  1. #1¡1 líder de equipo IA + 15 miembros creando un plugin MMORPG! 🤖
  2. #2¡13 módulos en un solo plugin! La estructura del core y el incidente del 'daño 1000029' 🧩
  3. #3¡Números ×10, curva de experiencia de 12 horas y simulación de 6 clases! 📊
  4. #4¡Un flujo de paquetes de recursos donde ChatGPT dibuja y Claude revisa! 🎨Estás aquí
  5. #5¡Gestionar el equipo de desarrollo con un bot de Discord! Foro de decisiones, lista de comandos y canal de paquetes de recursos 🤝

Autor

Mojangcam

Un registro práctico de desarrollo e IT: código que escribo, servidores que mantengo y los errores que resuelvo por el camino.