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