Рендер рук с предметом [1.6.4]

Статус
В этой теме нельзя размещать новые ответы.
7
0
Никак не могу понять, как рендерить руки, как они рендерятся при прицеливании у лука (скриншот во вложении). Нужно, чтобы когда игрок держит мой предмет, таким образом рендерились руки.
Пробовал и из класса RenderPlayer вытаскивать переменные, и к ModelBiped обращался - всё вбестолку.
И кстати, кому не трудно, напишите проверку на то, что игрок держит этот самый предмет. Просто может я не так делаю проверку ?
(Ведь я так понимаю, проверка и рендер рук в основном классе предмета должны лежать ?)
Код предмета:

Код:
package com.f3rullo14.fgm3.common.myweapon;

import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

import com.f3rullo14.fgm3.common.items.EnumAloudAttachments;
import com.f3rullo14.fgm3.common.items.EnumFireMode;
import com.f3rullo14.fgm3.common.items.EnumKalibr;
import com.f3rullo14.fgm3.common.items.EnumMode;
import com.f3rullo14.fgm3.common.items.EnumNevipad;
import com.f3rullo14.fgm3.common.items.ItemGun;
import com.f3rullo14.fgm3.common.player.PlayerData;
import com.f3rullo14.fgm3.common.player.PlayerHandler;

public class WeaponAK47 extends ItemGun {

    public ModelBiped mb = new ModelBiped();
    public RenderPlayer rp = new RenderPlayer();
    public WeaponAK47(int par1, boolean primary, int ammo, int damage, int clipid ,String firesound, EnumFireMode[] fm,EnumAloudAttachments al, float fired, float reloadd, float recoil, float acc,int uammo, EnumNevipad[] nl, EnumKalibr[] kb, EnumMode[] md) {
        super(par1, primary, ammo, damage, clipid, firesound, fm, al, fired, reloadd, recoil, acc, uammo, nl, kb, md);
        
    }
    
    public void registerIcons(IconRegister tex)
    {
        this.itemIcon = tex.registerIcon("fgmassets:as1");
    }
        
    public void onUpdate(ItemStack par1ItemStack, World par2World, float par3, Entity par3Entity, int par4, boolean par5, EntityPlayer ep) {
        super.onUpdate(par1ItemStack, par2World, par3Entity, par4, par5);
        float f6 = 0.0F;
        float f7 = 0.0F;
        if(ep.inventory.getCurrentItem()==par1ItemStack){
            mb.aimedBow = true;
            rp.modelArmor.aimedBow = rp.modelArmorChestplate.aimedBow = rp.modelBipedMain.aimedBow = true; 
            mb.bipedRightArm.rotateAngleZ = 0.0F;
            mb.bipedLeftArm.rotateAngleZ = 0.0F;
            mb.bipedRightArm.rotateAngleY = -(0.1F - f6 * 0.6F) + mb.bipedHead.rotateAngleY;
            mb.bipedLeftArm.rotateAngleY = 0.1F - f6 * 0.6F + mb.bipedHead.rotateAngleY + 0.4F;
            mb.bipedRightArm.rotateAngleX = -((float)Math.PI / 2F) + mb.bipedHead.rotateAngleX;
            mb.bipedLeftArm.rotateAngleX = -((float)Math.PI / 2F) + mb.bipedHead.rotateAngleX;
            mb.bipedRightArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F;
            mb.bipedLeftArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F;
            mb.bipedRightArm.rotateAngleZ += MathHelper.cos(par3 * 0.09F) * 0.05F + 0.05F;
            mb.bipedLeftArm.rotateAngleZ -= MathHelper.cos(par3 * 0.09F) * 0.05F + 0.05F;
            mb.bipedRightArm.rotateAngleX += MathHelper.sin(par3 * 0.067F) * 0.05F;
            mb.bipedLeftArm.rotateAngleX -= MathHelper.sin(par3 * 0.067F) * 0.05F;
        }
    }
}


(Если что, переменные в RenderPlayer я сделал public, потому что Глуми сказал, что так можно).
Помогите, пожалуйста, с проблемой !
 
эвентом поднимай руки
 
Код:
@SubscribeEvent
public void onRenderPlayer(RenderPlayerEvent.Pre event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
{
    if (!(event.entityPlayer.inventory.getCurrentItem() == null) && event.entityPlayer.inventory.getCurrentItem().getItem() == Items.apple)
    {
        java.lang.reflect.Field f = event.renderer.getClass().getDeclaredField("modelBipedMain");
        f.setAccessible(true);
        Object val = f.get(event.renderer);
        ModelBiped modelBipedMain = (ModelBiped)val;
        modelBipedMain.aimedBow = true;
    }
}
 
Develance написал(а):
Код:
@SubscribeEvent
public void onRenderPlayer(RenderPlayerEvent.Pre event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
{
    if (!(event.entityPlayer.inventory.getCurrentItem() == null) && event.entityPlayer.inventory.getCurrentItem().getItem() == Items.apple)
    {
        java.lang.reflect.Field f = event.renderer.getClass().getDeclaredField("modelBipedMain");
        f.setAccessible(true);
        Object val = f.get(event.renderer);
        ModelBiped modelBipedMain = (ModelBiped)val;
        modelBipedMain.aimedBow = true;
    }
}

Всё, спасибо, код рабочий.

Тему можно закрывать.​
 
Как же лагать с рефлексией будет. Вы хотя бы кэшировали значение поля.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху