aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/ItemSpriteRenderer.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/ItemSpriteRenderer.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/ItemSpriteRenderer.cpp')
-rw-r--r--Minecraft.Client/ItemSpriteRenderer.cpp79
1 files changed, 79 insertions, 0 deletions
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<Entity> 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<ThrownPotion>(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