Official API Docs

caMorpher MorphAPI

API para controlar morphs, layers, texturas, animaciones y render en primera persona desde código del lado servidor.

🧬

Morphs

Transforma jugadores en modelos registrados por caMorpher.

🎞️

Animaciones

Ejecuta animaciones normales, en loop o personalizadas.

👁️

Primera persona

Controla brazos, layers, equipment y modos especiales de item.

Esta API usa ServerPlayerEntity, por lo que está pensada para ejecutarse del lado servidor.

Instalación

Para usar la API de caMorpher en tu mod, primero descarga el archivo caMorpher-1.0.4.jar y colócalo dentro de la carpeta libs de tu proyecto.

caMorpher API

caMorpher-1.0.4.jar

Archivo necesario para compilar tu mod usando la MorphAPI.

Descargar Mod

Estructura recomendada

Project Structure
tu-mod/
├── build.gradle
├── libs/
│   └── caMorpher-1.0-SNAPSHOT.jar
└── src/

Gradle Groovy

Si usas build.gradle, agrega esto en tus dependencias:

build.gradle
dependencies {
    modImplementation files('libs/caMorpher-1.0-SNAPSHOT.jar')
}

Gradle Kotlin DSL

Si usas build.gradle.kts, agrega esto:

build.gradle.kts
dependencies {
    modImplementation(files("libs/caMorpher-1.0-SNAPSHOT.jar"))
}

Importar la API

Después de agregar el .jar, ya puedes importar la API:

Java
import me.carbonazo.camorpher.api.MorphAPI;
import me.carbonazo.camorpher.api.FirstPersonRenderOptions;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity;
Importante: el archivo caMorpher-1.0-SNAPSHOT.jar debe estar dentro de la carpeta libs para que Gradle pueda encontrarlo.

Quick Start

Ejemplo rápido para aplicar morph, layer, textura, animación y brazos en primera persona:

Java
public static void applyCustomMorph(ServerPlayerEntity player) {
    boolean morphed = MorphAPI.morphPlayer(player, "pig");

    if (!morphed) {
        player.sendMessage(Text.literal("No se pudo aplicar el morph."));
        return;
    }

    MorphAPI.addLayer(player, "hat");
    MorphAPI.setLayerTexture(player, "hat", "red");

    MorphAPI.setFirstPersonArmsVisible(player, true);
    MorphAPI.setFirstPersonLayersVisible(player, true);
    MorphAPI.setFirstPersonEquipmentVisible(player, false);

    MorphAPI.playAnimation(player, "dance", true);

    player.sendMessage(Text.literal("Morph aplicado correctamente."));
}
Morphs

Control de transformaciones

boolean

morphPlayer

Morph

Transforma a un jugador en un modelo registrado por el sistema de morphs.

public static boolean morphPlayer(ServerPlayerEntity player, String modelName)
Parámetro Tipo Descripción
player ServerPlayerEntity Jugador que será transformado.
modelName String Nombre exacto del modelo detectado.
Java
boolean success = MorphAPI.morphPlayer(player, "pig");

if (success) {
    player.sendMessage(Text.literal("Ahora eres un pig."));
} else {
    player.sendMessage(Text.literal("Ese morph no existe."));
}
boolean

unmorphPlayer

Morph

Quita el morph actual del jugador y limpia sus layers.

public static boolean unmorphPlayer(ServerPlayerEntity player)
Java
boolean success = MorphAPI.unmorphPlayer(player);

if (!success) {
    player.sendMessage(Text.literal("El jugador no estaba morpheado."));
}
boolean / String

Estado del morph

Utility

Permite consultar si un jugador está morpheado y obtener su modelo actual.

public static boolean isMorphed(ServerPlayerEntity player) public static String getMorphModel(ServerPlayerEntity player)
Java
if (MorphAPI.isMorphed(player)) {
    String model = MorphAPI.getMorphModel(player);
    player.sendMessage(Text.literal("Morph actual: " + model));
}
Animaciones

Control de animaciones

boolean

playAnimation

Animation

Reproduce una animación en el jugador morpheado. Puede ejecutarse en loop.

public static boolean playAnimation(ServerPlayerEntity player, String animationName, boolean isLoop)
Java
boolean success = MorphAPI.playAnimation(player, "dance", true);

if (!success) {
    player.sendMessage(Text.literal("No se pudo reproducir la animación."));
}
void

stopAnimation

Animation

Detiene la animación forzada actual. Si estaba activo el modo especial de item, también lo desactiva automáticamente.

public static void stopAnimation(ServerPlayerEntity player)
Java
MorphAPI.stopAnimation(player);
boolean

setCustomAnimations

Animation

Define un archivo de animaciones personalizado para el morph actual.

public static boolean setCustomAnimations(ServerPlayerEntity player, String animationFile)
Java
boolean success = MorphAPI.setCustomAnimations(player, "custom_dance");
Primera persona

Render en primera persona

FirstPersonRenderOptions

First Person Options

First Person

caMorpher permite controlar cómo se renderiza el morph en primera persona. Puedes modificar brazos custom, layers, equipamiento, ambas manos y modos especiales.

public static FirstPersonRenderOptions getFirstPersonOptions(PlayerEntity player) public static boolean setFirstPersonOptions(ServerPlayerEntity player, FirstPersonRenderOptions options)
Java
FirstPersonRenderOptions options = MorphAPI.getFirstPersonOptions(player);

FirstPersonRenderOptions updated = options
    .withShowCustomArms(true)
    .withShowLayers(true)
    .withShowEquipment(false);

MorphAPI.setFirstPersonOptions(serverPlayer, updated);
boolean

Visibilidad en primera persona

First Person

Estos métodos permiten activar o desactivar partes visuales del morph en primera persona.

public static boolean setFirstPersonArmsVisible(ServerPlayerEntity player, boolean visible) public static boolean setFirstPersonLayersVisible(ServerPlayerEntity player, boolean visible) public static boolean setFirstPersonEquipmentVisible(ServerPlayerEntity player, boolean visible) public static boolean setFirstPersonBothHandsVisible(ServerPlayerEntity player, boolean visible) public static boolean setFirstPersonBothHandsAutoDetect(ServerPlayerEntity player, boolean enabled)
Java
MorphAPI.setFirstPersonArmsVisible(player, true);
MorphAPI.setFirstPersonLayersVisible(player, true);
MorphAPI.setFirstPersonEquipmentVisible(player, false);
MorphAPI.setFirstPersonBothHandsVisible(player, true);
MorphAPI.setFirstPersonBothHandsAutoDetect(player, true);
boolean / void

First Person Item Animation

Animation

Reproduce una animación especial en primera persona y activa automáticamente el modo specialItemMode. Al detenerla, la API desactiva ese modo.

public static boolean playFirstPersonItemAnimation(ServerPlayerEntity player, String animationName, boolean isLoop) public static void stopFirstPersonItemAnimation(ServerPlayerEntity player) public static boolean setFirstPersonSpecialItemMode(ServerPlayerEntity player, boolean enabled)
Java
boolean success = MorphAPI.playFirstPersonItemAnimation(player, "item_use", false);

if (!success) {
    player.sendMessage(Text.literal("No se pudo reproducir la animación de item."));
}

// Para detenerla:
MorphAPI.stopFirstPersonItemAnimation(player);
Layers

Capas y texturas

boolean

addLayer

Layer

Agrega una layer al morph actual del jugador.

public static boolean addLayer(ServerPlayerEntity player, String layerName)
Java
boolean success = MorphAPI.addLayer(player, "hat");
boolean

removeLayer

Layer

Remueve una layer específica.

public static boolean removeLayer(ServerPlayerEntity player, String layerName)
Java
MorphAPI.removeLayer(player, "hat");
boolean

setLayerTexture

Texture

Cambia la textura de una layer activa.

public static boolean setLayerTexture(ServerPlayerEntity player, String layerName, String textureName)
Java
boolean success = MorphAPI.setLayerTexture(player, "hat", "red");

if (!success) {
    player.sendMessage(Text.literal("Textura inválida."));
}
boolean

removeAllLayers

Layer

Elimina todas las layers activas del jugador morpheado.

public static boolean removeAllLayers(ServerPlayerEntity player)
Java
MorphAPI.removeAllLayers(player);

Ejemplos completos

Java
public static int morphCommand(ServerCommandSource source, String modelName) {
    ServerPlayerEntity player = source.getPlayer();

    boolean success = MorphAPI.morphPlayer(player, modelName);

    if (success) {
        source.sendFeedback(() -> Text.literal("Morph aplicado: " + modelName), false);
        return 1;
    }

    source.sendError(Text.literal("Ese morph no existe."));
    return 0;
}
Java
public static void applyRoundMorph(ServerPlayerEntity player) {
    if (!MorphAPI.morphPlayer(player, "wolf")) {
        return;
    }

    MorphAPI.addLayer(player, "team_badge");
    MorphAPI.setLayerTexture(player, "team_badge", "blue");
    MorphAPI.playAnimation(player, "idle_special", true);
}
Java
public static void resetMorph(ServerPlayerEntity player) {
    if (!MorphAPI.isMorphed(player)) {
        return;
    }

    MorphAPI.stopAnimation(player);
    MorphAPI.removeAllLayers(player);
    MorphAPI.setFirstPersonSpecialItemMode(player, false);
    MorphAPI.unmorphPlayer(player);
}
Java
public static void configureFirstPerson(ServerPlayerEntity player) {
    MorphAPI.setFirstPersonArmsVisible(player, true);
    MorphAPI.setFirstPersonLayersVisible(player, true);
    MorphAPI.setFirstPersonEquipmentVisible(player, false);

    MorphAPI.setFirstPersonBothHandsVisible(player, true);
    MorphAPI.setFirstPersonBothHandsAutoDetect(player, true);
}

Buenas prácticas

✅ Valida siempre el resultado booleano.
✅ Usa isMorphed(player) antes de layers o animaciones.
✅ Detén animaciones antes de quitar el morph.
✅ Usa nombres exactos de modelos, layers, texturas y animaciones.
✅ Usa setFirstPersonSpecialItemMode(player, false) al resetear modos especiales.
✅ Usa playFirstPersonItemAnimation cuando necesites animaciones de item en primera persona.

Resumen de métodos

Método Retorno Categoría Descripción
morphPlayer boolean Morph Transforma al jugador.
unmorphPlayer boolean Morph Quita el morph actual.
playAnimation boolean Animation Reproduce una animación.
playFirstPersonItemAnimation boolean First Person Reproduce una animación especial de item en primera persona.
stopAnimation void Animation Detiene la animación actual.
stopFirstPersonItemAnimation void First Person Detiene la animación especial de item.
addLayer boolean Layer Agrega una layer.
removeLayer boolean Layer Remueve una layer.
setLayerTexture boolean Texture Cambia textura de layer.
removeAllLayers boolean Layer Limpia todas las layers.
setCustomAnimations boolean Animation Asigna animaciones custom.
getFirstPersonOptions FirstPersonRenderOptions First Person Obtiene las opciones de render en primera persona.
setFirstPersonOptions boolean First Person Actualiza todas las opciones de primera persona.
setFirstPersonArmsVisible boolean First Person Activa o desactiva brazos custom.
setFirstPersonLayersVisible boolean First Person Activa o desactiva layers en primera persona.
setFirstPersonEquipmentVisible boolean First Person Activa o desactiva equipment.
setFirstPersonBothHandsVisible boolean First Person Activa o desactiva ambas manos.
setFirstPersonBothHandsAutoDetect boolean First Person Activa o desactiva auto-detect de ambas manos.
setFirstPersonSpecialItemMode boolean First Person Activa o desactiva el modo especial de item.
isMorphed boolean Utility Comprueba si está morpheado.
getMorphModel String Utility Obtiene el modelo actual.