Отмена рендеринга ника в GUI

Версия Minecraft
1.21.1
API
NeoForge
Господа, хочу обратиться к вам за помощью. Я только начинаю свой путь в моддинге и хотелось бы чтобы вы отнеслись с пониманием.

Суть проблемы такова, создал GUI для рендеринга модели игрока(в целом это удалось), но есть одна проблема, я никак не могу убрать плашку с ником.

Сам ник то я вырезал, указываю что его даже попросту нету у tempplayer(временный игрок который является копией настоящего, но с нужными изменениями), но суть в том что почему то появляется пустая плашка с ником.
1753355745141.png
Есть идея переписать рендер так что бы был вырезан слой с ником, но мне кажется что это уже крайность и есть способ легче и лучше, по этому прошу поделится вашим опытом.

Мой код с рендером модели:
Java:
    public static void renderPlayerInGui(GuiGraphics guiGraphics, int x, int y, int scale, float mouseX, float mouseY) {
        Minecraft mc = Minecraft.getInstance();
        AbstractClientPlayer player = mc.player;
        if (player == null || mc.level == null) return;

        EntityRenderDispatcher dispatcher = mc.getEntityRenderDispatcher();

        guiGraphics.pose().pushPose();

        // Центрирование и масштаб
        guiGraphics.pose().translate(x, y, 100);
        guiGraphics.pose().scale(scale, -scale, scale); // инверсия Y, чтобы не было вверх ногами

        PoseStack poseStack = guiGraphics.pose();

        // Создание временного игрока
        GameProfile profile = new GameProfile(mc.player.getUUID(), mc.player.getName().getString());
        AbstractClientPlayer tempPlayer = new AbstractClientPlayer(mc.level, profile) {
            @Override
            public boolean isSpectator() {
                return false;
            }

            @Override
            public Component getDisplayName() {
                return Component.empty();
            }

            @Override
            public boolean hasCustomName() {
                return false;
            }

            @Override
            public boolean isCustomNameVisible() {
                return false;
            }
        };
        tempPlayer.restoreFrom(mc.player);
        tempPlayer.setCustomNameVisible(false);


        // Поворот модели к камере через Quaternion
        // Поворот по Y — развернуть лицом к экрану + добавить боковой угол +45
        Quaternionf rotateY = Axis.YP.rotationDegrees(45.0F);

        // Поворот по X — наклон "сверху вниз", как будто камера смотрит немного сверху
        //Quaternionf rotateX = Axis.XP.rotationDegrees(pitch);

        // Применяем поворот
        poseStack.mulPose(rotateY);

        // Получение рендерера
        EntityRenderer<? super AbstractClientPlayer> renderer = dispatcher.getRenderer(tempPlayer);
        if (renderer instanceof PlayerRenderer playerRenderer) {


            dispatcher.setRenderShadow(false);

            PlayerModel<AbstractClientPlayer> model = playerRenderer.getModel();

            tempPlayer.attackAnim = mc.player.attackAnim;
            tempPlayer.hurtTime = mc.player.hurtTime;
            tempPlayer.deathTime = mc.player.deathTime;
            tempPlayer.tickCount = mc.player.tickCount;
            tempPlayer.setCustomName(Component.empty());

            float limbSwing = tempPlayer.walkAnimation.position();
            float limbSwingAmount = tempPlayer.walkAnimation.speed();
            float ageInTicks = mc.level.getGameTime();
            float headYaw = tempPlayer.yHeadRot;
            float headPitch = tempPlayer.getXRot();

            model.setupAnim(tempPlayer, limbSwing, limbSwingAmount, ageInTicks, headYaw, headPitch);

            // Рендер
            playerRenderer.render(tempPlayer, 0.0F, 0.0F, poseStack, guiGraphics.bufferSource(), 15728880);

            dispatcher.setRenderShadow(true);
        }

        guiGraphics.pose().popPose();
    }
 
Пересмотрел свой подход, сделал как ты посоветовал и всё заработало.

Благодарю!

Оставлю код если кому то тоже нужна будет помощь.


Java:
    public static void renderPlayerInGui(GuiGraphics guiGraphics, int x, int y, int scale, int mouseX, int mouseY) {
        Minecraft mc = Minecraft.getInstance();
        AbstractClientPlayer player = mc.player;
        if (player == null || mc.level == null) return;

        EntityRenderDispatcher dispatcher = mc.getEntityRenderDispatcher();
        PlayerRenderer renderer = (PlayerRenderer) dispatcher.getRenderer(player);
        PlayerModel<AbstractClientPlayer> model = renderer.getModel();

        guiGraphics.pose().pushPose();
        guiGraphics.pose().translate(x, y, 100);
        guiGraphics.pose().scale(scale, scale, scale);

        PoseStack poseStack = guiGraphics.pose();
        
        poseStack.mulPose(Axis.YP.rotationDegrees(-145)); // поворот всего тела

        // Привязка текстуры
        ResourceLocation skinTexture = player.getSkin().texture();
        VertexConsumer vertexConsumer = guiGraphics.bufferSource().getBuffer(RenderType.entityCutoutNoCull(skinTexture));

        // Вычисляем направление взгляда (Yaw/Pitch)
        float dx = mouseX - x;
        float dy = mouseY - y;

        float sensitivity = 60f; // выше = ниже чувствительность

        // Ограничение повортов головы на 20 градусов
        float headYaw = Mth.clamp(dx / sensitivity, -1.0f, 1.0f) * 20f;
        float headPitch = Mth.clamp(dy / sensitivity, -1.0f, 1.0f) * 20f;

        model.setupAnim(player, 0, 0, mc.level.getGameTime(), headYaw, headPitch);

        // Рендер
        model.renderToBuffer(
                poseStack,
                vertexConsumer,
                15728880,
                OverlayTexture.NO_OVERLAY
        );

        guiGraphics.pose().popPose();
    }
 
Назад
Сверху