Posted April 7, 20214 yr Hi, I am trying to create a custom ItemStackTileEntityRenderer For an Item, to render a custom durability bar. I have looked through vanilla code and tried to implement this with a ItemStackTileEntityRenderer But so far have had 0 luck. If I try to use ItemRenderer.render() It crashes because it ends up endlessly looping. My custom method to draw the bar is also not working. CosmosEnergyItemItemStackRenderer.java Spoiler @Override public void renderByItem(ItemStack stackIn, ItemCameraTransforms.TransformType transformIn, MatrixStack matrixStack, IRenderTypeBuffer typeBuffer, int combinedLight, int combinedOverlay) { Item item = stackIn.getItem(); Minecraft mc = Minecraft.getInstance(); ItemRenderer renderer = mc.getItemRenderer(); if (item instanceof CosmosEnergyItem) { boolean flag = transformIn == ItemCameraTransforms.TransformType.GUI; matrixStack.pushPose(); if (flag) { //renderer.renderGuiItem(stackIn, combinedLight, combinedOverlay); IBakedModel model = renderer.getModel(stackIn, null, null); CosmosItemRenderer.renderGuiItemDecorations(matrixStack, mc.font, stackIn, combinedLight, combinedOverlay, null, renderer); //renderer.render(stackIn, transformIn, false, matrixStack, typeBuffer, combinedLight, combinedOverlay, model); } else { IBakedModel model = renderer.getModel(stackIn, null, null); //renderer.render(stackIn, transformIn, true, matrixStack, typeBuffer, combinedLight, combinedOverlay, model); boolean flag1; if (transformIn != ItemCameraTransforms.TransformType.GUI && !transformIn.firstPerson() && stackIn.getItem() instanceof BlockItem) { Block block = ((BlockItem) stackIn.getItem()).getBlock(); flag1 = !(block instanceof BreakableBlock) && !(block instanceof StainedGlassPaneBlock); } else { flag1 = true; } if (model.isLayered()) { ForgeHooksClient.drawItemLayered(renderer, model, stackIn, matrixStack, typeBuffer, combinedLight, combinedOverlay, flag1); } else { RenderType rendertype = RenderTypeLookup.getRenderType(stackIn, flag1); IVertexBuilder ivertexbuilder; if (stackIn.getItem() == Items.COMPASS && stackIn.hasFoil()) { matrixStack.pushPose(); MatrixStack.Entry matrixstack$entry = matrixStack.last(); if (transformIn == ItemCameraTransforms.TransformType.GUI) { matrixstack$entry.pose().multiply(0.5F); } else if (transformIn.firstPerson()) { matrixstack$entry.pose().multiply(0.75F); } if (flag1) { ivertexbuilder = ItemRenderer.getCompassFoilBufferDirect(typeBuffer, rendertype, matrixstack$entry); } else { ivertexbuilder = ItemRenderer.getCompassFoilBuffer(typeBuffer, rendertype, matrixstack$entry); } matrixStack.popPose(); } else if (flag1) { ivertexbuilder = ItemRenderer.getFoilBufferDirect(typeBuffer, rendertype, true, stackIn.hasFoil()); } else { ivertexbuilder = ItemRenderer.getFoilBuffer(typeBuffer, rendertype, true, stackIn.hasFoil()); } renderer.renderModelLists(model, stackIn, combinedLight, combinedOverlay, matrixStack, ivertexbuilder); } matrixStack.popPose(); } } } CosmosItemRenderer.java Spoiler @SuppressWarnings("deprecation") @OnlyIn(Dist.CLIENT) public static void renderGuiItemDecorations(MatrixStack matrixstack, FontRenderer fontRenderer, ItemStack stackIn, int p_180453_3_, int p_180453_4_, @Nullable String p_180453_5_, ItemRenderer renderer) { if (!stackIn.isEmpty()) { Item stackItem = stackIn.getItem(); if (stackItem instanceof CosmosEnergyItem) { CosmosEnergyItem energyItem = (CosmosEnergyItem) stackItem; if (energyItem.showEnergyBar(stackIn)) { RenderSystem.disableDepthTest(); RenderSystem.disableTexture(); RenderSystem.disableAlphaTest(); RenderSystem.disableBlend(); Tessellator tessellator = Tessellator.getInstance(); BufferBuilder bufferbuilder = tessellator.getBuilder(); double health = energyItem.getEnergyForDisplay(stackIn); int i = Math.round(13.0F - (float) health * 13.0F); int j = energyItem.getRGBEnergyForDisplay(stackIn); fillRect(bufferbuilder, p_180453_3_ + 2, p_180453_4_ + 11, 13, 2, 0, 0, 0, 255); fillRect(bufferbuilder, p_180453_3_ + 2, p_180453_4_ + 11, i, 1, j >> 16 & 255, j >> 8 & 255, j & 255, 255); RenderSystem.enableBlend(); RenderSystem.enableAlphaTest(); RenderSystem.enableTexture(); RenderSystem.enableDepthTest(); } } } } private static void fillRect(BufferBuilder p_181565_1_, int p_181565_2_, int p_181565_3_, int p_181565_4_, int p_181565_5_, int p_181565_6_, int p_181565_7_, int p_181565_8_, int p_181565_9_) { p_181565_1_.begin(7, DefaultVertexFormats.POSITION_COLOR); p_181565_1_.vertex((double) (p_181565_2_ + 0), (double) (p_181565_3_ + 0), 0.0D) .color(p_181565_6_, p_181565_7_, p_181565_8_, p_181565_9_).endVertex(); p_181565_1_.vertex((double) (p_181565_2_ + 0), (double) (p_181565_3_ + p_181565_5_), 0.0D) .color(p_181565_6_, p_181565_7_, p_181565_8_, p_181565_9_).endVertex(); p_181565_1_.vertex((double) (p_181565_2_ + p_181565_4_), (double) (p_181565_3_ + p_181565_5_), 0.0D) .color(p_181565_6_, p_181565_7_, p_181565_8_, p_181565_9_).endVertex(); p_181565_1_.vertex((double) (p_181565_2_ + p_181565_4_), (double) (p_181565_3_ + 0), 0.0D) .color(p_181565_6_, p_181565_7_, p_181565_8_, p_181565_9_).endVertex(); Tessellator.getInstance().end(); } I am really not sure how to handle this. The item does not render in any state currently, it is invisible. I had to use "parent": "builtin/entity" inside the Item.json to allow the ISTER to even work. I know this is probably an atrocious attempt, but I have been toying with this for 3 hours now and still nothing. Any help or advice is appreciated.
April 7, 20214 yr Author Okay so this was NOT the way to go about this. I have since discovered they sorta correct way to do this. Using: GuiContainerEvent.DrawForeground event I can overlay my bar correctly.
April 7, 20214 yr Author However, the bar does not appear when moving the item, or in the players hotbar when not in a gui.
April 8, 20214 yr why can't you use the vanilla durability bar? oh and btw, don't use @OnlyIn, and please post code using the code tool that the forum provides so that we can actually read the code without struggling
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.