Skip to content

Commit 246a15e

Browse files
committed
Position hover ui
1 parent 9833447 commit 246a15e

3 files changed

Lines changed: 17 additions & 13 deletions

File tree

include/ShulkerRenderer.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
#include <minecraft/src-client/common/client/renderer/TexturePtr.h>
77
#include <minecraft/src-client/common/client/renderer/BaseActorRenderContext.h>
88
#include <minecraft/src-client/common/client/renderer/actor/ItemRenderer.h>
9+
#include <minecraft/src-client/common/client/gui/controls/renderers/HoverRenderer.h>
910

1011
class ShulkerRenderer {
1112
public:
12-
void Render(UIRenderContext* ctx, std::string& hoverText);
13+
void Render(UIRenderContext* ctx, HoverRenderer* hoverRenderer);
1314
};

src/ShulkerRenderer.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ extern ItemStack shulkerInventory[27];
1919

2020
mce::Color panelBackground(27.0f / 255.0f, 12.0f / 255.0f, 27.0f / 255.0f, 1.0f);
2121

22-
void ShulkerRenderer::Render(UIRenderContext* ctx, std::string& hoverText) {
22+
void ShulkerRenderer::Render(UIRenderContext* ctx, HoverRenderer* hoverRenderer) {
2323
if (ctx == nullptr || ctx->mClient->getLocalPlayer() == nullptr) return;
2424

2525
// Only load inventory resources once
@@ -32,14 +32,17 @@ void ShulkerRenderer::Render(UIRenderContext* ctx, std::string& hoverText) {
3232
float panelWidth = slotSize * 9;
3333
float panelHeight = slotSize * 3 + textHeight;
3434

35-
RectangleArea background = {0.0f, panelWidth, 0.0f, panelHeight};
35+
float panelX = hoverRenderer->mCursorPosition.x + hoverRenderer->mOffset.x;
36+
float panelY = hoverRenderer->mCursorPosition.y + hoverRenderer->mOffset.y;
37+
38+
RectangleArea background = {panelX, panelX + panelWidth, panelY, panelY + panelHeight};
3639
ctx->drawRectangle(&background, &panelBackground, 1.0f, 1);
3740

3841
// Draw the item slots
3942
for (int x = 0; x < 9; x++) {
4043
for (int y = 0; y < 3; y++) {
4144
glm::tvec2<float> size(slotSize, slotSize);
42-
glm::tvec2<float> position(slotSize * x, slotSize * y + textHeight);
45+
glm::tvec2<float> position(panelX + slotSize * x, panelY + textHeight + slotSize * y);
4346

4447
ctx->drawImage(*itemSlotTexture, &position, &size, &itemSlotUvPos, &itemSlotUvSize, 0);
4548
}
@@ -56,10 +59,10 @@ void ShulkerRenderer::Render(UIRenderContext* ctx, std::string& hoverText) {
5659
const ItemStack* itemStack = &shulkerInventory[y * 9 + x];
5760
if (itemStack->mItem == nullptr) continue;
5861

59-
float xPos = (x * slotSize) + borderSize;
60-
float yPos = (y * slotSize) + borderSize;
62+
float xPos = (x * slotSize) + borderSize + panelX;
63+
float yPos = (y * slotSize) + borderSize + textHeight + panelY;
6164

62-
renderCtxPtr.itemRenderer->renderGuiItemNew(&renderCtxPtr, itemStack, 0, xPos, yPos + textHeight, false, 1.f, 1.f, 1.f);
65+
renderCtxPtr.itemRenderer->renderGuiItemNew(&renderCtxPtr, itemStack, 0, xPos, yPos, false, 1.f, 1.f, 1.f);
6366
}
6467
}
6568

@@ -80,10 +83,10 @@ void ShulkerRenderer::Render(UIRenderContext* ctx, std::string& hoverText) {
8083
if (itemStack->mItem == nullptr) continue;
8184
if (itemStack->count == 1) continue;
8285

83-
float top = (y * slotSize) + borderSize + textHeight;
86+
float top = (y * slotSize) + borderSize + textHeight + panelY;
8487
float bottom = top + 16.f;
8588

86-
float left = (x * slotSize) + borderSize;
89+
float left = (x * slotSize) + borderSize + panelX;
8790
float right = left + 16.f;
8891

8992
std::string text = fmt::format("{}", itemStack->count);
@@ -95,7 +98,7 @@ void ShulkerRenderer::Render(UIRenderContext* ctx, std::string& hoverText) {
9598

9699
ctx->flushText(0.0f);
97100

98-
RectangleArea rect = { 0.0f, 0.0f, 0.0f, 0.0f };
99-
ctx->drawDebugText(&rect, &hoverText, &mce::Color::WHITE, 1.0f, ui::Left, &textData, &caretData);
101+
RectangleArea rect = { panelX, panelX + panelWidth, panelY, panelY + panelHeight };
102+
ctx->drawDebugText(&background, &hoverRenderer->mFilteredContent, &mce::Color::WHITE, 1.0f, ui::Left, &textData, &caretData);
100103
ctx->flushText(0.0f);
101104
}

src/dllmain.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ static void Shulker_appendFormattedHovertext(ShulkerBoxBlockItem* self, const It
5252
static void _renderHoverBox(HoverRenderer* self, MinecraftUIRenderContext* ctx, IClientInstance* client, RectangleArea* aabb, float someFloat) {
5353
// This is really bad code, it is relying on the fact that I have also hooked appendFormattedHovertext for items to append the item identifier
5454
// I have no idea where the currently hovered item is stored in the game! I can't find any references to it, so it might be set in some weird place?
55-
if (self->mText.find("shulker_box") != std::string::npos) {
56-
shulkerRenderer.Render(ctx, self->mText);
55+
if (self->mFilteredContent.find("shulker_box") != std::string::npos) {
56+
shulkerRenderer.Render(ctx, self);
5757
return;
5858
}
5959

0 commit comments

Comments
 (0)