From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/ItemSpriteRenderer.cpp | 79 +++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Minecraft.Client/ItemSpriteRenderer.cpp (limited to 'Minecraft.Client/ItemSpriteRenderer.cpp') diff --git a/Minecraft.Client/ItemSpriteRenderer.cpp b/Minecraft.Client/ItemSpriteRenderer.cpp new file mode 100644 index 00000000..5a1ea620 --- /dev/null +++ b/Minecraft.Client/ItemSpriteRenderer.cpp @@ -0,0 +1,79 @@ +#include "stdafx.h" +#include "ItemSpriteRenderer.h" +#include "EntityRenderDispatcher.h" +#include "..\Minecraft.World\net.minecraft.world.entity.projectile.h" +#include "..\Minecraft.World\net.minecraft.world.item.alchemy.h" +#include "..\Minecraft.World\net.minecraft.world.item.h" +#include "..\Minecraft.World\net.minecraft.world.h" + +ItemSpriteRenderer::ItemSpriteRenderer(Item *sourceItem, int sourceItemAuxValue /*= 0*/) : EntityRenderer() +{ + this->sourceItem = sourceItem; + this->sourceItemAuxValue = sourceItemAuxValue; +} + +//ItemSpriteRenderer::ItemSpriteRenderer(int icon) : EntityRenderer() +//{ +// this(sourceItem, 0); +//} + +void ItemSpriteRenderer::render(shared_ptr e, double x, double y, double z, float rot, float a) +{ + // the icon is already cached in the item object, so there should not be any performance impact by not caching it here + Icon *icon = sourceItem->getIcon(sourceItemAuxValue); + if (icon == NULL) + { + return; + } + + glPushMatrix(); + + glTranslatef((float) x, (float) y, (float) z); + glEnable(GL_RESCALE_NORMAL); + glScalef(1 / 2.0f, 1 / 2.0f, 1 / 2.0f); + bindTexture(TN_GUI_ITEMS); // 4J - was L"/gui/items.png" + Tesselator *t = Tesselator::getInstance(); + + if (icon == PotionItem::getTexture(PotionItem::THROWABLE_ICON) ) + { + + int col = PotionBrewing::getColorValue((dynamic_pointer_cast(e) )->getPotionValue(), false); + float red = ((col >> 16) & 0xff) / 255.0f; + float g = ((col >> 8) & 0xff) / 255.0f; + float b = ((col) & 0xff) / 255.0f; + + + glColor3f(red, g, b); + glPushMatrix(); + renderIcon(t, PotionItem::getTexture(PotionItem::CONTENTS_ICON)); + glPopMatrix(); + glColor3f(1, 1, 1); + } + + renderIcon(t, icon); + + glDisable(GL_RESCALE_NORMAL); + glPopMatrix(); +} + +void ItemSpriteRenderer::renderIcon(Tesselator *t, Icon *icon) +{ + float u0 = icon->getU0(); + float u1 = icon->getU1(); + float v0 = icon->getV0(); + float v1 = icon->getV1(); + + float r = 1.0f; + float xo = 0.5f; + float yo = 0.25f; + + glRotatef(180 - entityRenderDispatcher->playerRotY, 0, 1, 0); + glRotatef(-entityRenderDispatcher->playerRotX, 1, 0, 0); + t->begin(); + t->normal(0, 1, 0); + t->vertexUV((float)(0 - xo), (float)( 0 - yo), (float)( 0), (float)( u0), (float)( v1)); + t->vertexUV((float)(r - xo), (float)( 0 - yo), (float)( 0), (float)( u1), (float)( v1)); + t->vertexUV((float)(r - xo), (float)( r - yo), (float)( 0), (float)( u1), (float)( v0)); + t->vertexUV((float)(0 - xo), (float)( r - yo), (float)( 0), (float)( u0), (float)( v0)); + t->end(); +} \ No newline at end of file -- cgit v1.2.3