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.level.tile.h"
4#include "net.minecraft.world.level.levelgen.feature.h"
5#include "net.minecraft.world.h"
6
7#include "Sapling.h"
8
9int Sapling::SAPLING_NAMES[SAPLING_NAMES_SIZE] = { IDS_TILE_SAPLING_OAK,
10 IDS_TILE_SAPLING_SPRUCE,
11 IDS_TILE_SAPLING_BIRCH,
12 IDS_TILE_SAPLING_JUNGLE
13};
14
15const wstring Sapling::TEXTURE_NAMES[] = {L"sapling", L"sapling_spruce", L"sapling_birch", L"sapling_jungle"};
16
17Sapling::Sapling(int id) : Bush( id )
18{
19 this->updateDefaultShape();
20 icons = NULL;
21}
22
23// 4J Added override
24void Sapling::updateDefaultShape()
25{
26 float ss = 0.4f;
27 this->setShape(0.5f - ss, 0, 0.5f - ss, 0.5f + ss, ss * 2, 0.5f + ss);
28}
29
30void Sapling::tick(Level *level, int x, int y, int z, Random *random)
31{
32 if (level->isClientSide) return;
33
34 Bush::tick(level, x, y, z, random);
35
36 if (level->getRawBrightness(x, y + 1, z) >= Level::MAX_BRIGHTNESS - 6)
37 {
38 if (random->nextInt(7) == 0)
39 {
40 advanceTree(level, x, y, z, random);
41 }
42 }
43}
44
45Icon *Sapling::getTexture(int face, int data)
46{
47 data = data & TYPE_MASK;
48 return icons[data];
49}
50
51void Sapling::advanceTree(Level *level, int x, int y, int z, Random *random)
52{
53 int data = level->getData(x, y, z);
54 if ((data & AGE_BIT) == 0)
55 {
56 level->setData(x, y, z, data | AGE_BIT, Tile::UPDATE_NONE);
57 }
58 else
59 {
60 growTree(level, x, y, z, random);
61 }
62}
63
64void Sapling::growTree(Level *level, int x, int y, int z, Random *random)
65{
66 int data = level->getData(x, y, z) & TYPE_MASK;
67
68 Feature *f = NULL;
69
70 int ox = 0, oz = 0;
71 bool multiblock = false;
72
73 if (data == TYPE_EVERGREEN)
74 {
75 f = new SpruceFeature(true);
76 }
77 else if (data == TYPE_BIRCH)
78 {
79 f = new BirchFeature(true);
80 }
81 else if (data == TYPE_JUNGLE)
82 {
83 // check for mega tree
84 for (ox = 0; ox >= -1; ox--)
85 {
86 for (oz = 0; oz >= -1; oz--)
87 {
88 if (isSapling(level, x + ox, y, z + oz, TYPE_JUNGLE) && isSapling(level, x + ox + 1, y, z + oz, TYPE_JUNGLE) && isSapling(level, x + ox, y, z + oz + 1, TYPE_JUNGLE)
89 && isSapling(level, x + ox + 1, y, z + oz + 1, TYPE_JUNGLE))
90 {
91 f = new MegaTreeFeature(true, 10 + random->nextInt(20), TreeTile::JUNGLE_TRUNK, LeafTile::JUNGLE_LEAF);
92 multiblock = true;
93 break;
94 }
95 }
96 if (f != NULL)
97 {
98 break;
99 }
100 }
101 if (f == NULL)
102 {
103 ox = oz = 0;
104 f = new TreeFeature(true, 4 + random->nextInt(7), TreeTile::JUNGLE_TRUNK, LeafTile::JUNGLE_LEAF, false);
105 }
106 }
107 else
108 {
109 f = new TreeFeature(true);
110 if (random->nextInt(10) == 0)
111 {
112 delete f;
113 f = new BasicTree(true);
114 }
115 }
116 if (multiblock)
117 {
118 level->setTileAndData(x + ox, y, z + oz, 0, 0, Tile::UPDATE_NONE);
119 level->setTileAndData(x + ox + 1, y, z + oz, 0, 0, Tile::UPDATE_NONE);
120 level->setTileAndData(x + ox, y, z + oz + 1, 0, 0, Tile::UPDATE_NONE);
121 level->setTileAndData(x + ox + 1, y, z + oz + 1, 0, 0, Tile::UPDATE_NONE);
122 }
123 else
124 {
125 level->setTileAndData(x, y, z, 0, 0, Tile::UPDATE_NONE);
126 }
127 if (!f->place(level, random, x + ox, y, z + oz))
128 {
129 if (multiblock)
130 {
131 level->setTileAndData(x + ox, y, z + oz, id, data, Tile::UPDATE_NONE);
132 level->setTileAndData(x + ox + 1, y, z + oz, id, data, Tile::UPDATE_NONE);
133 level->setTileAndData(x + ox, y, z + oz + 1, id, data, Tile::UPDATE_NONE);
134 level->setTileAndData(x + ox + 1, y, z + oz + 1, id, data, Tile::UPDATE_NONE);
135 }
136 else
137 {
138 level->setTileAndData(x, y, z, id, data, Tile::UPDATE_NONE);
139 }
140 }
141 if( f != NULL )
142 delete f;
143}
144
145unsigned int Sapling::getDescriptionId(int iData /*= -1*/)
146{
147 if(iData < 0 ) iData = 0;
148 return Sapling::SAPLING_NAMES[iData];
149}
150
151int Sapling::getSpawnResourcesAuxValue(int data)
152{
153 return data & TYPE_MASK;
154}
155
156bool Sapling::isSapling(Level *level, int x, int y, int z, int type)
157{
158 return (level->getTile(x, y, z) == id) && ((level->getData(x, y, z) & TYPE_MASK) == type);
159}
160
161void Sapling::registerIcons(IconRegister *iconRegister)
162{
163 icons = new Icon*[SAPLING_NAMES_SIZE];
164
165 for (int i = 0; i < SAPLING_NAMES_SIZE; i++)
166 {
167 icons[i] = iconRegister->registerIcon(TEXTURE_NAMES[i]);
168 }
169}