Posted October 29, 20195 yr Hello, I'm trying to add a static hanging entity to the game, just like an item frame or a painting (I'm using forge 1.12.2). However, the entity doesn't seem to respond to interactions (e.g. left click to destroy it). Also, it only renders if I look at it from a specific angle (I know that Minecraft doesn't render entities whose hitbox is out of the camera frustum, so the hitbox must be configured wrongly). This happens whether I try to /summon the entity or placing it using a spawn egg-like item I also added. This is how I create & register my entity. The following class which is nested into my main mod class registers the EntityEntry: Quote @EventBusSubscriber public static class Registry { @SubscribeEvent public static void onRegisterEntityEntries(RegistryEvent.Register<EntityEntry> event) { IForgeRegistry<EntityEntry> reg = event.getRegistry(); EntityEntry ent = EntityEntryBuilder.create().entity(EntityPanel.class).id(new ResourceLocation("entest", "panel"), 33).name("Panel").tracker(160, 2, false).build(); reg.register(ent); } } This method registers the entity renderer in my ClientProxy: Quote @Override public void preInit(FMLPreInitializationEvent event) { RenderingRegistry.registerEntityRenderingHandler(EntityPanel.class, RenderEntityPanel::new); } This is my EntityPanel class: Quote public class EntityPanel extends EntityHanging { public EntityPanel(World worldIn) { super(worldIn); } public EntityPanel(World worldIn, BlockPos pos, EnumFacing facing) { super(worldIn, pos); this.updateFacingWithBoundingBox(facing); } @Override public int getWidthPixels() { return 12; } @Override public int getHeightPixels() { return 12; } @Override public boolean onValidSurface() { return true; } } This is my RenderEntityPanel class which I copied temporarily from Minecraft's item frame: Quote public class RenderEntityPanel extends Render<EntityPanel> { private final ModelResourceLocation itemFrameModel = new ModelResourceLocation("item_frame", "normal"); public RenderEntityPanel(RenderManager renderManager) { super(renderManager); } @Override public void doRender(EntityPanel entity, double x, double y, double z, float entityYaw, float partialTicks) { GlStateManager.pushMatrix(); BlockPos blockpos = entity.getHangingPosition(); double d0 = (double)blockpos.getX() - entity.posX + x; double d1 = (double)blockpos.getY() - entity.posY + y; double d2 = (double)blockpos.getZ() - entity.posZ + z; GlStateManager.translate(d0 + 0.5D, d1 + 0.5D, d2 + 0.5D); GlStateManager.rotate(180.0F - entity.rotationYaw, 0.0F, 1.0F, 0.0F); this.renderManager.renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); ModelManager modelmanager = blockrendererdispatcher.getBlockModelShapes().getModelManager(); IBakedModel ibakedmodel = modelmanager.getModel(this.itemFrameModel); GlStateManager.pushMatrix(); GlStateManager.translate(-0.5F, -0.5F, -0.5F); if (this.renderOutlines) { GlStateManager.enableColorMaterial(); GlStateManager.enableOutlineMode(this.getTeamColor(entity)); } blockrendererdispatcher.getBlockModelRenderer().renderModelBrightnessColor(ibakedmodel, 1.0F, 1.0F, 1.0F, 1.0F); if (this.renderOutlines) { GlStateManager.disableOutlineMode(); GlStateManager.disableColorMaterial(); } GlStateManager.popMatrix(); GlStateManager.popMatrix(); } @Override protected ResourceLocation getEntityTexture(EntityPanel entity) { return null; } } Any ideas what I'm missing here? Help would be much appreciated. Thanks in advance, lord_goldi Edited October 29, 20195 yr by lord_goldi
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.