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