Вторая рука

Версия Minecraft
1.7.10
51
0
Привет. Хотел сделать вторую руку котрая бы появлялась при каком-то условии, но запутался оконачательно. Столько информации, что сложно найти что-то конкретно. Если в общем я хочу сделать руку, котррая бы появлялась при снеге и дожде и закрывала бы левый угол экрана от первого лица. Что мне нужно для этого? Как это можно реализовать?
 
Решение
В EnityRenderer ищи что то связанное с рукой от первого лица. Копипасти рендер, и через эвент (не помню какой для 1.7, вроде еть какой то RenderHandEvent) рендери себе руку со смещением каким надо
5,018
47
783
Так толкнул же. Ты уже просишь за тебя код написать. Может и напишу, когда время будет
 
51
0
Так толкнул же. Ты уже просишь за тебя код написать. Может и напишу, когда время будет
Я не прошу тебя писать мне код. Если я бы просил, то так и написал бы. Я задал тебе ряд вопросов, которые я не понимаю. Ты их видел? Вот в чем моя проблема. + Я плохо знаю программироваие в целом и поэтому спрашиваю что мне не понятно.

Начал копировать методы из майна. Половина переменных не инициализированы а другая не работает без методов из класса рендера. Что, мне весь класс копировать или что? Я не понимаю... Вот что я спрашивал.

+ если я копирую все то мне методы нужно пихать в тело класса шины, а отрисовку руки в тело метода ивента?
 
5,018
47
783
+ если я копирую все то мне методы нужно пихать в тело класса шины, а отрисовку руки в тело метода ивента?
В классе где срабатывает эвент, может быть что угодно. Эвент сработает только там, где висит аннотация SubscribeEvent
Да, так как ты написал
 
51
0
В классе где срабатывает эвент, может быть что угодно. Эвент сработает только там, где висит аннотация SubscribeEvent
Да, так как ты написал


Я вернулся и принес тонну говно-кода, то ли я делаю иль нет?
Java:
public class YourFMLEventHandler {
    
    private static final Logger logger = LogManager.getLogger();
    private static final ResourceLocation locationRainPng = new ResourceLocation("textures/environment/rain.png");
    private static final ResourceLocation locationSnowPng = new ResourceLocation("textures/environment/snow.png");
    public static boolean anaglyphEnable;

    /** Anaglyph field (0=R, 1=GB) */
    public static int anaglyphField;

    /** A reference to the Minecraft object. */
    private Minecraft mc;
    private float farPlaneDistance;
    

    /** Entity renderer update count */
    private int rendererUpdateCount;

    /** Pointed entity */
    private Entity pointedEntity;
    private MouseFilter mouseFilterXAxis = new MouseFilter();
    private MouseFilter mouseFilterYAxis = new MouseFilter();

    /** Mouse filter dummy 1 */
    private MouseFilter mouseFilterDummy1 = new MouseFilter();

    /** Mouse filter dummy 2 */
    private MouseFilter mouseFilterDummy2 = new MouseFilter();

    /** Mouse filter dummy 3 */
    private MouseFilter mouseFilterDummy3 = new MouseFilter();

    /** Mouse filter dummy 4 */
    private MouseFilter mouseFilterDummy4 = new MouseFilter();
    private float thirdPersonDistance = 4.0F;

    /** Third person distance temp */
    private float thirdPersonDistanceTemp = 4.0F;
    private float debugCamYaw;
    private float prevDebugCamYaw;
    private float debugCamPitch;
    private float prevDebugCamPitch;

    /** Smooth cam yaw */
    private float smoothCamYaw;

    /** Smooth cam pitch */
    private float smoothCamPitch;

    /** Smooth cam filter X */
    private float smoothCamFilterX;

    /** Smooth cam filter Y */
    private float smoothCamFilterY;

    /** Smooth cam partial ticks */
    private float smoothCamPartialTicks;
    private float debugCamFOV;
    private float prevDebugCamFOV;
    private float camRoll;
    private float prevCamRoll;

    /**
     * The texture id of the blocklight/skylight texture used for lighting effects
     */
    //private final DynamicTexture lightmapTexture;

    /**
     * Colors computed in updateLightmap() and loaded into the lightmap emptyTexture
     */
  
    /** FOV modifier hand */
    private float fovModifierHand;

    /** FOV modifier hand prev */
    private float fovModifierHandPrev;

    /** FOV multiplier temp */
    private float fovMultiplierTemp;
    private float bossColorModifier;
    private float bossColorModifierPrev;

    /** Cloud fog mode */
    private boolean cloudFog;
    //private final IResourceManager resourceManager;

    public ShaderGroup theShaderGroup;
    private static final ResourceLocation[] shaderResourceLocations = new ResourceLocation[] {new ResourceLocation("shaders/post/notch.json"), new ResourceLocation("shaders/post/fxaa.json"), new ResourceLocation("shaders/post/art.json"), new ResourceLocation("shaders/post/bumpy.json"), new ResourceLocation("shaders/post/blobs2.json"), new ResourceLocation("shaders/post/pencil.json"), new ResourceLocation("shaders/post/color_convolve.json"), new ResourceLocation("shaders/post/deconverge.json"), new ResourceLocation("shaders/post/flip.json"), new ResourceLocation("shaders/post/invert.json"), new ResourceLocation("shaders/post/ntsc.json"), new ResourceLocation("shaders/post/outline.json"), new ResourceLocation("shaders/post/phosphor.json"), new ResourceLocation("shaders/post/scan_pincushion.json"), new ResourceLocation("shaders/post/sobel.json"), new ResourceLocation("shaders/post/bits.json"), new ResourceLocation("shaders/post/desaturate.json"), new ResourceLocation("shaders/post/green.json"), new ResourceLocation("shaders/post/blur.json"), new ResourceLocation("shaders/post/wobble.json"), new ResourceLocation("shaders/post/blobs.json"), new ResourceLocation("shaders/post/antialias.json")};
    public static final int shaderCount = shaderResourceLocations.length;
    private int shaderIndex;
    private double cameraZoom;
    private double cameraYaw;
    private double cameraPitch;

    /** Previous frame time in milliseconds */
    private long prevFrameTime;

    /** End time of last render (ns) */
    private long renderEndNanoTime;

    /**
     * Is set, updateCameraAndRender() calls updateLightmap(); set by updateTorchFlicker()
     */
    private boolean lightmapUpdateNeeded;

    /** Torch flicker X */
    float torchFlickerX;

    /** Torch flicker DX */
    float torchFlickerDX;

    /** Torch flicker Y */
    float torchFlickerY;

    /** Torch flicker DY */
    float torchFlickerDY;
    private Random random;

    /** Rain sound counter */
    private int rainSoundCounter;

    /** Rain X coords */
    float[] rainXCoords;

    /** Rain Y coords */
    float[] rainYCoords;

    /** Fog color buffer */
    FloatBuffer fogColorBuffer;

    /** red component of the fog color */
    float fogColorRed;

    /** green component of the fog color */
    float fogColorGreen;

    /** blue component of the fog color */
    float fogColorBlue;

    /** Fog color 2 */
    private float fogColor2;

    /** Fog color 1 */
    private float fogColor1;
    
    Minecraft p_i45076_1_;
    IResourceManager p_i45076_2_;

    /**
     * Debug view direction (0=OFF, 1=Front, 2=Right, 3=Back, 4=Left, 5=TiltLeft, 6=TiltRight)
     */
    public int debugViewDirection;
    private static final String __OBFID = "CL_00000947";
    //bicause i no need err
    private int p_78476_2_;
    private float p_78476_1_;
    
    private IResourceManager resourceManager;
    
    /**
     * Colors computed in updateLightmap() and loaded into the lightmap emptyTexture
     */
    private int[] lightmapColors;
    private ResourceLocation locationLightMap;
    
    public ItemRenderer itemRenderer;
    private MapItemRenderer theMapItemRenderer;
    
    /**
     * The texture id of the blocklight/skylight texture used for lighting effects
     */
    private DynamicTexture lightmapTexture;
    
    public void hzm(Minecraft p_i45076_1_, IResourceManager p_i45076_2_){
            
            this.shaderIndex = shaderCount;
            this.cameraZoom = 1.0D;
            this.prevFrameTime = Minecraft.getSystemTime();
            this.random = new Random();
            this.fogColorBuffer = GLAllocation.createDirectFloatBuffer(16);
            this.mc = p_i45076_1_;
            this.resourceManager = p_i45076_2_;
            this.theMapItemRenderer = new MapItemRenderer(p_i45076_1_.getTextureManager());
            this.itemRenderer = new ItemRenderer(p_i45076_1_);
            this.lightmapTexture = new DynamicTexture(16, 16);
            this.locationLightMap = p_i45076_1_.getTextureManager().getDynamicTextureLocation("lightMap", this.lightmapTexture);
            this.lightmapColors = this.lightmapTexture.getTextureData();
            this.theShaderGroup = null;
            
    }

    

    private float getFOVModifier(float p_78481_1_, boolean p_78481_2_)
    {
        if (this.debugViewDirection > 0)
        {
            return 90.0F;
        }
        else
        {
            EntityPlayer var3 = (EntityPlayer)this.mc.renderViewEntity;
            float var4 = 70.0F;

            if (p_78481_2_)
            {
                var4 = this.mc.gameSettings.fovSetting;
                var4 *= this.fovModifierHandPrev + (this.fovModifierHand - this.fovModifierHandPrev) * p_78481_1_;
            }

            if (var3.getHealth() <= 0.0F)
            {
                float var5 = (float)var3.deathTime + p_78481_1_;
                var4 /= (1.0F - 500.0F / (var5 + 500.0F)) * 2.0F + 1.0F;
            }

            Block var6 = ActiveRenderInfo.getBlockAtEntityViewpoint(this.mc.theWorld, var3, p_78481_1_);

            if (var6.getMaterial() == Material.water)
            {
                var4 = var4 * 60.0F / 70.0F;
            }

            return var4 + this.prevDebugCamFOV + (this.debugCamFOV - this.prevDebugCamFOV) * p_78481_1_;
        }
    }

    private void hurtCameraEffect(float p_78482_1_)
    {
        EntityLivingBase var2 = this.mc.renderViewEntity;
        float var3 = (float)var2.hurtTime - p_78482_1_;
        float var4;

        if (var2.getHealth() <= 0.0F)
        {
            var4 = (float)var2.deathTime + p_78482_1_;
            GL11.glRotatef(40.0F - 8000.0F / (var4 + 200.0F), 0.0F, 0.0F, 1.0F);
        }

        if (var3 >= 0.0F)
        {
            var3 /= (float)var2.maxHurtTime;
            var3 = MathHelper.sin(var3 * var3 * var3 * var3 * (float)Math.PI);
            var4 = var2.attackedAtYaw;
            GL11.glRotatef(-var4, 0.0F, 1.0F, 0.0F);
            GL11.glRotatef(-var3 * 14.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(var4, 0.0F, 1.0F, 0.0F);
        }
    }
    
    /**
     * Setups all the GL settings for view bobbing. Args: partialTickTime
     */
    private void setupViewBobbing(float p_78475_1_)
    {
        if (this.mc.renderViewEntity instanceof EntityPlayer)
        {
            EntityPlayer var2 = (EntityPlayer)this.mc.renderViewEntity;
            float var3 = var2.distanceWalkedModified - var2.prevDistanceWalkedModified;
            float var4 = -(var2.distanceWalkedModified + var3 * p_78475_1_);
            float var5 = var2.prevCameraYaw + (var2.cameraYaw - var2.prevCameraYaw) * p_78475_1_;
            float var6 = var2.prevCameraPitch + (var2.cameraPitch - var2.prevCameraPitch) * p_78475_1_;
            GL11.glTranslatef(MathHelper.sin(var4 * (float)Math.PI) * var5 * 0.5F, -Math.abs(MathHelper.cos(var4 * (float)Math.PI) * var5), 0.0F);
            GL11.glRotatef(MathHelper.sin(var4 * (float)Math.PI) * var5 * 3.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(Math.abs(MathHelper.cos(var4 * (float)Math.PI - 0.2F) * var5) * 5.0F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(var6, 1.0F, 0.0F, 0.0F);
        }
    }
    
    /**
     * Disable secondary texture unit used by lightmap
     */
    public void disableLightmap(double p_78483_1_)
    {
        OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
    }
    
    /**
     * Enable lightmap in secondary texture unit
     */
    public void enableLightmap(double p_78463_1_)
    {
        OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
        GL11.glMatrixMode(GL11.GL_TEXTURE);
        GL11.glLoadIdentity();
        float var3 = 0.00390625F;
        GL11.glScalef(var3, var3, var3);
        GL11.glTranslatef(8.0F, 8.0F, 8.0F);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        this.mc.getTextureManager().bindTexture(this.locationLightMap);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP);
        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP);
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
    }
    
    


    public MapItemRenderer getMapItemRenderer()
    {
        return this.theMapItemRenderer;
    }
    
    @SubscribeEvent
    private void ScndHnd(RenderHandEvent e) {
        if (this.debugViewDirection <= 0)
        {
            GL11.glMatrixMode(GL11.GL_PROJECTION);
            GL11.glLoadIdentity();
            float var3 = 0.07F;

            if (this.mc.gameSettings.anaglyph)
            {
                GL11.glTranslatef((float)(-(p_78476_2_ * 2 - 1)) * var3, 0.0F, 0.0F);
            }

            if (this.cameraZoom != 1.0D)
            {
                GL11.glTranslatef((float)this.cameraYaw, (float)(-this.cameraPitch), 0.0F);
                GL11.glScaled(this.cameraZoom, this.cameraZoom, 1.0D);
            }

            Project.gluPerspective(this.getFOVModifier(p_78476_1_, false), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F);

            if (this.mc.playerController.enableEverythingIsScrewedUpMode())
            {
                float var4 = 0.6666667F;
                GL11.glScalef(1.0F, var4, 1.0F);
            }

            GL11.glMatrixMode(GL11.GL_MODELVIEW);
            GL11.glLoadIdentity();

            if (this.mc.gameSettings.anaglyph)
            {
                GL11.glTranslatef((float)(p_78476_2_ * 2 - 1) * 0.1F, 0.0F, 0.0F);
            }

            GL11.glPushMatrix();
            this.hurtCameraEffect(p_78476_1_);

            if (this.mc.gameSettings.viewBobbing)
            {
                this.setupViewBobbing(p_78476_1_);
            }

            if (this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping() && !this.mc.gameSettings.hideGUI && !this.mc.playerController.enableEverythingIsScrewedUpMode())
            {
                this.enableLightmap((double)p_78476_1_);
                this.itemRenderer.renderItemInFirstPerson(p_78476_1_);
                this.disableLightmap((double)p_78476_1_);
            }

            GL11.glPopMatrix();

            if (this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping())
            {
                this.itemRenderer.renderOverlays(p_78476_1_);
                this.hurtCameraEffect(p_78476_1_);
            }

            if (this.mc.gameSettings.viewBobbing)
            {
                this.setupViewBobbing(p_78476_1_);
            }
        }
    }


    }
 
5,018
47
783
У меня аналогичная задача возникла. Правда на 1.12, там уже есть вторая рука, но она как вспомогательная.
Всмысле правильно или нет?)
Когда запускаешь, работает че нить?
 
243
28
202
Могли бы и в исходники Battlegear 2 заглянуть)

Вот, откопал старую версию своего рендера второй руки (1.7.10) на основе ванили и BG:
Подключать через RenderHandEvent.

Java:
public class OffHandRenderer {
    
    private Minecraft mc = Minecraft.getMinecraft();

    public OffHandRenderer(float partialTicks) {
                
        GL11.glEnable(GL11.GL_CULL_FACE);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glEnable(GL11.GL_ALPHA_TEST);
        
        GL11.glAlphaFunc(GL11.GL_GREATER, 0.5F);
        
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
        
        this.renderHands(partialTicks);
    }
    
    private void renderHands(float partialTicks) {
        
        EntityPlayer player = this.mc.thePlayer;
                
        EntityRenderer entityRenderer = this.mc.entityRenderer;
        
        float farPlaneDistance = (float)(this.mc.gameSettings.renderDistanceChunks * 16);
        
        if (entityRenderer.debugViewDirection <= 0) {           

            Project.gluPerspective(0.0F, (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, farPlaneDistance * 2.0F);

            if (this.mc.playerController.enableEverythingIsScrewedUpMode()) {
                
                float f2 = 0.6666667F;
                
                GL11.glScalef(1.0F, f2, 1.0F);
            }

            GL11.glMatrixMode(GL11.GL_MODELVIEW);
            
            GL11.glLoadIdentity();

            GL11.glPushMatrix();
            
            this.hurtCameraEffect(partialTicks);
            
            if (this.mc.gameSettings.viewBobbing) {
                
                this.setupViewBobbing(partialTicks);
            }
            
            if (this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping()) {
                
                entityRenderer.itemRenderer.renderOverlays(partialTicks);
                
                this.hurtCameraEffect(partialTicks);
            }

            if (this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping() && !this.mc.gameSettings.hideGUI && !this.mc.playerController.enableEverythingIsScrewedUpMode()) {
                
                entityRenderer.enableLightmap((double)partialTicks);           
                
                this.renderOffHand(partialTicks);
                
                entityRenderer.disableLightmap((double)partialTicks);
            }

            GL11.glPopMatrix();
        }
    }
    
    public void hurtCameraEffect(float partialTicks) {
        
        EntityLivingBase entitylivingbase = this.mc.renderViewEntity;
        
        float f1 = (float)entitylivingbase.hurtTime - partialTicks;
        float f2;

        if (entitylivingbase.getHealth() <= 0.0F) {
            
            f2 = (float)entitylivingbase.deathTime + partialTicks;
            
            GL11.glRotatef(40.0F - 8000.0F / (f2 + 200.0F), 0.0F, 0.0F, 1.0F);
        }

        if (f1 >= 0.0F) {
            
            f1 /= (float)entitylivingbase.maxHurtTime;
            f1 = MathHelper.sin(f1 * f1 * f1 * f1 * (float)Math.PI);
            f2 = entitylivingbase.attackedAtYaw;
            
            GL11.glRotatef(-f2, 0.0F, 1.0F, 0.0F);
            GL11.glRotatef(-f1 * 14.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(f2, 0.0F, 1.0F, 0.0F);
        }
    }
    
    public void setupViewBobbing(float partialTicks) {
        
        if (this.mc.renderViewEntity instanceof EntityPlayer) {
            
            EntityPlayer entityplayer = (EntityPlayer) this.mc.renderViewEntity;
            
            float f1 = entityplayer.distanceWalkedModified - entityplayer.prevDistanceWalkedModified;
            float f2 = - (entityplayer.distanceWalkedModified + f1 * partialTicks);
            float f3 = entityplayer.prevCameraYaw + (entityplayer.cameraYaw - entityplayer.prevCameraYaw) * partialTicks;
            float f4 = entityplayer.prevCameraPitch + (entityplayer.cameraPitch - entityplayer.prevCameraPitch) * partialTicks;
            
            GL11.glTranslatef(MathHelper.sin(f2 * (float)Math.PI) * f3 * 0.5F, - Math.abs(MathHelper.cos(f2 * (float)Math.PI) * f3), 0.0F);
            
            GL11.glRotatef(MathHelper.sin(f2 * (float)Math.PI) * f3 * 3.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(Math.abs(MathHelper.cos(f2 * (float)Math.PI - 0.2F) * f3) * 5.0F, 1.0F, 0.0F, 0.0F);

            GL11.glRotatef(f4, 1.0F, 0.0F, 0.0F);
        }
    }
    
    public void renderOffHand(float partialTicks) {
        
        EntityPlayer player = this.mc.thePlayer;
        EntityClientPlayerMP clientPlayerMP = (EntityClientPlayerMP) player;
        EntityPlayerSP playerSP = (EntityPlayerSP)clientPlayerMP;
                        
        float f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f13;
        
        f1 = 1.0F;
        f2 = clientPlayerMP.prevRotationPitch + (clientPlayerMP.rotationPitch - clientPlayerMP.prevRotationPitch) * partialTicks;
        
        GL11.glPushMatrix();
        
        GL11.glRotatef(f2, 1.0F, 0.0F, 0.0F);
        GL11.glRotatef(clientPlayerMP.prevRotationYaw + (clientPlayerMP.rotationYaw - clientPlayerMP.prevRotationYaw) * partialTicks, 0.0F, 1.0F, 0.0F);
        
        RenderHelper.enableStandardItemLighting();
        
        GL11.glPopMatrix();
        
        f3 = playerSP.prevRenderArmPitch + (playerSP.renderArmPitch - playerSP.prevRenderArmPitch) * partialTicks;
        f4 = playerSP.prevRenderArmYaw + (playerSP.renderArmYaw - playerSP.prevRenderArmYaw) * partialTicks;
        
        GL11.glRotatef((playerSP.rotationPitch - f3) * 0.1F, 1.0F, 0.0F, 0.0F);
        GL11.glRotatef((playerSP.rotationYaw - f4) * 0.1F, 0.0F, 1.0F, 0.0F);
        
        int i = mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), 0);
        int j = i % 65536;
        int k = i / 65536;
        
        OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j / 1.0F, k / 1.0F);
        
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);       
        
        if (!clientPlayerMP.isInvisible()) {
                
            GL11.glPushMatrix();           
            
            f13 = 0.8F;
            
            GL11.glScalef(- 1.0F, 1.0F, 1.0F); 
            
            //
            
            f5 = 1.0F;//player.getSwingProgress(partialTicks);
            f6 = MathHelper.sin(f5 * 3.1415927F);
            f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * 3.1415927F);
            
            GL11.glTranslatef(- f7 * 0.3F, MathHelper.sin((float) (MathHelper.sqrt_float(f5) * Math.PI * 2.0F)) * 0.4F, - f6 * 0.4F);
            GL11.glTranslatef(0.8F * f13, - 0.75F * f13 - (1.0F - f1) * 0.6F, - 0.9F * f13);
            
            GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
            
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            
            f5 = 1.0F;//player.getSwingProgress(partialTicks);
            f6 = MathHelper.sin(f5 * f5 * 3.1415927F);
            f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * 3.1415927F);
            GL11.glRotatef(f7 * 70.0F, 0.0F, 1.0F, 0.0F);
            GL11.glRotatef(f6 * 20.0F, 0.0F, 0.0F, 1.0F);
            
            //
            
            this.mc.getTextureManager().bindTexture(clientPlayerMP.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);
            
            Render render = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer);
            RenderPlayer playerRenderer = (RenderPlayer) render;
            
            f10 = 1.0F;
            
            GL11.glScalef(f10, f10, f10);
            
            playerRenderer.renderFirstPersonArm(this.mc.thePlayer);       
            
            GL11.glPopMatrix();
        }

        GL11.glDisable(GL12.GL_RESCALE_NORMAL);
        
        RenderHelper.disableStandardItemLighting();
    }
}

2018-01-22_18.15.56.png
 
51
0
У меня аналогичная задача возникла. Правда на 1.12, там уже есть вторая рука, но она как вспомогательная.
Всмысле правильно или нет?)
Когда запускаешь, работает че нить?

Ничего вообще. Смотри, пробывал еще ивент делать другой PlayerTickEvent - хер там. Ошибок нет, но и ничего не срабатывает при условии ни в первом, ни во втормо случае =(
 
51
0
Могли бы и в исходники Battlegear 2 заглянуть)

Вот, откопал старую версию своего рендера второй руки (1.7.10) на основе ванили и BG:
Подключать через RenderHandEvent.

Java:
public class OffHandRenderer {
  
    private Minecraft mc = Minecraft.getMinecraft();

    public OffHandRenderer(float partialTicks) {
              
        GL11.glEnable(GL11.GL_CULL_FACE);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glEnable(GL11.GL_ALPHA_TEST);
      
        GL11.glAlphaFunc(GL11.GL_GREATER, 0.5F);
      
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
      
        this.renderHands(partialTicks);
    }
  
    private void renderHands(float partialTicks) {
      
        EntityPlayer player = this.mc.thePlayer;
              
        EntityRenderer entityRenderer = this.mc.entityRenderer;
      
        float farPlaneDistance = (float)(this.mc.gameSettings.renderDistanceChunks * 16);
      
        if (entityRenderer.debugViewDirection <= 0) {         

            Project.gluPerspective(0.0F, (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, farPlaneDistance * 2.0F);

            if (this.mc.playerController.enableEverythingIsScrewedUpMode()) {
              
                float f2 = 0.6666667F;
              
                GL11.glScalef(1.0F, f2, 1.0F);
            }

            GL11.glMatrixMode(GL11.GL_MODELVIEW);
          
            GL11.glLoadIdentity();

            GL11.glPushMatrix();
          
            this.hurtCameraEffect(partialTicks);
          
            if (this.mc.gameSettings.viewBobbing) {
              
                this.setupViewBobbing(partialTicks);
            }
          
            if (this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping()) {
              
                entityRenderer.itemRenderer.renderOverlays(partialTicks);
              
                this.hurtCameraEffect(partialTicks);
            }

            if (this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping() && !this.mc.gameSettings.hideGUI && !this.mc.playerController.enableEverythingIsScrewedUpMode()) {
              
                entityRenderer.enableLightmap((double)partialTicks);         
              
                this.renderOffHand(partialTicks);
              
                entityRenderer.disableLightmap((double)partialTicks);
            }

            GL11.glPopMatrix();
        }
    }
  
    public void hurtCameraEffect(float partialTicks) {
      
        EntityLivingBase entitylivingbase = this.mc.renderViewEntity;
      
        float f1 = (float)entitylivingbase.hurtTime - partialTicks;
        float f2;

        if (entitylivingbase.getHealth() <= 0.0F) {
          
            f2 = (float)entitylivingbase.deathTime + partialTicks;
          
            GL11.glRotatef(40.0F - 8000.0F / (f2 + 200.0F), 0.0F, 0.0F, 1.0F);
        }

        if (f1 >= 0.0F) {
          
            f1 /= (float)entitylivingbase.maxHurtTime;
            f1 = MathHelper.sin(f1 * f1 * f1 * f1 * (float)Math.PI);
            f2 = entitylivingbase.attackedAtYaw;
          
            GL11.glRotatef(-f2, 0.0F, 1.0F, 0.0F);
            GL11.glRotatef(-f1 * 14.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(f2, 0.0F, 1.0F, 0.0F);
        }
    }
  
    public void setupViewBobbing(float partialTicks) {
      
        if (this.mc.renderViewEntity instanceof EntityPlayer) {
          
            EntityPlayer entityplayer = (EntityPlayer) this.mc.renderViewEntity;
          
            float f1 = entityplayer.distanceWalkedModified - entityplayer.prevDistanceWalkedModified;
            float f2 = - (entityplayer.distanceWalkedModified + f1 * partialTicks);
            float f3 = entityplayer.prevCameraYaw + (entityplayer.cameraYaw - entityplayer.prevCameraYaw) * partialTicks;
            float f4 = entityplayer.prevCameraPitch + (entityplayer.cameraPitch - entityplayer.prevCameraPitch) * partialTicks;
          
            GL11.glTranslatef(MathHelper.sin(f2 * (float)Math.PI) * f3 * 0.5F, - Math.abs(MathHelper.cos(f2 * (float)Math.PI) * f3), 0.0F);
          
            GL11.glRotatef(MathHelper.sin(f2 * (float)Math.PI) * f3 * 3.0F, 0.0F, 0.0F, 1.0F);
            GL11.glRotatef(Math.abs(MathHelper.cos(f2 * (float)Math.PI - 0.2F) * f3) * 5.0F, 1.0F, 0.0F, 0.0F);

            GL11.glRotatef(f4, 1.0F, 0.0F, 0.0F);
        }
    }
  
    public void renderOffHand(float partialTicks) {
      
        EntityPlayer player = this.mc.thePlayer;
        EntityClientPlayerMP clientPlayerMP = (EntityClientPlayerMP) player;
        EntityPlayerSP playerSP = (EntityPlayerSP)clientPlayerMP;
                      
        float f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f13;
      
        f1 = 1.0F;
        f2 = clientPlayerMP.prevRotationPitch + (clientPlayerMP.rotationPitch - clientPlayerMP.prevRotationPitch) * partialTicks;
      
        GL11.glPushMatrix();
      
        GL11.glRotatef(f2, 1.0F, 0.0F, 0.0F);
        GL11.glRotatef(clientPlayerMP.prevRotationYaw + (clientPlayerMP.rotationYaw - clientPlayerMP.prevRotationYaw) * partialTicks, 0.0F, 1.0F, 0.0F);
      
        RenderHelper.enableStandardItemLighting();
      
        GL11.glPopMatrix();
      
        f3 = playerSP.prevRenderArmPitch + (playerSP.renderArmPitch - playerSP.prevRenderArmPitch) * partialTicks;
        f4 = playerSP.prevRenderArmYaw + (playerSP.renderArmYaw - playerSP.prevRenderArmYaw) * partialTicks;
      
        GL11.glRotatef((playerSP.rotationPitch - f3) * 0.1F, 1.0F, 0.0F, 0.0F);
        GL11.glRotatef((playerSP.rotationYaw - f4) * 0.1F, 0.0F, 1.0F, 0.0F);
      
        int i = mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), 0);
        int j = i % 65536;
        int k = i / 65536;
      
        OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j / 1.0F, k / 1.0F);
      
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);     
      
        if (!clientPlayerMP.isInvisible()) {
              
            GL11.glPushMatrix();         
          
            f13 = 0.8F;
          
            GL11.glScalef(- 1.0F, 1.0F, 1.0F);
          
            //
          
            f5 = 1.0F;//player.getSwingProgress(partialTicks);
            f6 = MathHelper.sin(f5 * 3.1415927F);
            f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * 3.1415927F);
          
            GL11.glTranslatef(- f7 * 0.3F, MathHelper.sin((float) (MathHelper.sqrt_float(f5) * Math.PI * 2.0F)) * 0.4F, - f6 * 0.4F);
            GL11.glTranslatef(0.8F * f13, - 0.75F * f13 - (1.0F - f1) * 0.6F, - 0.9F * f13);
          
            GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
          
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
          
            f5 = 1.0F;//player.getSwingProgress(partialTicks);
            f6 = MathHelper.sin(f5 * f5 * 3.1415927F);
            f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * 3.1415927F);
            GL11.glRotatef(f7 * 70.0F, 0.0F, 1.0F, 0.0F);
            GL11.glRotatef(f6 * 20.0F, 0.0F, 0.0F, 1.0F);
          
            //
          
            this.mc.getTextureManager().bindTexture(clientPlayerMP.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);
          
            Render render = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer);
            RenderPlayer playerRenderer = (RenderPlayer) render;
          
            f10 = 1.0F;
          
            GL11.glScalef(f10, f10, f10);
          
            playerRenderer.renderFirstPersonArm(this.mc.thePlayer);     
          
            GL11.glPopMatrix();
        }

        GL11.glDisable(GL12.GL_RESCALE_NORMAL);
      
        RenderHelper.disableStandardItemLighting();
    }
}

Я особо тупой, как и сказано в тегах, что значит подключать? Только не нужно готового кода, просто скажи как это, пожалуйста!
 
Последнее редактирование:
5,018
47
783
Всмысле вызвать методы рендера через RenderHandEvent как я тебе и говорил
 
5,018
47
783
51
0
Вайт верно советует. И да, необязательно создавать переменную и инициализировать. Можно просто new OffHandRenderer(); написать
P.S Тони, твой код руки переделать под 1.12 не получилось :)

Не робит так, как ты сказал 1516651558036.png
 
И вот еще: Чтобы твоя рука рендерилась только от первого лица добавь в начало эвента условие
Java:
if(Minecraft.getMinecraft().gameSettings.thirdPersonView==0) {
...
...
...
}
//0 - от первого лица, 1 - вид сзади, 2 - вид спереди
 
5,018
47
783
Сверху