Docs / Ayuda & FAQ

Ayuda & FAQ

Problemas comunes y preguntas frecuentes sobre Animorph.

Solución de problemas

El plugin no carga

  1. Verifica que usas Paper o Spigot 1.21.1 con Java 21+.
  2. Revisa logs/latest.log buscando ClassNotFoundException o NoClassDefFoundError.
  3. En Spigot, asegúrate de tener PacketEvents 2.11.1 instalado.

El modelo no se ve en los clientes

  1. Comprueba que el mod cliente está instalado en todos los jugadores.
  2. Verifica que GeckoLib 4.8.2 para Fabric 1.21.1 está en mods/.
  3. Confirma que el archivo .geo.json existe con el mismo nombre que el YAML del modelo.
  4. Revisa el log del cliente en .minecraft/logs/latest.log.

Animaciones en T-pose

  1. Verifica que los nombres de hueso en la animación coinciden exactamente (case-sensitive) con los del .geo.json.
  2. Asegúrate de que animation_controllers contiene los controladores adecuados (simple_pose, idle, etc.).
  3. Ejecuta /animorph reload después de cada cambio.

La cámara en primera persona está desplazada

Ajusta model.offset en properties.first_person. Las unidades son píxeles GeckoLib (1 px = 1/16 bloque).

El emote no se reproduce

  1. Asegúrate de usar el formato namespace:animacion (ej: greet:wave).
  2. Verifica que el YAML tiene el campo animation apuntando al archivo correcto.
  3. Ejecuta /animorph reload.

Preguntas frecuentes

¿Funciona sin el mod cliente?

No. El mod cliente es necesario para renderizar los modelos. Los jugadores sin el mod verán el skin vanilla sin errores ni crashes.

¿Es compatible con Sodium?

Sí, Sodium es compatible. Si hay problemas visuales con alguna versión, reporta el bug indicando la versión exacta.

¿Qué formato de modelo acepta?

Solo GeckoLib Geometry exportado desde Blockbench. No uses "Java Block/Item" ni "Bedrock Entity".

¿Puedo tener varios modelos a la vez?

Un jugador tiene un modelo base activo. Puedes superponer múltiples layers (is_layer: true) sobre el modelo base.

¿Cómo sincronizo con Blockbench en tiempo real?

  1. Usa el comando /animorph socket connect <jugador> en el servidor.
  2. Conéctate desde Blockbench al WebSocket del cliente.
Advertencia
La sincronización en vivo es solo para desarrollo local. No la uses en producción.

¿Cómo se forman los IDs de emote?

Cada animación dentro del archivo .animation.json se registra como namespace:nombre, donde el namespace es el nombre del archivo YAML sin extensión. Por ejemplo, si greet.yml referencia un archivo con la animación "wave", el emote se invoca con /animorph emote greet:wave.

¿Puedo reproducir emotes en layers individuales?

Sí. Desde la API puedes usar api.playEmote(player, "dance:spin", Set.of("pompompurin")) para reproducir un emote solo en un layer específico. También puedes definir layer_emotes en el YAML del emote para que ciertos layers reproduzcan su propia animación automáticamente.

¿Puedo cambiar la configuración de primera persona por jugador?

Sí. Usa api.updateFirstPersonProperty(player, property) para sobrescribir la configuración del modelo en tiempo real para un jugador específico. Usa api.clearFirstPersonProperty(player) para restaurar los valores por defecto del modelo. Ver la documentación de la API.

¿Cómo escucho eventos de Animorph desde mi plugin/mod?

Animorph incluye un sistema de eventos. En el servidor usa api.getEventBus().register(...), en el cliente usa ClientMorphAPI.getEventBus().register(...). Los eventos de servidor son cancelables (pre-eventos), los de cliente son post-eventos. Ver la sección de eventos.