Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.16.5] Custom Durability Bar on Item


Recommended Posts

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.

Link to post
Share on other sites

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

 

Link to post
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.

Guest
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.



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.