Рендер предмета от 1/3 лица

Версия Minecraft
1.7.10
28
0
Добрейшего времени суток уважаемые читатели и обыватели этого прекрасного и чудесного форума, возникла проблема с рендерингом предмета от 1 и 3 лица соответственно, на данный момент я имею дополнительный слот под вторую руку в инвентаре, на данный момент имеется задача рендерить объект помещаемый в данный слот в левой части экрана от 1 лица и в левой руке от 3 лица, к сожалению на данный момент когда я помещаю вещь в данный слот у меня пропадает текстура в инвентаре и не рендерится ничего в руке, с чем это связано я примерно понимаю, но как это исправить нет 😂
код вызова класса рендера с проверкой ячейки на пустоту
Java:
 @SubscribeEvent
      public void RenderLeftHand(RenderHandEvent event){
     EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
     GuiRender guiRender = new GuiRender(null, null);
     InventoryPantheon baubles = PlayerHandler.getPlayerBaubles(player);
                 if(baubles.getStackInSlot(3) !=null){
                     MinecraftForgeClient.registerItemRenderer(baubles.getStackInSlot(3).getItem(),  guiRender);   
                 }
     }
Код класса рендера
Java:
public class GuiRender implements IItemRenderer {
    TileEntitySpecialRenderer render;
    private TileEntity te;
    private RenderItem itemRenderer;

    public GuiRender(TileEntitySpecialRenderer render, TileEntity te) {
        this.render = render;
        this.te = te;
    }

    @Override
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
        return true;
    }

    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
        return true;
    }


    @Override
    public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
         if (itemRenderer == null) {
             itemRenderer = new RenderItem();
         }
        IIcon icon = item.getIconIndex();
        Tessellator tessellator = Tessellator.instance;
       if (type == ItemRenderType.EQUIPPED) {
             ItemRenderer.renderItemIn2D(tessellator,
                      icon.getMaxU(),
                      icon.getMinV(),
                      icon.getMinU(),
                      icon.getMaxV(),
                      icon.getIconWidth(),
                      icon.getIconHeight(), 16F/256F);
            GL11.glTranslatef(0.5F, 0.0F, 0.5F); // Делаем так, чтобы рука игрока держалась за центр блока
        }

        if (type == ItemRenderType.INVENTORY) {
                  GL11.glEnable(GL11.GL_ALPHA_TEST);
              //    GL11.glEnable(GL11.GL_BLEND);
              itemRenderer.renderIcon(0, 0, icon, 16, 16);
              GL11.glColor3f(1, 1, 1);
              ItemRenderer.renderItemIn2D(tessellator,
              icon.getMaxU(),
              icon.getMinV(),
              icon.getMinU(),
              icon.getMaxV(),
              icon.getIconWidth(),
              icon.getIconHeight(), 16F/256F);
              itemRenderer.renderIcon(0, 0, icon, 16, 16);
              GL11.glEnable(GL11.GL_LIGHTING);
              GL11.glDisable(GL11.GL_ALPHA_TEST);
              GL11.glDisable(GL11.GL_BLEND);
            GL11.glTranslatef(0.0F, 0.0F, 0.0F); // Чутка опустим предмет вниз, чтобы он нормально отображался в слоте инвентаря 
        }

        if (type == ItemRenderType.EQUIPPED_FIRST_PERSON) {
               ItemRenderer.renderItemIn2D(tessellator,
                       icon.getMaxU(),
                       icon.getMinV(),
                       icon.getMinU(),
                       icon.getMaxV(),
                       icon.getIconWidth(),
                       icon.getIconHeight(), 16F/256F);
            GL11.glTranslatef(5.0F, 0.35F, 0.5F); // Смещаем центр предмета в руке, чтобы он рисовался там же, где и все остальные блоки, когда их держит юзер
            GL11.glScalef(1.3F, 1.3F, 1.3F);
        }

    }
}
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Ну просил же по-братски, ну вникни ты в программирование, аааааа
Вот что ты делаешь? Ну вот объясни, зачем ты каждый кадр регаешь рендер предмета? Зачем ты вообще регаешь рендер предмета?
 
28
0
и в этом моде я покопался, и как раз из него код взял, мне необходимо отрендерить предмет с левой стороны, т.е. поместить предмет в слот и тупо отобразить его в левой руке от первого и от третьего лица, нет необходимости добавлять весь функционал руки,нашел вот этот кусочек кода, подскажите я в правильном направлении копаю?
Java:
 public static void renderItemInFirstPerson(float frame, Minecraft mc, ItemRenderer itemRenderer) {

        if(dummyEntity == null){
            dummyEntity = new EntityChicken(mc.theWorld);
        }
        if(dummyEntity.worldObj != mc.theWorld){
            dummyEntity = new EntityChicken(mc.theWorld);
        }

        IOffhandRender offhandRender = (IOffhandRender)itemRenderer;

        if (offhandRender.getItemToRender() != dummyStack) {
            float progress = offhandRender.getPrevEquippedProgress() + (offhandRender.getEquippedProgress() - offhandRender.getPrevEquippedProgress()) * frame;

            EntityClientPlayerMP player = mc.thePlayer;

            float rotation = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * frame;
            GL11.glPushMatrix();
            GL11.glRotatef(rotation, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * frame, 0.0F, 1.0F, 0.0F);
            RenderHelper.enableStandardItemLighting();
            GL11.glPopMatrix();
            float var6;
            float var7;

            var6 = player.prevRenderArmPitch + (player.renderArmPitch - player.prevRenderArmPitch) * frame;
            var7 = player.prevRenderArmYaw + (player.renderArmYaw - player.prevRenderArmYaw) * frame;
            GL11.glRotatef((player.rotationPitch - var6) * 0.1F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef((player.rotationYaw - var7) * 0.1F, 0.0F, 1.0F, 0.0F);

            int var18 = mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), 0);
            int var8 = var18 % 65536;
            int var9 = var18 / 65536;
            OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) var8 / 1.0F, (float) var9 / 1.0F);
            float var10;
            float var21;
            float var20;

            if (offhandRender.getItemToRender() != null) {
                applyColorFromItemStack(offhandRender.getItemToRender(), 0);
            } else {
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            }

            float var11;
            float var12;
            float var13;
            RenderPlayer var26 = (RenderPlayer) RenderManager.instance.getEntityRenderObject(mc.thePlayer);
            RenderPlayerEvent preRender = new RenderPlayerEvent.Pre(player, var26, frame);
            RenderPlayerEvent postRender = new RenderPlayerEvent.Post(player, var26, frame);
            var7 = 0.8F;
            if (offhandRender.getItemToRender() != null) {

                if(offhandRender.getItemToRender().getItem() instanceof IShield){
                    GL11.glPushMatrix();

                    float swingProgress =
                            (float)((IBattlePlayer)player).getSpecialActionTimer() / (
                                    float)((IShield)offhandRender.getItemToRender().getItem()).getBashTimer(
                                    offhandRender.getItemToRender());

                    GL11.glTranslatef(-0.7F * var7 + 0.25F*MathHelper.sin(swingProgress*(float)Math.PI),
                            -0.65F * var7 - (1.0F - progress) * 0.6F - 0.4F,
                            -0.9F * var7+0.1F - 0.25F*MathHelper.sin(swingProgress*(float)Math.PI));

                    if(((IBattlePlayer)player).isBlockingWithShield()){
                        GL11.glTranslatef(0.25F, 0.15F, 0);
                    }

                    GL11.glRotatef(25, 0, 0, 1);
                    GL11.glRotatef(325-35*MathHelper.sin(swingProgress*(float)Math.PI), 0, 1, 0);

                    if(!BattlegearUtils.RENDER_BUS.post(new PreRenderPlayerElement(preRender, true, PlayerElementType.ItemOffhand, offhandRender.getItemToRender())))
                        itemRenderer.renderItem(player, offhandRender.getItemToRender(), 0);
                    BattlegearUtils.RENDER_BUS.post(new PostRenderPlayerElement(postRender, true, PlayerElementType.ItemOffhand, offhandRender.getItemToRender()));
                    GL11.glPopMatrix();

                }else{
                    GL11.glPushMatrix();

                    if (player.getItemInUseCount() > 0) {
                        EnumAction action = offhandRender.getItemToRender().getItemUseAction();

                        if (action == EnumAction.eat || action == EnumAction.drink) {
                            var21 = (float) player.getItemInUseCount() - frame + 1.0F;
                            var10 = 1.0F - var21 / (float) offhandRender.getItemToRender().getMaxItemUseDuration();
                            var11 = 1.0F - var10;
                            var11 = var11 * var11 * var11;
                            var11 = var11 * var11 * var11;
                            var11 = var11 * var11 * var11;
                            var12 = 1.0F - var11;
                            GL11.glTranslatef(0.0F, MathHelper.abs(MathHelper.cos(var21 / 4.0F * (float) Math.PI) * 0.1F) * (float) ((double) var10 > 0.2D ? 1 : 0), 0.0F);
                            GL11.glTranslatef(var12 * 0.6F, -var12 * 0.5F, 0.0F);
                            GL11.glRotatef(var12 * 90.0F, 0.0F, 1.0F, 0.0F);
                            GL11.glRotatef(var12 * 10.0F, 1.0F, 0.0F, 0.0F);
                            GL11.glRotatef(var12 * 30.0F, 0.0F, 0.0F, 1.0F);
                        }
                    } else {
                        var20 = ((IBattlePlayer)player).getOffSwingProgress(frame);
                        var21 = MathHelper.sin(var20 * (float) Math.PI);
                        var10 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float) Math.PI);
                        //Flip the (x direction)
                        GL11.glTranslatef(var10 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(var20) * (float) Math.PI * 2.0F) * 0.2F, -var21 * 0.2F);
                    }
                    //Translate x in the opposite direction
                    GL11.glTranslatef(-0.7F * var7, -0.65F * var7 - (1.0F - progress) * 0.6F, -0.9F * var7);

                    //Rotate y in the opposite direction
                    GL11.glRotatef(-45.0F, 0.0F, 1.0F, 0.0F);

                    GL11.glEnable(GL12.GL_RESCALE_NORMAL);
                    var20 = ((IBattlePlayer)player).getOffSwingProgress(frame);


                    var21 = MathHelper.sin(var20 * var20 * (float) Math.PI);
                    var10 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float) Math.PI);

                    GL11.glRotatef(-var21 * 20.0F, 0.0F, 1.0F, 0.0F);
                    //Rotate z in the opposite direction
                    GL11.glRotatef(var10 * 20.0F, 0.0F, 0.0F, 1.0F);
                    GL11.glRotatef(-var10 * 80.0F, 1.0F, 0.0F, 0.0F);

                    //Rotate y back to original position + 45
                    GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);

                    var11 = 0.4F;
                    GL11.glScalef(var11, var11, var11);
                    float var14;
                    float var15;

                    if (player.getItemInUseCount() > 0) {
                        EnumAction action = offhandRender.getItemToRender().getItemUseAction();

                        if (action == EnumAction.block) {
                            GL11.glTranslatef(0.0F, 0.2F, 0.0F);
                            GL11.glRotatef(30.0F, 0.0F, 1.0F, 0.0F);
                            GL11.glRotatef(30.0F, 1.0F, 0.0F, 0.0F);
                            GL11.glRotatef(60.0F, 0.0F, 1.0F, 0.0F);
                        } else if (action == EnumAction.bow) {
                            GL11.glRotatef(-18.0F, 0.0F, 0.0F, 1.0F);
                            GL11.glRotatef(-12.0F, 0.0F, 1.0F, 0.0F);
                            GL11.glRotatef(-8.0F, 1.0F, 0.0F, 0.0F);
                            GL11.glTranslatef(-0.9F, 0.2F, 0.0F);
                            var13 = (float) offhandRender.getItemToRender().getMaxItemUseDuration() - ((float) player.getItemInUseCount() - frame + 1.0F);
                            var14 = var13 / 20.0F;
                            var14 = (var14 * var14 + var14 * 2.0F) / 3.0F;

                            if (var14 > 1.0F) {
                                var14 = 1.0F;
                            }

                            if (var14 > 0.1F) {
                                GL11.glTranslatef(0.0F, MathHelper.sin((var13 - 0.1F) * 1.3F) * 0.01F * (var14 - 0.1F), 0.0F);
                            }

                            GL11.glTranslatef(0.0F, 0.0F, var14 * 0.1F);
                            GL11.glRotatef(-335.0F, 0.0F, 0.0F, 1.0F);
                            GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F);
                            GL11.glTranslatef(0.0F, 0.5F, 0.0F);
                            var15 = 1.0F + var14 * 0.2F;
                            GL11.glScalef(1.0F, 1.0F, var15);
                            GL11.glTranslatef(0.0F, -0.5F, 0.0F);
                            GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
                            GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F);
                        }
                    }

                    if (offhandRender.getItemToRender().getItem().shouldRotateAroundWhenRendering()) {
                        GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
                    }
                    if(!BattlegearUtils.RENDER_BUS.post(new PreRenderPlayerElement(preRender, true, PlayerElementType.ItemOffhand, offhandRender.getItemToRender()))){

                        itemRenderer.renderItem(player, offhandRender.getItemToRender(), 0);
                        if (offhandRender.getItemToRender().getItem().requiresMultipleRenderPasses()) {
                            for (int x = 1; x < offhandRender.getItemToRender().getItem().getRenderPasses(offhandRender.getItemToRender().getItemDamage()); x++) {
                                applyColorFromItemStack(offhandRender.getItemToRender(), x);
                                itemRenderer.renderItem(player, offhandRender.getItemToRender(), x);
                            }
                        }
                    }
                    BattlegearUtils.RENDER_BUS.post(new PostRenderPlayerElement(postRender, true, PlayerElementType.ItemOffhand, offhandRender.getItemToRender()));
                    
                    GL11.glPopMatrix();
                }
            } else if (!player.isInvisible()) {
                GL11.glPushMatrix();

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

                var20 = ((IBattlePlayer)player).getOffSwingProgress(frame);
                var21 = MathHelper.sin(var20 * (float) Math.PI);
                var10 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float) Math.PI);
                GL11.glTranslatef(-var10 * 0.3F, MathHelper.sin(MathHelper.sqrt_float(var20) * (float) Math.PI * 2.0F) * 0.4F, -var21 * 0.4F);
                GL11.glTranslatef(var7 * var7, -0.75F * var7 - (1.0F - progress) * 0.6F, -0.9F * var7);

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

                GL11.glEnable(GL12.GL_RESCALE_NORMAL);
                var21 = MathHelper.sin(var20 * var20 * (float) Math.PI);
                GL11.glRotatef(var10 * 70.0F, 0.0F, 1.0F, 0.0F);
                GL11.glRotatef(var21 * 20.0F, 0.0F, 0.0F, 1.0F);

                mc.getTextureManager().bindTexture(player.getLocationSkin());
                GL11.glTranslatef(-1.0F, 3.6F, 3.5F);
                GL11.glRotatef(120.0F, 0.0F, 0.0F, 1.0F);
                GL11.glRotatef(200.0F, 1.0F, 0.0F, 0.0F);
                GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F);

                GL11.glScalef(1.0F, 1.0F, -1.0F);
                GL11.glTranslatef(5.6F, 0.0F, 0.0F);
                GL11.glScalef(1.0F, 1.0F, 1.0F);
                if(!BattlegearUtils.RENDER_BUS.post(new PreRenderPlayerElement(preRender, true, PlayerElementType.Offhand, null))) {
                    var26.renderFirstPersonArm(mc.thePlayer);
                }
                BattlegearUtils.RENDER_BUS.post(new PostRenderPlayerElement(postRender, true, PlayerElementType.Offhand, null));
                    
                GL11.glPopMatrix();
            }

            GL11.glDisable(GL12.GL_RESCALE_NORMAL);
            RenderHelper.disableStandardItemLighting();
        }
    }
 
Последнее редактирование:
Сверху