Jump to content

Update for forge! [ItemStack(Block) rendering bassed on NBT of the ItemStack]


Recommended Posts

Posted

I have a problem with the way minecraft renders blocks!

 

I need a way to give a block an texture from another block bassed on NBT.

I find one, but that only works if forge does implement the codes below here.

 

These add things.

  Quote

package net.minecraft.client.renderer; RenderBlocks.java

public void renderBlockAsItem(Block p_147800_1_, int p_147800_2_, float p_147800_3_, ItemStack p_147800_4_)

    {

    renderBlockAsItem(Block.getBlockFromItem(p_147800_1_.getBlockRenderingInInventory(p_147800_4_).getItem()), p_147800_1_.getBlockRenderingInInventory(p_147800_4_).getItemDamage(), p_147800_3_);

    }

 

  Quote

package net.minecraft.block; Block.java

public ItemStack getBlockRenderingInInventory(ItemStack itemstack)

    {

    return itemstack;

    }

 

These change things, Look at >//Changed< for changes.

  Quote

package net.minecraft.client.renderer; ItemRenderer.java

public void renderItem(EntityLivingBase par1EntityLivingBase, ItemStack par2ItemStack, int par3, ItemRenderType type)

    {

        GL11.glPushMatrix();

        TextureManager texturemanager = this.mc.getTextureManager();

        Item item = par2ItemStack.getItem();

        Block block = Block.getBlockFromItem(item);

 

        IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(par2ItemStack, type);

        if (customRenderer != null)

        {

            texturemanager.bindTexture(texturemanager.getResourceLocation(par2ItemStack.getItemSpriteNumber()));

            ForgeHooksClient.renderEquippedItem(type, customRenderer, renderBlocksIr, par1EntityLivingBase, par2ItemStack);

        }

        else if (par2ItemStack.getItemSpriteNumber() == 0 && item instanceof ItemBlock && RenderBlocks.renderItemIn3d(block.getRenderType()))

        {

            texturemanager.bindTexture(texturemanager.getResourceLocation(0));

 

            if (par2ItemStack != null && par2ItemStack.getItem() instanceof ItemCloth)

            {

                GL11.glEnable(GL11.GL_BLEND);

                GL11.glDepthMask(false);

                OpenGlHelper.glBlendFunc(770, 771, 1, 0);

                this.renderBlocksIr.renderBlockAsItem(block, par2ItemStack.getItemDamage(), 1.0F, par2ItemStack);//Changed

                GL11.glDepthMask(true);

                GL11.glDisable(GL11.GL_BLEND);

            }

            else

            {

                this.renderBlocksIr.renderBlockAsItem(block, par2ItemStack.getItemDamage(), 1.0F, par2ItemStack);//Changed

            }

        }

        else

        {

            IIcon iicon = par1EntityLivingBase.getItemIcon(par2ItemStack, par3);

 

            if (iicon == null)

            {

                GL11.glPopMatrix();

                return;

            }

 

            texturemanager.bindTexture(texturemanager.getResourceLocation(par2ItemStack.getItemSpriteNumber()));

            TextureUtil.func_147950_a(false, false);

            Tessellator tessellator = Tessellator.instance;

            float f = iicon.getMinU();

            float f1 = iicon.getMaxU();

            float f2 = iicon.getMinV();

            float f3 = iicon.getMaxV();

            float f4 = 0.0F;

            float f5 = 0.3F;

            GL11.glEnable(GL12.GL_RESCALE_NORMAL);

            GL11.glTranslatef(-f4, -f5, 0.0F);

            float f6 = 1.5F;

            GL11.glScalef(f6, f6, f6);

            GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);

            GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F);

            GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F);

            renderItemIn2D(tessellator, f1, f2, f, f3, iicon.getIconWidth(), iicon.getIconHeight(), 0.0625F);

 

            if (par2ItemStack.hasEffect(par3))

            {

                GL11.glDepthFunc(GL11.GL_EQUAL);

                GL11.glDisable(GL11.GL_LIGHTING);

                texturemanager.bindTexture(RES_ITEM_GLINT);

                GL11.glEnable(GL11.GL_BLEND);

                OpenGlHelper.glBlendFunc(768, 1, 1, 0);

                float f7 = 0.76F;

                GL11.glColor4f(0.5F * f7, 0.25F * f7, 0.8F * f7, 1.0F);

                GL11.glMatrixMode(GL11.GL_TEXTURE);

                GL11.glPushMatrix();

                float f8 = 0.125F;

                GL11.glScalef(f8, f8, f8);

                float f9 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F;

                GL11.glTranslatef(f9, 0.0F, 0.0F);

                GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F);

                renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F);

                GL11.glPopMatrix();

                GL11.glPushMatrix();

                GL11.glScalef(f8, f8, f8);

                f9 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F;

                GL11.glTranslatef(-f9, 0.0F, 0.0F);

                GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F);

                renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F);

                GL11.glPopMatrix();

                GL11.glMatrixMode(GL11.GL_MODELVIEW);

                GL11.glDisable(GL11.GL_BLEND);

                GL11.glEnable(GL11.GL_LIGHTING);

                GL11.glDepthFunc(GL11.GL_LEQUAL);

            }

 

            GL11.glDisable(GL12.GL_RESCALE_NORMAL);

            texturemanager.bindTexture(texturemanager.getResourceLocation(par2ItemStack.getItemSpriteNumber()));

            TextureUtil.func_147945_b();

        }

 

        GL11.glPopMatrix();

    }

  Quote

package net.minecraft.client.renderer.entity; RenderItem.java

public void doRender(EntityItem par1EntityItem, double par2, double par4, double par6, float par8, float par9)

    {

        ItemStack itemstack = par1EntityItem.getEntityItem();

 

        if (itemstack.getItem() != null)

        {

            this.bindEntityTexture(par1EntityItem);

            this.random.setSeed(187L);

            GL11.glPushMatrix();

            float f2 = shouldBob() ? MathHelper.sin(((float)par1EntityItem.age + par9) / 10.0F + par1EntityItem.hoverStart) * 0.1F + 0.1F : 0F;

            float f3 = (((float)par1EntityItem.age + par9) / 20.0F + par1EntityItem.hoverStart) * (180F / (float)Math.PI);

            byte b0 = 1;

 

            if (par1EntityItem.getEntityItem().stackSize > 1)

            {

                b0 = 2;

            }

 

            if (par1EntityItem.getEntityItem().stackSize > 5)

            {

                b0 = 3;

            }

 

            if (par1EntityItem.getEntityItem().stackSize > 20)

            {

                b0 = 4;

            }

 

            if (par1EntityItem.getEntityItem().stackSize > 40)

            {

                b0 = 5;

            }

 

            b0 = getMiniBlockCount(itemstack, b0);

 

            GL11.glTranslatef((float)par2, (float)par4 + f2, (float)par6);

            GL11.glEnable(GL12.GL_RESCALE_NORMAL);

            float f6;

            float f7;

            int k;

 

            if (ForgeHooksClient.renderEntityItem(par1EntityItem, itemstack, f2, f3, random, renderManager.renderEngine, field_147909_c, b0))

            {

                ;

            }

            else // Code Style break here to prevent the patch from editing this line

            if (itemstack.getItemSpriteNumber() == 0 && itemstack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(itemstack.getItem()).getRenderType()))

            {

                Block block = Block.getBlockFromItem(itemstack.getItem());

                GL11.glRotatef(f3, 0.0F, 1.0F, 0.0F);

 

                if (renderInFrame)

                {

                    GL11.glScalef(1.25F, 1.25F, 1.25F);

                    GL11.glTranslatef(0.0F, 0.05F, 0.0F);

                    GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);

                }

 

                float f9 = 0.25F;

                k = block.getRenderType();

 

                if (k == 1 || k == 19 || k == 12 || k == 2)

                {

                    f9 = 0.5F;

                }

 

                if (block.getRenderBlockPass() > 0)

                {

                    GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);

                    GL11.glEnable(GL11.GL_BLEND);

                    OpenGlHelper.glBlendFunc(770, 771, 1, 0);

                }

 

                GL11.glScalef(f9, f9, f9);

 

                for (int l = 0; l < b0; ++l)

                {

                    GL11.glPushMatrix();

 

                    if (l > 0)

                    {

                        f6 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / f9;

                        f7 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / f9;

                        float f8 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / f9;

                        GL11.glTranslatef(f6, f7, f8);

                    }

 

                    this.renderBlocksRi.renderBlockAsItem(block, itemstack.getItemDamage(), 1.0F, itemstack);//Changed

                    GL11.glPopMatrix();

                }

 

                if (block.getRenderBlockPass() > 0)

                {

                    GL11.glDisable(GL11.GL_BLEND);

                }

            }

            else

            {

                float f5;

 

                if (/*itemstack.getItemSpriteNumber() == 1 &&*/ itemstack.getItem().requiresMultipleRenderPasses())

                {

                    if (renderInFrame)

                    {

                        GL11.glScalef(0.5128205F, 0.5128205F, 0.5128205F);

                        GL11.glTranslatef(0.0F, -0.05F, 0.0F);

                    }

                    else

                    {

                        GL11.glScalef(0.5F, 0.5F, 0.5F);

                    }

 

                    for (int j = 0; j < itemstack.getItem().getRenderPasses(itemstack.getItemDamage()); ++j)

                    {

                        this.random.setSeed(187L);

                        IIcon iicon1 = itemstack.getItem().getIcon(itemstack, j);

 

                        if (this.renderWithColor)

                        {

                            k = itemstack.getItem().getColorFromItemStack(itemstack, j);

                            f5 = (float)(k >> 16 & 255) / 255.0F;

                            f6 = (float)(k >> 8 & 255) / 255.0F;

                            f7 = (float)(k & 255) / 255.0F;

                            GL11.glColor4f(f5, f6, f7, 1.0F);

                            this.renderDroppedItem(par1EntityItem, iicon1, b0, par9, f5, f6, f7, j);

                        }

                        else

                        {

                            this.renderDroppedItem(par1EntityItem, iicon1, b0, par9, 1.0F, 1.0F, 1.0F, j);

                        }

                    }

                }

                else

                {

                    if (itemstack != null && itemstack.getItem() instanceof ItemCloth)

                    {

                        GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);

                        GL11.glEnable(GL11.GL_BLEND);

                        OpenGlHelper.glBlendFunc(770, 771, 1, 0);

                    }

 

                    if (renderInFrame)

                    {

                        GL11.glScalef(0.5128205F, 0.5128205F, 0.5128205F);

                        GL11.glTranslatef(0.0F, -0.05F, 0.0F);

                    }

                    else

                    {

                        GL11.glScalef(0.5F, 0.5F, 0.5F);

                    }

 

                    IIcon iicon = itemstack.getIconIndex();

 

                    if (this.renderWithColor)

                    {

                        int i = itemstack.getItem().getColorFromItemStack(itemstack, 0);

                        float f4 = (float)(i >> 16 & 255) / 255.0F;

                        f5 = (float)(i >> 8 & 255) / 255.0F;

                        f6 = (float)(i & 255) / 255.0F;

                        this.renderDroppedItem(par1EntityItem, iicon, b0, par9, f4, f5, f6);

                    }

                    else

                    {

                        this.renderDroppedItem(par1EntityItem, iicon, b0, par9, 1.0F, 1.0F, 1.0F);

                    }

 

                    if (itemstack != null && itemstack.getItem() instanceof ItemCloth)

                    {

                        GL11.glDisable(GL11.GL_BLEND);

                    }

                }

            }

 

            GL11.glDisable(GL12.GL_RESCALE_NORMAL);

            GL11.glPopMatrix();

        }

    }

public void renderItemIntoGUI(FontRenderer par1FontRenderer, TextureManager par2TextureManager, ItemStack par3ItemStack, int par4, int par5, boolean renderEffect)

    {

        int k = par3ItemStack.getItemDamage();

        Object object = par3ItemStack.getIconIndex();

        GL11.glEnable(GL11.GL_BLEND);

        OpenGlHelper.glBlendFunc(770, 771, 1, 0);

        int l;

        float f;

        float f3;

        float f4;

 

        if (par3ItemStack.getItemSpriteNumber() == 0 && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(par3ItemStack.getItem()).getRenderType()))

        {

            par2TextureManager.bindTexture(TextureMap.locationBlocksTexture);

            Block block = Block.getBlockFromItem(par3ItemStack.getItem());

            GL11.glPushMatrix();

            GL11.glTranslatef((float)(par4 - 2), (float)(par5 + 3), -3.0F + this.zLevel);

            GL11.glScalef(10.0F, 10.0F, 10.0F);

            GL11.glTranslatef(1.0F, 0.5F, 1.0F);

            GL11.glScalef(1.0F, 1.0F, -1.0F);

            GL11.glRotatef(210.0F, 1.0F, 0.0F, 0.0F);

            GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);

            l = par3ItemStack.getItem().getColorFromItemStack(par3ItemStack, 0);

            f3 = (float)(l >> 16 & 255) / 255.0F;

            f4 = (float)(l >> 8 & 255) / 255.0F;

            f = (float)(l & 255) / 255.0F;

 

            if (this.renderWithColor)

            {

                GL11.glColor4f(f3, f4, f, 1.0F);

            }

 

            GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);

            this.renderBlocksRi.useInventoryTint = this.renderWithColor;

            this.renderBlocksRi.renderBlockAsItem(block, k, 1.0F, par3ItemStack);//Changed

            this.renderBlocksRi.useInventoryTint = true;

            GL11.glPopMatrix();

        }

        else if (par3ItemStack.getItem().requiresMultipleRenderPasses())

        {

            GL11.glDisable(GL11.GL_LIGHTING);

            GL11.glEnable(GL11.GL_ALPHA_TEST);

            par2TextureManager.bindTexture(TextureMap.locationItemsTexture);

            GL11.glDisable(GL11.GL_ALPHA_TEST);

            GL11.glDisable(GL11.GL_TEXTURE_2D);

            GL11.glEnable(GL11.GL_BLEND);

            OpenGlHelper.glBlendFunc(0, 0, 0, 0);

            GL11.glColorMask(false, false, false, true);

            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);

            Tessellator tessellator = Tessellator.instance;

            tessellator.startDrawingQuads();

            tessellator.setColorOpaque_I(-1);

            tessellator.addVertex((double)(par4 - 2), (double)(par5 + 18), (double)this.zLevel);

            tessellator.addVertex((double)(par4 + 18), (double)(par5 + 18), (double)this.zLevel);

            tessellator.addVertex((double)(par4 + 18), (double)(par5 - 2), (double)this.zLevel);

            tessellator.addVertex((double)(par4 - 2), (double)(par5 - 2), (double)this.zLevel);

            tessellator.draw();

            GL11.glColorMask(true, true, true, true);

            GL11.glEnable(GL11.GL_TEXTURE_2D);

            GL11.glEnable(GL11.GL_ALPHA_TEST);

 

            Item item = par3ItemStack.getItem();

            for (l = 0; l < item.getRenderPasses(k); ++l)

            {

                OpenGlHelper.glBlendFunc(770, 771, 1, 0);

                par2TextureManager.bindTexture(item.getSpriteNumber() == 0 ? TextureMap.locationBlocksTexture : TextureMap.locationItemsTexture);

                IIcon iicon = item.getIcon(par3ItemStack, l);

                int i1 = par3ItemStack.getItem().getColorFromItemStack(par3ItemStack, l);

                f = (float)(i1 >> 16 & 255) / 255.0F;

                float f1 = (float)(i1 >> 8 & 255) / 255.0F;

                float f2 = (float)(i1 & 255) / 255.0F;

 

                if (this.renderWithColor)

                {

                    GL11.glColor4f(f, f1, f2, 1.0F);

                }

 

                GL11.glDisable(GL11.GL_LIGHTING); //Forge: Make sure that render states are reset, ad renderEffect can derp them up.

                GL11.glEnable(GL11.GL_ALPHA_TEST);

 

                this.renderIcon(par4, par5, iicon, 16, 16);

 

                GL11.glDisable(GL11.GL_ALPHA_TEST);

                GL11.glEnable(GL11.GL_LIGHTING);

 

                if (renderEffect && par3ItemStack.hasEffect(l))

                {

                    renderEffect(par2TextureManager, par4, par5);

                }

            }

 

            GL11.glDisable(GL11.GL_ALPHA_TEST);

            GL11.glEnable(GL11.GL_LIGHTING);

        }

        else

        {

            GL11.glDisable(GL11.GL_LIGHTING);

            ResourceLocation resourcelocation = par2TextureManager.getResourceLocation(par3ItemStack.getItemSpriteNumber());

            par2TextureManager.bindTexture(resourcelocation);

 

            if (object == null)

            {

                object = ((TextureMap)Minecraft.getMinecraft().getTextureManager().getTexture(resourcelocation)).getAtlasSprite("missingno");

            }

 

            l = par3ItemStack.getItem().getColorFromItemStack(par3ItemStack, 0);

            f3 = (float)(l >> 16 & 255) / 255.0F;

            f4 = (float)(l >> 8 & 255) / 255.0F;

            f = (float)(l & 255) / 255.0F;

 

            if (this.renderWithColor)

            {

                GL11.glColor4f(f3, f4, f, 1.0F);

            }

 

            GL11.glDisable(GL11.GL_LIGHTING); //Forge: Make sure that render states are reset, ad renderEffect can derp them up.

            GL11.glEnable(GL11.GL_ALPHA_TEST);

 

            this.renderIcon(par4, par5, (IIcon)object, 16, 16);

 

            GL11.glDisable(GL11.GL_ALPHA_TEST);

            GL11.glEnable(GL11.GL_LIGHTING);

 

            if (renderEffect && par3ItemStack.hasEffect(0))

            {

                renderEffect(par2TextureManager, par4, par5);

            }

            GL11.glEnable(GL11.GL_LIGHTING);

        }

 

        GL11.glEnable(GL11.GL_CULL_FACE);

    }

 

I hope you can understand what it does :)

Posted
  On 5/7/2014 at 1:06 PM, diesieben07 said:

What the hell are you doing?

That is not a PullRequest...

Also your change is... pointless or I don't get what you want.

A Block does not have NBT. An ItemStack has NBT data and you can access that just fine in your ItemBlock to provide different Icons based on the NBT.

 

This would do it so mutch easyer to make it work!

 

But if it doesn't work I will try other things :)

Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I deleted delightful and all farmers delight addon (just in case) and still i have the error :'(, i need to check mod by mod?
    • I'm developing a Forge mod for Minecraft 1.16.5 to run on CatServer (version 1.16.5-1d8d6313, Forge 36.2.39). My mod needs to get the player's UUID from a ServerPlayerEntity object within a Forge ServerChatEvent handler. When I use serverPlayerEntity.getUUID(), my mod compiles fine, but I get a java.lang.NoSuchMethodError: net.minecraft.entity.player.ServerPlayerEntity.getUUID()Ljava/util/UUID; at runtime. I cannot use serverPlayerEntity.getUniqueID() as it causes a compile error (cannot find symbol). Is there a known issue with this on CatServer, or a recommended way for a Forge mod to reliably get a player's UUID from ServerPlayerEntity in this environment? My goal is to pass this UUID to the LuckPerms API (which is running as a Bukkit plugin and successfully connected via ServicesManager). erorr ChatMod: FMLServerStartedEvent received. Attempting to initialize LuckPerms connection... [22:45:20] [Server thread/INFO]: ⚙️ Початок ініціалізації LuckPerms API через Bukkit Services Manager... [22:45:20] [Server thread/INFO]: ✅ Bukkit ServicesManager успішно отримано. [22:45:20] [Server thread/INFO]: ✅ Реєстрацію сервісу LuckPerms знайдено. [22:45:20] [Server thread/INFO]: ✅ API LuckPerms успішно отримано від Bukkit plugin! [22:45:20] [Server thread/INFO]: Використовується реалізація: me.lucko.luckperms.common.api.LuckPermsApiProvider [22:45:20] [Server thread/INFO]: ✅ LuckPerms API схоже що успішно ініціалізовано через Bukkit Services Manager. [22:45:24] [User Authenticator #1/INFO]: UUID of player Hiklee is 92cd7721-2652-3867-896b-2ceba5b99306 [22:45:25] [Server thread/INFO]: Using new advancement loading for net.minecraft.advancements.PlayerAdvancements@24cb7a68 [22:45:26] [Server thread/INFO]: Hiklee[/127.0.0.1:41122] logged in with entity id 210 at (92.23203876864889, 95.6183020148442, 68.24087802017877) [22:45:28] [Async Chat Thread - #0/INFO]: ✅ Скасовано стандартне відправлення чату! [22:45:28] [Async Chat Thread - #0/ERROR]: Exception caught during firing event: net.minecraft.entity.player.ServerPlayerEntity.getUUID()Ljava/util/UUID; Index: 1 Listeners: 0: NORMAL 1: ASM: class com.example.chatmod.ChatEventHandler onPlayerChat(Lnet/minecraftforge/event/ServerChatEvent;)V java.lang.NoSuchMethodError: net.minecraft.entity.player.ServerPlayerEntity.getUUID()Ljava/util/UUID; at com.example.chatmod.ChatPacketHandler.getPlayerPrefix(ChatPacketHandler.java:46) at com.example.chatmod.ChatEventHandler.onPlayerChat(ChatEventHandler.java:32) at net.minecraftforge.eventbus.ASMEventHandler_1_ChatEventHandler_onPlayerChat_ServerChatEvent.invoke(.dynamic) at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85) at net.minecraftforge.eventbus.EventBus.post(EventBus.java:303) at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) at net.minecraftforge.common.ForgeHooks.onServerChatEvent(ForgeHooks.java:493) at net.minecraft.network.play.ServerPlayNetHandler.chat(ServerPlayNetHandler.java:1717) at net.minecraft.network.play.ServerPlayNetHandler.func_244548_c(ServerPlayNetHandler.java:1666) at net.minecraft.network.play.ServerPlayNetHandler.func_147354_a(ServerPlayNetHandler.java:1605) at net.minecraft.network.play.client.CChatMessagePacket.lambda$handle$0(CChatMessagePacket.java:34) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750
    • Thank you so much for your help, I'll try it as soon as I can. I have a genuine question because I'm not familiar with the matter: Can a recipe error cause something as serious as the AMD error?
    • When i try to launch my modpack, the instance crashes and this is sent to the logs: Time: 2025-05-27 23:07:18 Description: Rendering overlay Below is the full log: https://mclo.gs/jP5G2EH
    • Make a test without delightful
  • Topics

×
×
  • Create New...

Important Information

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