Проблемы с рендером (рендерится 2 модели на 1-й сущности одновременно)

Версия Minecraft
1.12.2
API
Forge
429
41
108
Код рендера:
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import plus.camera.Camera;
import plus.player.PlayerSpship;
import plus.utls.MathUtls;
import plus.utls.Vec3d;

@Mixin(RenderPlayer.class)
public abstract class MixinRenderPlayer{
    private static final float scale = 1.85f;
    private float prevXZrot = 0;
    private float prevYrot = 0f;
    private boolean isActive = false;
    private int freezeTimes;


    @Inject(method = "doRender*", at = @At("HEAD"), cancellable = true)
    public void doRender(AbstractClientPlayer player, double x, double y,
                         double z, float entityYaw, float partialTicks, CallbackInfo ci) {
        //тут либо EntityOtherPlayerMP (другие игроки), либо EntityPlayerSP (контролируемый игрок)
        //то что тут бывают и те и другие - мне сказал отладчик
        boolean isSelfModel = player instanceof EntityPlayerSP;
        boolean isSpshipMode;
   
        if(isSelfModel){
            isSpshipMode = ((PlayerSpship)player).isSpshipMode();
        } else {
            isSpshipMode = ((PlayerSpship)player).getSpModelId()!=-1;
        }
        //переключает стандартный рендер, если выполнилось условие
        if(isSpshipMode) {
            //отключаю стандартный рендер, теперь модель игрока не отрисовывается
            ci.cancel();

            if(!isActive){
                isActive = true;
                freezeTimes = 0;
                prevXZrot = 180-player.rotationYaw;
            }
            //новая функция рендера
            renderSpship(player, partialTicks, isSelfModel);
        } else {
            if(isActive) {
                isActive = false;
            }
        }
    }

    private void renderSpship(AbstractClientPlayer player, float partialTicks, boolean isSelfModel){
        float rotXZ = calcXZrot(player, partialTicks);
        float rotY = calcYRot(player, partialTicks);

        if(isSelfModel){
            Camera.spshipRotY = rotY;
            Camera.spshipRotXZ = rotXZ;
        }

        GlStateManager.pushMatrix();
        GlStateManager.scale(scale, scale, scale);
        GlStateManager.translate(0, 0.5, 0);
        GlStateManager.rotate(rotXZ, 0, 1, 0);
        GlStateManager.rotate(rotY, 1, 0, 0);
   
        RenderItem renderer = Minecraft.getMinecraft().getRenderItem();
        //а вот эта хрень рендерится для всех, однако не в точке сущности
        //а в точке собственного игрока
        //и в итоге получается так, что когда 2 игрока рядом, то
        //собственный игрок рендерится с 2-мя моделями (блоками стекла),
        //повернутыми под разными углами, а другие игроки - вообще не рисуются
        //и так для каждого клиента

        renderer.renderItem(
                new ItemStack(Blocks.GLASS),
                player, ItemCameraTransforms.TransformType.FIXED, false
        );
        GlStateManager.popMatrix();
    }


    private float calcXZrot(AbstractClientPlayer player, float partialTicks){
        float result = .. //сложная алгебра расчета угла поворота
        prevXZrot = result;
        return result;
    }


    private float calcYRot(AbstractClientPlayer player, float partialTicks){
        float result = .. //другая сложная алгебра расчета угла
        prevYrot = result;
        return result;
    }
}
Подскажите где могла закрасться эта ошибка (пометил комментарием в коде), плиз
 
Последнее редактирование:
Сверху