I can spawn the entity (using the summon command inside the game), their hitbox shows when using F3 B. The problem is that it is not rendering. Am I missing something?
I have the texture file at 'src\main\resources\assets\stepladder\textures\entity\ladder.png'
Main Class
@Mod(LadderMod.MODID)
public class LadderMod {
public static final String MODID = "stepladder";
public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, MODID);
public static final RegistryObject<EntityType<LadderEntity>> LADDER = ENTITIES.register("ladder",
() -> EntityType.Builder.<LadderEntity>of(LadderEntity::new, MobCategory.MISC)
.build(String.valueOf(new ResourceLocation(MODID, "ladder"))));
public LadderMod() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
ENTITIES.register(modEventBus);
MinecraftForge.EVENT_BUS.register(this);
}
@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
public static class ClientModEvents {
@SubscribeEvent
public static void registerLayers(EntityRenderersEvent.RegisterLayerDefinitions event) {
event.registerLayerDefinition(LadderModel.LAYER_LOCATION, LadderModel::createBodyLayer);
}
@SubscribeEvent
public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerEntityRenderer(LadderMod.LADDER.get(), LadderRenderer::new);
}
}
}
Entity Class
public class LadderEntity extends Entity {
public LadderEntity(EntityType<LadderEntity> type, Level worldIn) {
super(type, worldIn);
}
@Override
protected void readAdditionalSaveData(CompoundTag pCompound) { }
@Override
protected void addAdditionalSaveData(CompoundTag pCompound) { }
@Override
protected void defineSynchedData() {}
@Override
public Packet<?> getAddEntityPacket() {
return NetworkHooks.getEntitySpawningPacket(this);
}
}
Model Class
public class LadderModel<Type extends LadderEntity> extends EntityModel<Type> {
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation(LadderMod.MODID, "ladder"), "main");
private final ModelPart head;
public LadderModel(ModelPart root) {
this.head = root.getChild("head");
}
public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
partdefinition.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, -4.0F));
partdefinition.addOrReplaceChild("step_r1", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -31.0F, -15.75F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("step_r2", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -39.0F, -13.75F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("step_r3", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -47.0F, -11.75F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("step_r4", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -55.0F, -9.5F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("step_r5", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -61.0F, -5.8125F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("step_r6", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -55.0F, -3.0F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("step_r7", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -47.0F, -1.0F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("step_r8", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -39.0F, 1.25F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("step_r9", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, 24.0F, 10.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, -31.0F, 3.25F, -1.5708F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("support_r1", CubeListBuilder.create().texOffs(0, 0).addBox(4.0F, -7.0F, -7.0F, 2.0F, 2.0F, 39.0F, new CubeDeformation(0.0F))
.texOffs(0, 0).addBox(-8.0F, -7.0F, -7.0F, 2.0F, 2.0F, 39.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.0F, -29.0F, -3.0F, -1.309F, 0.0F, 0.0F));
partdefinition.addOrReplaceChild("support_r2", CubeListBuilder.create().texOffs(0, 0).addBox(4.0F, -7.0F, -7.0F, 2.0F, 2.0F, 39.0F, new CubeDeformation(0.0F))
.texOffs(0, 0).addBox(16.0F, -7.0F, -7.0F, 2.0F, 2.0F, 39.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-11.0F, -5.0F, -3.0F, 1.309F, 0.0F, 0.0F));
return LayerDefinition.create(meshdefinition, 16, 16);
}
@Override
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
head.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha);
}
@Override
public void setupAnim(Type pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { }
}
Renderer Class
public class LadderRenderer<T extends LadderEntity> extends EntityRenderer<T> {
private static final ResourceLocation _texture = new ResourceLocation(LadderMod.MODID, "textures/entity/ladder.png");
protected final EntityModel<T> model;
public LadderRenderer(EntityRendererProvider.Context pContext) {
super(pContext);
this.model = new LadderModel<>(pContext.bakeLayer(LadderModel.LAYER_LOCATION));
}
@Override
public ResourceLocation getTextureLocation(LadderEntity pEntity) {
return _texture;
}
}