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.level.h"
3#include "net.minecraft.world.entity.item.h"
4#include "net.minecraft.world.item.h"
5#include "net.minecraft.world.h"
6#include "CropTile.h"
7
8CropTile::CropTile(int id) : Bush(id)
9{
10 setTicking(true);
11 updateDefaultShape();
12 icons = NULL;
13
14 setDestroyTime(0.0f);
15 setSoundType(SOUND_GRASS);
16 setNotCollectStatistics();
17 sendTileData();
18}
19
20// 4J Added override
21void CropTile::updateDefaultShape()
22{
23 float ss = 0.5f;
24 this->setShape(0.5f - ss, 0, 0.5f - ss, 0.5f + ss, 0.25f, 0.5f + ss);
25}
26
27bool CropTile::mayPlaceOn(int tile)
28{
29 return tile == Tile::farmland_Id;
30}
31
32void CropTile::tick(Level *level, int x, int y, int z, Random *random)
33{
34 Bush::tick(level, x, y, z, random);
35 if (level->getRawBrightness(x, y + 1, z) >= Level::MAX_BRIGHTNESS - 6)
36 {
37
38 int age = level->getData(x, y, z);
39 if (age < 7)
40 {
41 float growthSpeed = getGrowthSpeed(level, x, y, z);
42
43 if (random->nextInt((int) (25 / growthSpeed) + 1) == 0)
44 {
45 age++;
46 level->setData(x, y, z, age, Tile::UPDATE_CLIENTS);
47 }
48 }
49 }
50}
51
52void CropTile::growCrops(Level *level, int x, int y, int z)
53{
54 int stage = level->getData(x, y, z) + Mth::nextInt(level->random, 2, 5);
55 if (stage > 7) stage = 7;
56 level->setData(x, y, z, stage, Tile::UPDATE_CLIENTS);
57}
58
59float CropTile::getGrowthSpeed(Level *level, int x, int y, int z)
60{
61 float speed = 1;
62
63 int n = level->getTile(x, y, z - 1);
64 int s = level->getTile(x, y, z + 1);
65 int w = level->getTile(x - 1, y, z);
66 int e = level->getTile(x + 1, y, z);
67
68 int d0 = level->getTile(x - 1, y, z - 1);
69 int d1 = level->getTile(x + 1, y, z - 1);
70 int d2 = level->getTile(x + 1, y, z + 1);
71 int d3 = level->getTile(x - 1, y, z + 1);
72
73 bool horizontal = w == id || e == id;
74 bool vertical = n == id || s == id;
75 bool diagonal = d0 == id || d1 == id || d2 == id || d3 == id;
76
77 for (int xx = x - 1; xx <= x + 1; xx++)
78 for (int zz = z - 1; zz <= z + 1; zz++)
79 {
80 int t = level->getTile(xx, y - 1, zz);
81
82 float tileSpeed = 0;
83 if (t == Tile::farmland_Id)
84 {
85 tileSpeed = 1;
86 if (level->getData(xx, y - 1, zz) > 0) tileSpeed = 3;
87 }
88
89 if (xx != x || zz != z) tileSpeed /= 4;
90
91 speed += tileSpeed;
92 }
93
94 if (diagonal || (horizontal && vertical)) speed /= 2;
95
96 return speed;
97
98}
99
100Icon *CropTile::getTexture(int face, int data)
101{
102 if (data < 0 || data > 7) data = 7;
103 return icons[data];
104}
105
106int CropTile::getRenderShape()
107{
108 return Tile::SHAPE_ROWS;
109}
110
111int CropTile::getBaseSeedId()
112{
113 return Item::seeds_wheat_Id;
114}
115
116int CropTile::getBasePlantId()
117{
118 return Item::wheat_Id;
119}
120
121/**
122* Using this method instead of destroy() to determine if seeds should be
123* dropped
124*/
125void CropTile::spawnResources(Level *level, int x, int y, int z, int data, float odds, int playerBonus)
126{
127 Bush::spawnResources(level, x, y, z, data, odds, 0);
128
129 if (level->isClientSide)
130 {
131 return;
132 }
133 if (data >= 7)
134 {
135 int count = 3 + playerBonus;
136 for (int i = 0; i < count; i++)
137 {
138 if (level->random->nextInt(5 * 3) > data) continue;
139 popResource(level, x, y, z, shared_ptr<ItemInstance>(new ItemInstance(getBaseSeedId(), 1, 0)));
140 }
141 }
142}
143
144int CropTile::getResource(int data, Random *random, int playerBonusLevel)
145{
146 if (data == 7)
147 {
148 return getBasePlantId();
149 }
150
151 return getBaseSeedId();
152}
153
154int CropTile::getResourceCount(Random *random)
155{
156 return 1;
157}
158
159int CropTile::cloneTileId(Level *level, int x, int y, int z)
160{
161 return getBaseSeedId();
162}
163
164void CropTile::registerIcons(IconRegister *iconRegister)
165{
166 icons = new Icon*[8];
167
168 for (int i = 0; i < 8; i++)
169 {
170 icons[i] = iconRegister->registerIcon(L"crops_" + _toString(i));
171 }
172}