Jump to content

[1.16.5] Custom entity is invisible (render not being called)


theishiopian

Recommended Posts

I have been attempting to make a spear for my mod, and up until now everything had been going fairly well by using the trident as a guide. The problem is that I absolutely cannot get the entity to render. As in, at all. 
I am registering the renderer, and I've confirmed the event is being called for it.
 

@OnlyIn(Dist.CLIENT)
public void ClientSetup(FMLClientSetupEvent event)
{
  if(Config.flailEnabled.get())ModItems.RegisterFlailOverrides();

  MinecraftForge.EVENT_BUS.addListener(ClientEvents::OnClick);
  MinecraftForge.EVENT_BUS.addListener(ClientEvents::OnKeyPressed);

  RenderingRegistry.registerEntityRenderingHandler(ModEntities.SPEAR.get(), RenderSpear::new);
}

The other 3 lines here work perfectly.

Here is the renderer:

public class RenderSpear extends EntityRenderer<SpearEntity>
{
    public RenderSpear(EntityRendererManager manager)
    {
        super(manager);
    }

    @Override
    public void render(SpearEntity spearEntity, float yaw, float partialTicks, MatrixStack matrix, @NotNull IRenderTypeBuffer buffer, int light)
    {
        System.out.println("the funny");
        matrix.pushPose();
        //todo: translate/rotate/scale matrix
        Minecraft mc = Minecraft.getInstance();

        mc.getItemRenderer().render(spearEntity.spearItem, ItemCameraTransforms.TransformType.FIXED, false, matrix, buffer, light, OverlayTexture.NO_OVERLAY, mc.getItemRenderer().getModel(spearEntity.spearItem, spearEntity.level, null));
        matrix.popPose();
    }

    @Override
    public ResourceLocation getTextureLocation(@NotNull SpearEntity entity)
    {
        return null;
    }
}

The println at the top does not print, proving this method is not being called. 

The entity itself works fine, I can throw it and deal damage just like a trident. It just won't render.

Link to comment
Share on other sites

For those that might stumble upon this post with the same problem in the future: The solution in this case was to add this to the entity class:

@Override
public IPacket<?> getAddEntityPacket()
{
    return NetworkHooks.getEntitySpawningPacket(this);
}

A rule of thumb: If you custom entity is not a LivingEntity, then you need to override getAddEntityPacket(). This is due to the fact that vanilla handles non-living entity spawn packets in a hard coded way.

  • Thanks 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.