From 6ae7dc5c9571a189f7e8e09e0eb4ef77389bb5f3 Mon Sep 17 00:00:00 2001 From: GabsPuNs Date: Fri, 29 May 2026 18:51:38 -0400 Subject: [PATCH] TU24: Maps placed in item frames now cover the whole block face. And a temp way for do TU24: Third person sword blocking position slightly tweaked. Also disabled LLVM since it have some lightning issues. --- Minecraft.Client/HumanoidModel.cpp | 15 +++- Minecraft.Client/ItemFrameRenderer.cpp | 117 ++++++++++++++++++++----- Minecraft.Client/ItemFrameRenderer.h | 1 + Minecraft.Client/PlayerRenderer.cpp | 7 +- 4 files changed, 107 insertions(+), 33 deletions(-) diff --git a/Minecraft.Client/HumanoidModel.cpp b/Minecraft.Client/HumanoidModel.cpp index f90ff7b0..b62bf9b1 100644 --- a/Minecraft.Client/HumanoidModel.cpp +++ b/Minecraft.Client/HumanoidModel.cpp @@ -268,10 +268,10 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float } else if(uiBitmaskOverrideAnim&(1<xRot=0.0f; - leg0->zRot=0.0f; - leg1->xRot=0.0f; - leg1->zRot=0.0f; + leg0->xRot = 0.0f; + leg0->zRot = 0.0f; + leg1->xRot = 0.0f; + leg1->zRot = 0.0f; leg0->yRot = 0.0f; leg1->yRot = 0.0f; } @@ -298,6 +298,13 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float arm0->yRot = 0.0f; arm1->yRot = 0.0f; + + if (holdingRightHand == 3) + { + arm0->xRot = (arm0->xRot * 0.5f) - 0.94247782f; + arm0->yRot = -0.5235988f; + } + if (attackTime > -9990.0f) { float swing = attackTime; diff --git a/Minecraft.Client/ItemFrameRenderer.cpp b/Minecraft.Client/ItemFrameRenderer.cpp index a11dddb9..e4ef1a5b 100644 --- a/Minecraft.Client/ItemFrameRenderer.cpp +++ b/Minecraft.Client/ItemFrameRenderer.cpp @@ -42,12 +42,75 @@ void ItemFrameRenderer::render(shared_ptr _itemframe, double x, double glTranslatef(static_cast(xt) - xOffs, static_cast(yt) - yOffs, static_cast(zt) - zOffs); - drawFrame(itemFrame); - drawItem(itemFrame); + bool containsMap = false; + + if (shared_ptr item = itemFrame->getItem()) + { + if (item->id == Item::map_Id) + containsMap = true; + } + + if (containsMap) + drawBlockFrame(itemFrame); + else + drawFrame(itemFrame); + + drawItem(itemFrame); glPopMatrix(); } +void ItemFrameRenderer::drawBlockFrame(shared_ptr itemFrame) +{ + Minecraft *pMinecraft=Minecraft::GetInstance(); + + glPushMatrix(); + entityRenderDispatcher->textures->bindTexture(&TextureAtlas::LOCATION_BLOCKS); + glRotatef(itemFrame->yRot, 0, 1, 0); + + Tile *wood = Tile::wood; + + // Back + glPushMatrix(); + + tileRenderer->setFixedShape(0, 0.0625F, 0.0625F, 0.0625F, 0.9375F, 0.9375F); + tileRenderer->setFixedTexture(backTexture); + tileRenderer->renderTile(wood, 0, 1); + tileRenderer->clearFixedTexture(); + tileRenderer->clearFixedShape(); + glPopMatrix(); + + tileRenderer->setFixedTexture(Tile::wood->getTexture(Facing::UP, TreeTile::BIRCH_TRUNK)); + + // Bottom + glPushMatrix(); + tileRenderer->setFixedShape(0, 0, 0, 0.062600002F, 0.0625F, 1); + tileRenderer->renderTile(wood, 0, 1); + glPopMatrix(); + + // Top + glPushMatrix(); + tileRenderer->setFixedShape(0, 0.9375F, 0, 0.062600002F, 1, 1); + tileRenderer->renderTile(wood, 0, 1); + glPopMatrix(); + + // Right + glPushMatrix(); + tileRenderer->setFixedShape(0, 0, 0, 0.0625F, 1, 0.0625F); + tileRenderer->renderTile(wood, 0, 1); + glPopMatrix(); + + // Left + glPushMatrix(); + tileRenderer->setFixedShape(0, 0, 0.9375F, 0.0625F, 1, 1); + tileRenderer->renderTile(wood, 0, 1); + glPopMatrix(); + + tileRenderer->clearFixedShape(); + tileRenderer->clearFixedTexture(); + + glPopMatrix(); +} void ItemFrameRenderer::drawFrame(shared_ptr itemFrame) { @@ -58,14 +121,14 @@ void ItemFrameRenderer::drawFrame(shared_ptr itemFrame) glRotatef(itemFrame->yRot, 0, 1, 0); Tile *wood = Tile::wood; - float depth = 1.0f / 16.0f; - float width = 12.0f / 16.0f; - float widthHalf = width / 2.0f; + constexpr float depth = 1.0f / 16.0f; + constexpr float width = 12.0f / 16.0f; + constexpr float widthHalf = width / 2.0f; // Back glPushMatrix(); - tileRenderer->setFixedShape(0, 0.5f - widthHalf + 1.0f / 16.0f, 0.5f - widthHalf + 1.0f / 16.0f, depth * .5f, 0.5f + widthHalf - 1.0f / 16.0f, 0.5f + widthHalf - 1.0f / 16.0f); + tileRenderer->setFixedShape(0, 0.5f - widthHalf + depth, 0.5f - widthHalf + depth, depth * .5f, 0.5f + widthHalf - depth, 0.5f + widthHalf - depth); tileRenderer->setFixedTexture(backTexture); tileRenderer->renderTile(wood, 0, 1); tileRenderer->clearFixedTexture(); @@ -136,27 +199,35 @@ void ItemFrameRenderer::drawItem(shared_ptr entity) if (itemEntity->getItem()->getItem() == Item::map) { - entityRenderDispatcher->textures->bindTexture(&MAP_BACKGROUND_LOCATION); - Tesselator *t = Tesselator::getInstance(); - glRotatef(180, 0, 1, 0); glRotatef(180, 0, 0, 1); - glScalef(1.0f / 256.0f, 1.0f / 256.0f, 1.0f / 256.0f); - glTranslatef(-65, -107, -3); - glNormal3f(0, 0, -1); - t->begin(); - int vo = 7; - t->vertexUV(0 - vo, 128 + vo, 0, 0, 1); - t->vertexUV(128 + vo, 128 + vo, 0, 1, 1); - t->vertexUV(128 + vo, 0 - vo, 0, 1, 0); - t->vertexUV(0 - vo, 0 - vo, 0, 0, 0); - t->end(); + glScalef(0.0078125f, 0.0078125f, 0.0078125f); - shared_ptr data = Item::map->getSavedData(itemEntity->getItem(), entity->level); - if (data != nullptr) - { + switch (entity->getRotation()) + { + case 0: + glTranslatef(-64.0f, -87.0f, -3.0f); + break; + + case 1: + glTranslatef(-66.5f, -84.5f, -3.0f); + break; + + case 2: + glTranslatef(-64.0f, -82.0f, -3.0f); + break; + + case 3: + glTranslatef(-61.5f, -84.5f, -3.0f); + break; + } + + glNormal3f(0, 0, -1); + glTranslatef(0.0f, -0.25f, 0.0f); + + auto data = Item::map->getSavedData(itemEntity->getItem(), entity->level); + if (data != nullptr) entityRenderDispatcher->itemInHandRenderer->minimap->render(nullptr, entityRenderDispatcher->textures, data, entity->entityId); - } } else { diff --git a/Minecraft.Client/ItemFrameRenderer.h b/Minecraft.Client/ItemFrameRenderer.h index a6eea8f4..a00423fa 100644 --- a/Minecraft.Client/ItemFrameRenderer.h +++ b/Minecraft.Client/ItemFrameRenderer.h @@ -12,6 +12,7 @@ public: virtual void render(shared_ptr _itemframe, double x, double y, double z, float rot, float a); private: + void drawBlockFrame(shared_ptr itemFrame); void drawFrame(shared_ptr itemFrame); void drawItem(shared_ptr entity); }; diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index 02be5cae..7b1f8767 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -419,12 +419,7 @@ void PlayerRenderer::additionalRendering(shared_ptr _mob, float a) if (mob->getUseItemDuration() > 0) { if (anim == UseAnim_block) - { - glTranslatef(0.05f, 0, -0.1f); - glRotatef(-50, 0, 1, 0); - glRotatef(-10, 1, 0, 0); - glRotatef(-60, 0, 0, 1); - } + glTranslatef(0, 0.05, 0); } glTranslatef(0, 3 / 16.0f, 0); glScalef(s, -s, s);