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 "net.minecraft.world.item.h"
3#include "net.minecraft.world.entity.item.h"
4#include "net.minecraft.world.level.h"
5#include "net.minecraft.world.h"
6#include "..\Minecraft.Client\Minecraft.h"
7#include "..\Minecraft.Client\Common\Colours\ColourTable.h"
8#include "StemTile.h"
9
10const wstring StemTile::TEXTURE_ANGLED = L"stem_bent";
11
12StemTile::StemTile(int id, Tile *fruit) : Bush(id)
13{
14 this->fruit = fruit;
15
16 setTicking(true);
17 float ss = 0.125f;
18 this->setShape(0.5f - ss, 0, 0.5f - ss, 0.5f + ss, 0.25f, 0.5f + ss);
19
20 iconAngled = NULL;
21}
22
23bool StemTile::mayPlaceOn(int tile)
24{
25 return tile == Tile::farmland_Id;
26}
27
28void StemTile::tick(Level *level, int x, int y, int z, Random *random)
29{
30 Tile::tick(level, x, y, z, random);
31 if (level->getRawBrightness(x, y + 1, z) >= Level::MAX_BRIGHTNESS - 6)
32 {
33
34 float growthSpeed = getGrowthSpeed(level, x, y, z);
35
36 // 4J Stu - Brought forward change from 1.2.3 to make fruit more likely to grow
37 if (random->nextInt((int) (25 / growthSpeed) + 1) == 0)
38 {
39 int age = level->getData(x, y, z);
40 if (age < 7)
41 {
42 age++;
43 level->setData(x, y, z, age, Tile::UPDATE_CLIENTS);
44 }
45 else
46 {
47 if (level->getTile(x - 1, y, z) == fruit->id) return;
48 if (level->getTile(x + 1, y, z) == fruit->id) return;
49 if (level->getTile(x, y, z - 1) == fruit->id) return;
50 if (level->getTile(x, y, z + 1) == fruit->id) return;
51
52 int dir = random->nextInt(4);
53 int xx = x;
54 int zz = z;
55 if (dir == 0) xx--;
56 if (dir == 1) xx++;
57 if (dir == 2) zz--;
58 if (dir == 3) zz++;
59 // 4J Stu - Brought forward change from 1.2.3 to not require farmland to grow fruits
60 int below = level->getTile(xx, y - 1, zz);
61 if (level->getTile(xx, y, zz) == 0 && (below == Tile::farmland_Id || below == Tile::dirt_Id || below == Tile::grass_Id))
62 {
63 level->setTileAndUpdate(xx, y, zz, fruit->id);
64 }
65
66 }
67 }
68 }
69
70}
71
72void StemTile::growCrops(Level *level, int x, int y, int z)
73{
74 int stage = level->getData(x, y, z) + Mth::nextInt(level->random, 2, 5);
75 if (stage > 7) stage = 7;
76 level->setData(x, y, z, stage, Tile::UPDATE_CLIENTS);
77}
78
79float StemTile::getGrowthSpeed(Level *level, int x, int y, int z)
80{
81 float speed = 1;
82
83 int n = level->getTile(x, y, z - 1);
84 int s = level->getTile(x, y, z + 1);
85 int w = level->getTile(x - 1, y, z);
86 int e = level->getTile(x + 1, y, z);
87
88 int d0 = level->getTile(x - 1, y, z - 1);
89 int d1 = level->getTile(x + 1, y, z - 1);
90 int d2 = level->getTile(x + 1, y, z + 1);
91 int d3 = level->getTile(x - 1, y, z + 1);
92
93 bool horizontal = w == id || e == id;
94 bool vertical = n == id || s == id;
95 bool diagonal = d0 == id || d1 == id || d2 == id || d3 == id;
96
97 for (int xx = x - 1; xx <= x + 1; xx++)
98 for (int zz = z - 1; zz <= z + 1; zz++)
99 {
100 int t = level->getTile(xx, y - 1, zz);
101
102 float tileSpeed = 0;
103 if (t == Tile::farmland_Id)
104 {
105 tileSpeed = 1;
106 if (level->getData(xx, y - 1, zz) > 0) tileSpeed = 3;
107 }
108
109 if (xx != x || zz != z) tileSpeed /= 4;
110
111 speed += tileSpeed;
112 }
113
114 if (diagonal || (horizontal && vertical)) speed /= 2;
115
116 return speed;
117}
118
119int StemTile::getColor(int data)
120{
121 //int r = data * 32;
122 //int g = 255 - data * 8;
123 //int b = data * 4;
124 //return r << 16 | g << 8 | b;
125
126 int colour = 0;
127
128 unsigned int minColour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Tile_StemMin );
129 unsigned int maxColour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Tile_StemMax );
130
131 byte redComponent = ((minColour>>16)&0xFF) + (( (maxColour>>16)&0xFF - (minColour>>16)&0xFF)*( data/7.0f));
132 byte greenComponent = ((minColour>>8)&0xFF) + (( (maxColour>>8)&0xFF - (minColour>>8)&0xFF)*( data/7.0f));
133 byte blueComponent = ((minColour)&0xFF) + (( (maxColour)&0xFF - (minColour)&0xFF)*( data/7.0f));
134
135 colour = redComponent<<16 | greenComponent<<8 | blueComponent;
136 return colour;
137}
138
139int StemTile::getColor(LevelSource *level, int x, int y, int z)
140{
141 return getColor(level->getData(x, y, z));
142}
143
144void StemTile::updateDefaultShape()
145{
146 float ss = 0.125f;
147 setShape(0.5f - ss, 0, 0.5f - ss, 0.5f + ss, 0.25f, 0.5f + ss);
148}
149
150void StemTile::updateShape(LevelSource *level, int x, int y, int z, int forceData, shared_ptr<TileEntity> forceEntity) // 4J added forceData, forceEntity param
151{
152 ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape);
153 tls->yy1 = (level->getData(x, y, z) * 2 + 2) / 16.0f;
154 float ss = 0.125f;
155 setShape(0.5f - ss, 0, 0.5f - ss, 0.5f + ss, (float) tls->yy1, 0.5f + ss);
156}
157
158int StemTile::getRenderShape()
159{
160 return Tile::SHAPE_STEM;
161}
162
163int StemTile::getConnectDir(LevelSource *level, int x, int y, int z)
164{
165 int d = level->getData(x, y, z);
166 if (d < 7) return -1;
167 if (level->getTile(x - 1, y, z) == fruit->id) return 0;
168 if (level->getTile(x + 1, y, z) == fruit->id) return 1;
169 if (level->getTile(x, y, z - 1) == fruit->id) return 2;
170 if (level->getTile(x, y, z + 1) == fruit->id) return 3;
171 return -1;
172}
173
174/**
175* Using this method instead of destroy() to determine if seeds should be
176* dropped
177*/
178void StemTile::spawnResources(Level *level, int x, int y, int z, int data, float odds, int playerBonus)
179{
180 Tile::spawnResources(level, x, y, z, data, odds, playerBonus);
181
182 if (level->isClientSide)
183 {
184 return;
185 }
186
187 Item *seed = NULL;
188 if (fruit == Tile::pumpkin) seed = Item::seeds_pumpkin;
189 if (fruit == Tile::melon) seed = Item::seeds_melon;
190 for (int i = 0; i < 3; i++)
191 {
192 popResource(level, x, y, z, shared_ptr<ItemInstance>(new ItemInstance(seed)));
193 }
194}
195
196int StemTile::getResource(int data, Random *random, int playerBonusLevel)
197{
198 return -1;
199}
200
201int StemTile::getResourceCount(Random *random)
202{
203 return 1;
204}
205
206int StemTile::cloneTileId(Level *level, int x, int y, int z)
207{
208 if (fruit == Tile::pumpkin)
209 {
210 return Item::seeds_pumpkin_Id;
211 }
212 else if (fruit == Tile::melon)
213 {
214 return Item::seeds_melon_Id;
215 }
216
217 return 0;
218}
219
220void StemTile::registerIcons(IconRegister *iconRegister)
221{
222 icon = iconRegister->registerIcon(L"stem_straight");
223 iconAngled = iconRegister->registerIcon(TEXTURE_ANGLED);
224}
225
226Icon *StemTile::getAngledTexture()
227{
228 return iconAngled;
229}