Comment on page
How to create an Animated Entity
This page will not cover how to code an Entity from the ground up, only how to add the required Azurelib code for the animations and model to work.
Instantiate a new
AnimatableInstanceCache
via AzureLibUtil.createInstanceCache(this)
at the top of your entity class and return it in getAnimatableInstanceCache
private final AnimatableInstanceCache cache = AzureLibUtil.createInstanceCache(this);
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return cache;
}
@Override
public void registerControllers(ControllerRegistrar controllers) {
controllers.add(new AnimationController<>(this, "controllerName", 0, event ->
{
return event.setAndContinue(
// If moving, play the walking animation
event.isMoving() ? RawAnimation.begin().thenLoop("walking"):
// If not moving, play the idle animation
RawAnimation.begin().thenLoop("idle"));
})
// Sets a Sound KeyFrame
.setSoundKeyframeHandler(event -> {
//Plays the step sound on the walk keyframes in an animation
if (event.getKeyframeData().getSound().matches("walk"))
if (level().isClientSide())
level().playLocalSound(
this.getX(), this.getY(), this.getZ(),
DoomSounds.PINKY_STEP,
SoundSource.HOSTILE, 0.25F, 1.0F, false);
}));
}
public class ExampleEntityModel extends GeoModel<ExampleEntity> {
// Models must be stored in assets/<modid>/geo with subfolders supported inside the geo folder
private static final ResourceLocation model = new ResourceLocation("yournamespace", "geo/yourmodel.geo.json");
// Textures must be stored in assets/<modid>/geo with subfolders supported inside the textures folder
private static final ResourceLocation texture = new ResourceLocation("yournamespace", "textures/<modeltype>/yourtexture.png");
// Animations must be stored in assets/<modid>/animations with subfolders supported inside the animations folder
private static final ResourceLocation animation = new ResourceLocation("yournamespace", "animations/youranimation.animation.json");
@Override
public ResourceLocation getModelResource(ExampleEntity object) {
return this.model;
}
@Override
public ResourceLocation getTextureResource(ExampleEntity object) {
return this.texture;
}
@Override
public ResourceLocation getAnimationResource(ExampleEntity object) {
return this.animation;
}
}
public class ExampleEntityRenderer extends GeoEntityRenderer<ExampleEntity> {
public ExampleEntityRenderer(EntityRendererProvider.Context context) {
super(context, new ExampleEntityModel());
}
}
You will then need to register this class as you would any other renderer, depending on your modloader methods.
Last modified 1mo ago