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


For an Item, to render a custom durability bar.

I have looked through vanilla code and tried to implement this with a 


But so far have had 0 luck.

If I try to use


It crashes because it ends up endlessly looping.

My custom method to draw the bar is also not working.



    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;

            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.Entry matrixstack$entry = matrixStack.last();

                        if (transformIn == ItemCameraTransforms.TransformType.GUI) {
                        } else if (transformIn.firstPerson()) {

                        if (flag1) {
                            ivertexbuilder = ItemRenderer.getCompassFoilBufferDirect(typeBuffer, rendertype, matrixstack$entry);
                        } else {
                            ivertexbuilder = ItemRenderer.getCompassFoilBuffer(typeBuffer, rendertype, matrixstack$entry);

                    } 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);



    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)) {
                    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);

    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();

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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.

  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Hello @ChampionAsh5357, thank you for your reply! I do not use the newer version of netty directly. It's a transitive dependency of Discord4j: +--- com.discord4j:discord4j-core:3.1.3 | +--- io.projectreactor:reactor-bom:Dysprosium-SR15 | | ... | +--- com.discord4j:discord-json:1.5.6 | | ... | +--- com.discord4j:discord4j-rest:3.1.3 | | ... | | \--- com.discord4j:discord4j-common:3.1.3 | | +--- io.projectreactor:reactor-bom:Dysprosium-SR15 (*) | | +--- com.discord4j:discord-json:1.5.6 (*) | | +--- io.projectreactor.netty:reactor-netty:0.9.15.RELEASE | | | +--- io.netty:netty-codec-http:4.1.54.Final (BTW, Minecraft is using io.netty:netty-all:4.1.25.Final)   I thought those line will extend "compile" by "shadow" configuration, making "compile" inherit dependencies from "shaodw": https://github.com/tony84727/xp-tweak/blob/7f24df8f46f78840d145605db1d2cfdd988ef66b/build.gradle#L114-L117 But anyway, I tried. I added netty dependency to the buildscript and found out that ./gradlew runServer is working!🎉 (the PR) However, for intellij runs, still no luck. (I've run ./gradlew genIntellijRuns again after updating the buildscript). Starting server by IDE runs will still throw java.lang.NoSuchMethodError, indicating those runs are still using old version of netty.   I still wish I can launch server by IDE runs so I can use IDE's debug utilities.
    • now I don't know how to help you you may want to create a new topic asking for help with that   the only thing that comes to mind isthat if you're on intelliJ, check if those are actaully subdirectories and not a single directory with dots in the name (as that is a very common problem that happens when people are modding with intelliJ)
    • Yes! thank you, it works great now. One more thing though, I followed default minecraft code for the armor, but even though I have all my layers in assets/gemstones/textures/models/armor it still shows up on my character as the 'no-texture' texture.
    • Exception message: java.lang.IllegalArgumentException: Duplicate registration jade you're registering "jade" twice, I think that should be the only thing wrong oh also, your enum constants should be all uppercased (it won't cause any errors of course, but it's the standard)  
    • Sure, i played around with the code a bit and added a ".get()" to the end of the material, this removed all errors. Except its wrong because now I launch and the game crashes, yet eclipse gives me no errors. Heres my list: package djofox.gemstones.materials; import java.util.function.Supplier; import djofox.gemstones.init.ItemInit; import net.minecraft.item.IItemTier; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.LazyValue; public enum ToolMaterialList implements IItemTier { beryl(0, 131, 15.0f, 2.75f, 30, () -> { return Ingredient.of(ItemInit.beryl.get()); }), jade(2, 500, 7.0f, 2.25f, 23, () -> { return Ingredient.of(ItemInit.jade.get()); }), moissanite(2, 500, 7.0f, 2.25f, 23, () -> { return Ingredient.of(ItemInit.moissanite.get()); }), kunzite(0, 315, 12f, 0.5f, 20, () -> { return Ingredient.of(ItemInit.kunzite.get()); }), orpiment(2, 258, 10f, 0.5f, 20, () -> { return Ingredient.of(ItemInit.orpiment.get()); }), mercurySulfide(2, 1012, 5.5f, 2.0f, 14, () -> { return Ingredient.of(ItemInit.mercurySulfide.get()); }), blackDiamond(3, 2757, 8.0f, 3.0f, 2, () -> { return Ingredient.of(ItemInit.blackDiamond.get()); }), treatedCarbide(4, 2560, 10.0f, 5.0f, 2, () -> { return Ingredient.of(ItemInit.siliconCarbide.get()); }); private final int level; private final int uses; private final float speed; private final float damage; private final int enchantmentValue; private final LazyValue<Ingredient> repairIngredient; private ToolMaterialList(int p_i48458_3_, int p_i48458_4_, float p_i48458_5_, float p_i48458_6_, int p_i48458_7_, Supplier<Ingredient> p_i48458_8_) { this.level = p_i48458_3_; this.uses = p_i48458_4_; this.speed = p_i48458_5_; this.damage = p_i48458_6_; this.enchantmentValue = p_i48458_7_; this.repairIngredient = new LazyValue<>(p_i48458_8_); } public int getUses() { return this.uses; } public float getSpeed() { return this.speed; } public float getAttackDamageBonus() { return this.damage; } public int getLevel() { return this.level; } public int getEnchantmentValue() { return this.enchantmentValue; } public Ingredient getRepairIngredient() { return this.repairIngredient.get(); } } Heres my init class which causes the crash (from taking other stuff) And heres the error I get when I crash (I dont know if you need it but better safe than sorry)  
  • Topics

  • Who's Online (See full list)

  • Create New...

Important Information

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