помогите с рендером итема у игрока в руках

Версия Minecraft
1.7.10
235
3
21
помогите пжл с рендером для итема в руке у entity, ибо совсем не знаю как работать с opengl
нужно сделать масштабирование текстуры, небольшое смещение и поворот
на 1 и 2 скриншоте, то что нужно, на 3 и 4 то что есть сейчас (в конструкторе стоит setFull3D())
1565186937388.png1565186989214.png

1565187195509.png1565187247931.png
 
Решение
"хотсвапом " что это?
Hotswap, переведи. Во время дебага если скомпилить проект, то среда применит изменения на запущенной апке

подскажешь метод в GL11 которым ее можно двигать в разные стороны?
Подскажу, glTranslated. А по хорошему надо прочитать какой-нить "OpenGL за 24 часа" или гуглить конкретные функции
235
3
21
там откуда я переношу дописан метод renderEquippedItems в RenderBiped.class (версия старая 1.4.5)
я сделал хук через хуклибу от gloomyfolken, заменил метод целиком, но он даже не вызывается, заменил другой в этом классе - тоже самое, ошибок при хуке нет

1565201808562.png

RenderBipedHook:
package ru.Pa4ok.mod.test;

import java.util.UUID;

import org.lwjgl.opengl.GL11;

import com.mojang.authlib.GameProfile;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.entity.RenderBiped;
import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.util.StringUtils;
import ru.Pa4ok.mod.entity.extended.ExtendedEntityPlayer;
import ru.Pa4ok.mod.util.hook.gloomyfolken.hooklib.asm.Hook;
import ru.Pa4ok.mod.util.hook.gloomyfolken.hooklib.asm.ReturnCondition;

public class RenderBipedHook
{
    @Hook(injectOnExit = true)
    public static void doRender(RenderBiped renderBiped, EntityLiving p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_)
    {
        System.out.println("mark2");
    }
    
    @Hook(createMethod = true, returnCondition = ReturnCondition.ALWAYS)
    public static void renderEquippedItems(RenderBiped renderBiped, EntityLiving entityLiving, float var1)
    {
        System.out.println("mark1");
        
        GL11.glColor3f(1.0F, 1.0F, 1.0F);
        //super.renderEquippedItems(entityLiving, var1);
        ItemStack itemstack = entityLiving.getHeldItem();
        ItemStack itemstack1 = entityLiving.func_130225_q(3);
        Item item;
        float f1;

        if (itemstack1 != null)
        {
            GL11.glPushMatrix();
            renderBiped.modelBipedMain.bipedHead.postRender(0.0625F);
            item = itemstack1.getItem();

            net.minecraftforge.client.IItemRenderer customRenderer = net.minecraftforge.client.MinecraftForgeClient.getItemRenderer(itemstack1, net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED);
            boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED, itemstack1, net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D));

            if (item instanceof ItemBlock)
            {
                if (is3D || RenderBlocks.renderItemIn3d(Block.getBlockFromItem(item).getRenderType()))
                {
                    f1 = 0.625F;
                    GL11.glTranslatef(0.0F, -0.25F, 0.0F);
                    GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
                    GL11.glScalef(f1, -f1, -f1);
                }

                renderBiped.renderManager.itemRenderer.renderItem(entityLiving, itemstack1, 0);
            }
            else if (item == Items.skull)
            {
                f1 = 1.0625F;
                GL11.glScalef(f1, -f1, -f1);
                GameProfile gameprofile = null;

                if (itemstack1.hasTagCompound())
                {
                    NBTTagCompound nbttagcompound = itemstack1.getTagCompound();

                    if (nbttagcompound.hasKey("SkullOwner", 10))
                    {
                        gameprofile = NBTUtil.func_152459_a(nbttagcompound.getCompoundTag("SkullOwner"));
                    }
                    else if (nbttagcompound.hasKey("SkullOwner", 8) && !StringUtils.isNullOrEmpty(nbttagcompound.getString("SkullOwner")))
                    {
                        gameprofile = new GameProfile((UUID)null, nbttagcompound.getString("SkullOwner"));
                    }
                }

                TileEntitySkullRenderer.field_147536_b.func_152674_a(-0.5F, 0.0F, -0.5F, 1, 180.0F, itemstack1.getItemDamage(), gameprofile);
            }

            GL11.glPopMatrix();
        }

        if (itemstack != null && itemstack.getItem() != null)
        {
            item = itemstack.getItem();
            GL11.glPushMatrix();

            if (renderBiped.mainModel.isChild)
            {
                f1 = 0.5F;
                GL11.glTranslatef(0.0F, 0.625F, 0.0F);
                GL11.glRotatef(-20.0F, -1.0F, 0.0F, 0.0F);
                GL11.glScalef(f1, f1, f1);
            }

            renderBiped.modelBipedMain.bipedRightArm.postRender(0.0625F);
            GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F);

            net.minecraftforge.client.IItemRenderer customRenderer = net.minecraftforge.client.MinecraftForgeClient.getItemRenderer(itemstack, net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED);
            boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED, itemstack, net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D));

            if (item instanceof ItemBlock && (is3D || RenderBlocks.renderItemIn3d(Block.getBlockFromItem(item).getRenderType())))
            {
                f1 = 0.5F;
                GL11.glTranslatef(0.0F, 0.1875F, -0.3125F);
                f1 *= 0.75F;
                GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F);
                GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
                GL11.glScalef(-f1, -f1, f1);
            }
            else if (item == Items.bow)
            {
                f1 = 0.625F;
                GL11.glTranslatef(0.0F, 0.125F, 0.3125F);
                GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
                GL11.glScalef(f1, -f1, f1);
                GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
                GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
            }
            //else if (ItemGun.oruzhiye(itemstack.getItem(), 1))
            else if(itemstack.getItem() instanceof ItemGun)
            {
                System.out.println("mark");
                /*if ((entityLiving.getClass().equals(EntityPlayer.class) || entityLiving.getClass().equals(EntityPlayerMP.class)))
                {
                    EntityPlayer player = (EntityPlayer)entityLiving;
                    ExtendedEntityPlayer props = ExtendedEntityPlayer.get(player);

                    if(props.reloading > 0)
                    {
                        f1 = 0.5F;
                        GL11.glTranslatef(0.0F, 0.42F, 0.03F);
                        GL11.glRotatef(-60.0F, 0.0F, 1.0F, 0.0F);
                        GL11.glScalef(f1, -f1, f1);
                        GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
                        GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
                    }
                }
                else
                {*/
                    f1 = 0.5F;
                    GL11.glTranslatef(0.0F, 0.35F, 0.08F);
                    GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
                    GL11.glScalef(f1, -f1, f1);
                    GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
                    GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
                //}
            }
            else if (item.isFull3D())
            {
                f1 = 0.625F;

                if (item.shouldRotateAroundWhenRendering())
                {
                    GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
                    GL11.glTranslatef(0.0F, -0.125F, 0.0F);
                }

                //
                //renderBiped.func_82422_c();
                GL11.glTranslatef(0.0F, 0.1875F, 0.0F);
                //

                GL11.glScalef(f1, -f1, f1);
                GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
                GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
            }
            else
            {
                f1 = 0.375F;
                GL11.glTranslatef(0.25F, 0.1875F, -0.1875F);
                GL11.glScalef(f1, f1, f1);
                GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F);
                GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F);
                GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F);
            }

            float f2;
            int i;
            float f5;

            if (itemstack.getItem().requiresMultipleRenderPasses())
            {
                for (i = 0; i < itemstack.getItem().getRenderPasses(itemstack.getItemDamage()); ++i)
                {
                    int j = itemstack.getItem().getColorFromItemStack(itemstack, i);
                    f5 = (float)(j >> 16 & 255) / 255.0F;
                    f2 = (float)(j >> 8 & 255) / 255.0F;
                    float f3 = (float)(j & 255) / 255.0F;
                    GL11.glColor4f(f5, f2, f3, 1.0F);
                    renderBiped.renderManager.itemRenderer.renderItem(entityLiving, itemstack, i);
                }
            }
            else
            {
                i = itemstack.getItem().getColorFromItemStack(itemstack, 0);
                float f4 = (float)(i >> 16 & 255) / 255.0F;
                f5 = (float)(i >> 8 & 255) / 255.0F;
                f2 = (float)(i & 255) / 255.0F;
                GL11.glColor4f(f4, f5, f2, 1.0F);
                renderBiped.renderManager.itemRenderer.renderItem(entityLiving, itemstack, 0);
            }

            GL11.glPopMatrix();
        }
    }
}
 
235
3
21
в общем получилось что-то выдавить методом тыка, помогите с дальнейшими поворотами и сдвигами, то как должно выглядеть в конце есть в шапке темы, я вообще просто не шарю как с opengl работать

1565278897237.png1565278924739.png

ItemGunRender:
package ru.Pa4ok.mod.test;

import net.minecraftforge.client.*;
import ru.Pa4ok.mod.core.ModConstants;
import net.minecraft.client.renderer.entity.*;
import net.minecraft.client.*;
import net.minecraft.client.renderer.texture.*;
import net.minecraft.item.*;
import net.minecraft.entity.*;
import org.lwjgl.opengl.*;
import net.minecraft.client.renderer.*;
import net.minecraft.util.*;

public class ItemGunRender implements IItemRenderer
{
    private Minecraft mc;

    public ItemGunRender()
    {
        this.mc = Minecraft.getMinecraft();
    }

    public boolean handleRenderType(final ItemStack item, final IItemRenderer.ItemRenderType type)
    {
        return type == IItemRenderer.ItemRenderType.EQUIPPED;
    }

    public boolean shouldUseRenderHelper(final IItemRenderer.ItemRenderType type, final ItemStack item, final IItemRenderer.ItemRendererHelper helper)
    {
        return false;
    }

    public void renderItem(final IItemRenderer.ItemRenderType type, final ItemStack item, final Object... data)
    {
        EntityLivingBase entity = (EntityLivingBase)data[1];
       
        GL11.glPopMatrix();
        GL11.glPushMatrix();
       
        final IIcon icon = entity.getItemIcon(item, 0);
        if (icon == null) return;
        Tessellator tessellator = Tessellator.instance;
        float f = icon.getMinU();
        float f2 = icon.getMaxU();
        float f3 = icon.getMinV();
        float f4 = icon.getMaxV();
       
        /*GL11.glTranslatef(0.0F, 0.35F, 0.08F);
        GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
        GL11.glScalef(0.5F, -0.5F, 0.5F);
        GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
        GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);*/
       
        GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
        ItemRenderer.renderItemIn2D(tessellator, f2, f3, f, f4, icon.getIconWidth(), icon.getIconHeight(), 0.08f);
       
        GL11.glPopMatrix();
        GL11.glPushMatrix();
    }
}
 
Последнее редактирование:
7,099
324
1,509
Чтобы настроить положение можно запустить в режиме дебага и хотсвапом без бперезапуска обновлять положение модели
В этом случае просто методом тыка пробуешь применить какую-то функцию, сдвиг, разворот и смотришь че получилось
~~~
Еще можно это автоматизировать и получится машинное обучение
 
7,099
324
1,509
"хотсвапом " что это?
Hotswap, переведи. Во время дебага если скомпилить проект, то среда применит изменения на запущенной апке

подскажешь метод в GL11 которым ее можно двигать в разные стороны?
Подскажу, glTranslated. А по хорошему надо прочитать какой-нить "OpenGL за 24 часа" или гуглить конкретные функции
 
Сверху