the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 169 lines 4.0 kB view raw
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}