the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "ItemRenderer.h"
3#include "tileRenderer.h"
4#include "entityRenderDispatcher.h"
5//#include "ItemFrame"
6#include "ItemFrameRenderer.h"
7#include "TextureAtlas.h"
8
9#include "..\Minecraft.World\JavaMath.h"
10#include "..\Minecraft.World\net.minecraft.world.entity.Item.h"
11#include "..\Minecraft.World\net.minecraft.world.Item.h"
12#include "..\Minecraft.World\net.minecraft.world.Item.alchemy.h"
13#include "..\Minecraft.World\net.minecraft.world.level.tile.h"
14#include "..\Minecraft.World\StringHelpers.h"
15#include "Minecraft.h"
16#include "..\Minecraft.World\Item.h"
17#include "..\Minecraft.World\net.minecraft.world.h"
18#include "..\Minecraft.World\net.minecraft.h"
19#include "CompassTexture.h"
20#include "Minimap.h"
21
22ResourceLocation ItemFrameRenderer::MAP_BACKGROUND_LOCATION = ResourceLocation(TN_MISC_MAPBG);
23
24void ItemFrameRenderer::registerTerrainTextures(IconRegister *iconRegister)
25{
26 backTexture = iconRegister->registerIcon(L"itemframe_back");
27}
28
29void ItemFrameRenderer::render(shared_ptr<Entity> _itemframe, double x, double y, double z, float rot, float a)
30{
31 // 4J - original version used generics and thus had an input parameter of type EnderCrystal rather than shared_ptr<Entity> we have here -
32 // do some casting around instead
33 shared_ptr<ItemFrame> itemFrame = dynamic_pointer_cast<ItemFrame>(_itemframe);
34
35 glPushMatrix();
36 float xOffs = (float) (itemFrame->x - x) - 0.5f;
37 float yOffs = (float) (itemFrame->y - y) - 0.5f;
38 float zOffs = (float) (itemFrame->z - z) - 0.5f;
39
40 int xt = itemFrame->xTile + Direction::STEP_X[itemFrame->dir];
41 int yt = itemFrame->yTile;
42 int zt = itemFrame->zTile + Direction::STEP_Z[itemFrame->dir];
43
44 glTranslatef((float) xt - xOffs, (float) yt - yOffs, (float) zt - zOffs);
45
46 drawFrame(itemFrame);
47 drawItem(itemFrame);
48
49 glPopMatrix();
50}
51
52
53void ItemFrameRenderer::drawFrame(shared_ptr<ItemFrame> itemFrame)
54{
55 Minecraft *pMinecraft=Minecraft::GetInstance();
56
57 glPushMatrix();
58 entityRenderDispatcher->textures->bindTexture(&TextureAtlas::LOCATION_BLOCKS);
59 glRotatef(itemFrame->yRot, 0, 1, 0);
60
61 Tile *wood = Tile::wood;
62 float depth = 1.0f / 16.0f;
63 float width = 12.0f / 16.0f;
64 float widthHalf = width / 2.0f;
65
66 // Back
67 glPushMatrix();
68
69 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);
70 tileRenderer->setFixedTexture(backTexture);
71 tileRenderer->renderTile(wood, 0, 1);
72 tileRenderer->clearFixedTexture();
73 tileRenderer->clearFixedShape();
74 glPopMatrix();
75
76 tileRenderer->setFixedTexture(Tile::wood->getTexture(Facing::UP, TreeTile::BIRCH_TRUNK));
77
78 // Bottom
79 glPushMatrix();
80 tileRenderer->setFixedShape(0, 0.5f - widthHalf, 0.5f - widthHalf, depth + 0.0001f, depth + 0.5f - widthHalf, 0.5f + widthHalf);
81 tileRenderer->renderTile(wood, 0, 1);
82 glPopMatrix();
83
84 // Top
85 glPushMatrix();
86 tileRenderer->setFixedShape(0, 0.5f + widthHalf - depth, 0.5f - widthHalf, depth + 0.0001f, 0.5f + widthHalf, 0.5f + widthHalf);
87 tileRenderer->renderTile(wood, 0, 1);
88 glPopMatrix();
89
90 // Right
91 glPushMatrix();
92 tileRenderer->setFixedShape(0, 0.5f - widthHalf, 0.5f - widthHalf, depth, 0.5f + widthHalf, depth + 0.5f - widthHalf);
93 tileRenderer->renderTile(wood, 0, 1);
94 glPopMatrix();
95
96 // Left
97 glPushMatrix();
98 tileRenderer->setFixedShape(0, 0.5f - widthHalf, 0.5f + widthHalf - depth, depth, 0.5f + widthHalf, 0.5f + widthHalf);
99 tileRenderer->renderTile(wood, 0, 1);
100 glPopMatrix();
101
102 tileRenderer->clearFixedShape();
103 tileRenderer->clearFixedTexture();
104
105 glPopMatrix();
106}
107
108void ItemFrameRenderer::drawItem(shared_ptr<ItemFrame> entity)
109{
110 Minecraft *pMinecraft=Minecraft::GetInstance();
111
112 shared_ptr<ItemInstance> instance = entity->getItem();
113 if (instance == NULL) return;
114
115 shared_ptr<ItemEntity> itemEntity = shared_ptr<ItemEntity>(new ItemEntity(entity->level, 0, 0, 0, instance));
116 itemEntity->getItem()->count = 1;
117 itemEntity->bobOffs = 0;
118
119 glPushMatrix();
120
121 glTranslatef((-7.25f / 16.0f) * Direction::STEP_X[entity->dir], -0.18f, (-7.25f / 16.0f) * Direction::STEP_Z[entity->dir]);
122 glRotatef(180 + entity->yRot, 0, 1, 0);
123 glRotatef(-90 * entity->getRotation(), 0, 0, 1);
124
125 switch (entity->getRotation())
126 {
127 case 1:
128 glTranslatef(-0.16f, -0.16f, 0);
129 break;
130 case 2:
131 glTranslatef(0, -0.32f, 0);
132 break;
133 case 3:
134 glTranslatef(0.16f, -0.16f, 0);
135 break;
136 }
137
138 if (itemEntity->getItem()->getItem() == Item::map)
139 {
140 entityRenderDispatcher->textures->bindTexture(&MAP_BACKGROUND_LOCATION);
141 Tesselator *t = Tesselator::getInstance();
142
143 glRotatef(180, 0, 1, 0);
144 glRotatef(180, 0, 0, 1);
145 glScalef(1.0f / 256.0f, 1.0f / 256.0f, 1.0f / 256.0f);
146 glTranslatef(-65, -107, -3);
147 glNormal3f(0, 0, -1);
148 t->begin();
149 int vo = 7;
150 t->vertexUV(0 - vo, 128 + vo, 0, 0, 1);
151 t->vertexUV(128 + vo, 128 + vo, 0, 1, 1);
152 t->vertexUV(128 + vo, 0 - vo, 0, 1, 0);
153 t->vertexUV(0 - vo, 0 - vo, 0, 0, 0);
154 t->end();
155
156 shared_ptr<MapItemSavedData> data = Item::map->getSavedData(itemEntity->getItem(), entity->level);
157 if (data != NULL)
158 {
159 entityRenderDispatcher->itemInHandRenderer->minimap->render(nullptr, entityRenderDispatcher->textures, data, entity->entityId);
160 }
161 }
162 else
163 {
164 if (itemEntity->getItem()->getItem() == Item::compass)
165 {
166 CompassTexture *ct = CompassTexture::instance;
167 double compassRot = ct->rot;
168 double compassRotA = ct->rota;
169 ct->rot = 0;
170 ct->rota = 0;
171 ct->updateFromPosition(entity->level, entity->x, entity->z, Mth::wrapDegrees( (float)(180 + entity->dir * 90) ), false, true);
172 ct->rot = compassRot;
173 ct->rota = compassRotA;
174 }
175
176 EntityRenderDispatcher::instance->render(itemEntity, 0, 0, 0, 0, 0, true);
177
178 if (itemEntity->getItem()->getItem() == Item::compass)
179 {
180 CompassTexture *ct = CompassTexture::instance;
181 ct->cycleFrames();
182 }
183 }
184
185 glPopMatrix();
186}
187