- 4
- 1
Господа, хочу обратиться к вам за помощью. Я только начинаю свой путь в моддинге и хотелось бы чтобы вы отнеслись с пониманием.
Суть проблемы такова, создал GUI для рендеринга модели игрока(в целом это удалось), но есть одна проблема, я никак не могу убрать плашку с ником.
Сам ник то я вырезал, указываю что его даже попросту нету у tempplayer(временный игрок который является копией настоящего, но с нужными изменениями), но суть в том что почему то появляется пустая плашка с ником.

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

Есть идея переписать рендер так что бы был вырезан слой с ником, но мне кажется что это уже крайность и есть способ легче и лучше, по этому прошу поделится вашим опытом.
Мой код с рендером модели:
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();
}
