Configuración de modelos
Cada modelo requiere un archivo .yml en plugins/Animorph/models/.
El .geo.json se detecta automáticamente por nombre de archivo.
Estructura YAML completa
display_name: Mi Modelo
texture: mi_modelo.png
animation: mi_modelo.animation.json
properties:
is_layer: false
animation_controllers:
idle:
transition_time: 0
simple_pose:
transition_time: 0
emote:
transition_time: 0
arm_right:
transition_time: 0
arm_left:
transition_time: 0
arms:
transition_time: 0
fp_animation_controllers:
fp_arm_right:
transition_time: 0
fp_arm_left:
transition_time: 0
fp_arms:
transition_time: 0
first_person:
show_equipment: true
model:
show: true
offset:
x: 0
y: 0
z: 0
custom_arms:
show: true
custom_render_items: true
both_hands: true
texts:
'{health}': '%player_health%'
'{name}': '%player_display_name%'
equipment:
head: player_equipment/player_head.geo.json
chest: player_equipment/player_chest.geo.json
legs: player_equipment/player_legs.geo.json
feet: player_equipment/player_feet.geo.json
cape: player_equipment/player_cape.geo.json
elytra: player_equipment/player_elytra.geo.json
layers:
mi_accesorio:
type: model
model: accesorio_model
show_first_person: true
default_enabled: false
hide_bones:
- head
texture_layers:
- overlay
overlay:
type: texture
texture: overlay.png
show_first_person: true
default_enabled: false
hide_bones: [] Referencia de campos
Nivel superior
| Campo | Tipo | Descripción |
|---|---|---|
display_name | string | Nombre visible del modelo. |
texture | string | Textura en textures/. Si se omite, usa el skin del jugador. |
animation | string | Archivo .animation.json en animations/. |
properties
| Campo | Tipo | Descripción |
|---|---|---|
is_layer | boolean | Si es true, el modelo funciona como layer (no reemplaza al jugador). |
animation_controllers | lista | Controladores de animación activos para el modelo. Ver Animaciones. |
fp_animation_controllers | lista | Controladores de animación para los brazos en primera persona. Si se omite, usa los controladores por defecto (fp_arm_right, fp_arm_left, fp_arms). |
Primera persona
Configura qué se renderiza en la vista de primera persona. Va bajo properties.first_person.
| Campo | Tipo | Descripción |
|---|---|---|
show_equipment | boolean | Muestra la armadura en primera persona. |
model.show | boolean | Muestra el cuerpo completo del modelo (torso, piernas...). |
model.offset.x/y/z | number | Desplazamiento del modelo respecto a la cámara. |
custom_arms.show | boolean | Usa los brazos del modelo en lugar de los vanilla. |
custom_arms.custom_render_items | boolean | Renderiza ítems a través de las manos del modelo. |
custom_arms.both_hands | boolean | Renderiza ambas manos (derecha e izquierda). |
properties:
first_person:
show_equipment: true
model:
show: true
offset:
x: 0
y: 0
z: 0
custom_arms:
show: true
custom_render_items: true
both_hands: true api.updateFirstPersonProperty(player, property).
Ver la sección de API para más detalles.
Cubos de texto
Animorph permite colocar texto en cualquier parte del modelo usando cubos de texto.
Cualquier cubo en Blockbench puede convertirse en un cubo de texto agregando la propiedad text_display
en su definición JSON (o usando el Plugin de Blockbench).
Propiedades del cubo de texto
Dentro del .geo.json, un cubo de texto se define así:
{
"origin": [0, 24, 0],
"size": [16, 9, 0.1],
"text_display": {
"content": "{name}",
"color": "#ffffff",
"background_color": "#000000",
"background": true,
"alignment": "CENTER",
"padding": 10
}
} | Campo | Tipo | Descripción |
|---|---|---|
content | string | Texto a mostrar. Puede ser texto fijo, un placeholder ({nombre}) o un placeholder de PlaceholderAPI (%player_health%). |
color | string | Color del texto. Soporta #RRGGBB, #AARRGGBB, rgb(r,g,b), rgba(r,g,b,a). |
background_color | string | Color de fondo del texto. Mismos formatos que color. |
background | boolean | Si se muestra el fondo del texto. |
alignment | string | Alineación: LEFT, CENTER, RIGHT. |
padding | int | Porcentaje de padding (0–100). |
Placeholders dinámicos
Los cubos de texto pueden usar placeholders que se actualizan en tiempo real.
Se registran en el YAML del modelo bajo properties.texts:
properties:
texts:
'{health}': '%player_health%'
'{name}': '%player_display_name%'
'{level}': '%player_level%'
La clave (entre llaves) es el ID del placeholder que coincide con content en el cubo.
El valor es el texto inicial: puede ser texto fijo o un placeholder de PlaceholderAPI (%...%).
Para actualizar el texto desde el servidor:
/animorph text Steve {name} "NuevoTexto"
/animorph text @a {level} 99 placeholder-check-interval en config.yml (en ticks).
Hueso de cámara
Animorph soporta un hueso de cámara que permite animar la perspectiva del jugador. Esto es útil para crear efectos cinematográficos en emotes o animaciones.
Configuración
Agrega un hueso llamado camera en el modelo desde Blockbench.
El nombre debe ser exactamente camera (sin importar mayúsculas/minúsculas).
camera no se renderiza visualmente: es un hueso de control.
Solo su posición y rotación afectan la cámara del jugador.
Comportamiento
- La posición del hueso desplaza la cámara respecto al jugador (en unidades GeckoLib: 1 px = 1/16 bloque).
- La rotación del hueso rota la cámara (pitch, yaw, roll en radianes).
- Los cambios se interpolan suavemente para evitar movimientos bruscos.
- Funciona en cualquier perspectiva (primera y tercera persona).
Uso con emotes
Al animar el hueso camera en un archivo .animation.json,
la cámara del jugador seguirá la animación mientras el emote esté activo.
Cuando el emote termina, la cámara vuelve a su posición normal.
Modelo .geo.json
└── root
├── body
│ ├── head
│ └── ...
└── camera ← hueso de cámara (no se renderiza) Equipamiento
Cada clave del bloque equipment apunta a un .geo.json relativo a models/. Se renderiza cuando el jugador equipa esa pieza de armadura.
equipment:
head: player_equipment/player_head.geo.json
chest: player_equipment/player_chest.geo.json
legs: player_equipment/player_legs.geo.json
feet: player_equipment/player_feet.geo.json
cape: player_equipment/player_cape.geo.json
elytra: player_equipment/player_elytra.geo.json models/.
Layers
Los layers se superponen sobre el modelo base sin reemplazarlo. Hay dos tipos:
- texture — aplica una imagen PNG sobre la geometría del modelo base. Soporta texturas animadas con
.mcmeta. - model — renderiza otro modelo completo (que tenga
is_layer: true) encima.
layers:
pompompurin:
type: model
model: pompompurin # ID del modelo con is_layer: true
show_first_person: true
default_enabled: false
hide_bones:
- head
- body
texture_layers:
- test_layer # IDs de texture layers que se aplican sobre este model layer
test_layer:
type: texture
texture: player_layer.png # ruta relativa a textures/
show_first_person: true
default_enabled: false
hide_bones:
- right_arm
- left_arm Referencia de campos de layer
| Campo | Tipo | Aplica a | Descripción |
|---|---|---|---|
type | string | ambos | model o texture. Obligatorio. |
model | string | model | ID del modelo registrado con is_layer: true. |
texture | string | texture | Ruta de la textura PNG relativa a textures/. |
show_first_person | boolean | ambos | Si se renderiza el layer en primera persona. Por defecto false. |
default_enabled | boolean | ambos | Si el layer está activo por defecto al aplicar el modelo. Por defecto false. |
hide_bones | lista | ambos | Lista de huesos del modelo base que se ocultan cuando este layer está activo. |
texture_layers | lista | model | IDs de layers de tipo texture que se aplican sobre este model layer (como overlays del layer). |
hide_bones es útil para reemplazar partes del modelo base con el layer.
Por ejemplo, un layer de casco puede ocultar el hueso head del modelo base
para que no se superponga.
Texturas animadas en layers
Los layers de tipo texture soportan texturas animadas usando archivos .mcmeta,
igual que las texturas de Minecraft. Coloca el archivo .mcmeta junto a la textura:
textures/
├── blade_axe_layer.png
└── blade_axe_layer.png.mcmeta {
"animation": {
"frametime": 2
}
} Modelo de layer (is_layer: true)
Para usar un modelo como layer, regístralo con is_layer: true:
display_name: Pompompurin
texture: pompompurin.png
animation: player.animation.json
properties:
is_layer: true Activar y desactivar layers
# Activar el layer "pompompurin" del modelo "player" para Steve
/animorph layer Steve player pompompurin true
# Desactivar el layer
/animorph layer Steve player pompompurin false Plugin de Blockbench
La documentación del plugin de Blockbench se movió a su propia sección. Ahí encontrás cómo instalarlo, las funcionalidades disponibles y cómo usar la sincronización en vivo.