the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 90 lines 2.8 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.level.h" 3#include "net.minecraft.world.level.tile.h" 4#include "DesertWellFeature.h" 5 6bool DesertWellFeature::place(Level *level, Random *random, int x, int y, int z) 7{ 8 while (level->isEmptyTile(x, y, z) && y > 2) 9 y--; 10 11 int tile = level->getTile(x, y, z); 12 if (tile != Tile::sand_Id) 13 { 14 return false; 15 } 16 17 // the surrounding 5x5 area may not be lower than y-1 18 for (int ox = -2; ox <= 2; ox++) 19 { 20 for (int oz = -2; oz <= 2; oz++) 21 { 22 if (level->isEmptyTile(x + ox, y - 1, z + oz) && level->isEmptyTile(x + ox, y - 2, z + oz)) 23 { 24 return false; 25 } 26 } 27 } 28 29 // place floor 30 for (int oy = -1; oy <= 0; oy++) 31 { 32 for (int ox = -2; ox <= 2; ox++) 33 { 34 for (int oz = -2; oz <= 2; oz++) 35 { 36 level->setTileAndData(x + ox, y + oy, z + oz, Tile::sandStone_Id, 0, Tile::UPDATE_CLIENTS); 37 } 38 } 39 } 40 41 // place water cross 42 level->setTileAndData(x, y, z, Tile::water_Id, 0, Tile::UPDATE_CLIENTS); 43 level->setTileAndData(x - 1, y, z, Tile::water_Id, 0, Tile::UPDATE_CLIENTS); 44 level->setTileAndData(x + 1, y, z, Tile::water_Id, 0, Tile::UPDATE_CLIENTS); 45 level->setTileAndData(x, y, z - 1, Tile::water_Id, 0, Tile::UPDATE_CLIENTS); 46 level->setTileAndData(x, y, z + 1, Tile::water_Id, 0, Tile::UPDATE_CLIENTS); 47 48 // place "fence" 49 for (int ox = -2; ox <= 2; ox++) 50 { 51 for (int oz = -2; oz <= 2; oz++) 52 { 53 if (ox == -2 || ox == 2 || oz == -2 || oz == 2) 54 { 55 level->setTileAndData(x + ox, y + 1, z + oz, Tile::sandStone_Id, 0, Tile::UPDATE_CLIENTS); 56 } 57 } 58 } 59 level->setTileAndData(x + 2, y + 1, z, Tile::stoneSlabHalf_Id, StoneSlabTile::SAND_SLAB, Tile::UPDATE_CLIENTS); 60 level->setTileAndData(x - 2, y + 1, z, Tile::stoneSlabHalf_Id, StoneSlabTile::SAND_SLAB, Tile::UPDATE_CLIENTS); 61 level->setTileAndData(x, y + 1, z + 2, Tile::stoneSlabHalf_Id, StoneSlabTile::SAND_SLAB, Tile::UPDATE_CLIENTS); 62 level->setTileAndData(x, y + 1, z - 2, Tile::stoneSlabHalf_Id, StoneSlabTile::SAND_SLAB, Tile::UPDATE_CLIENTS); 63 64 // place roof 65 for (int ox = -1; ox <= 1; ox++) 66 { 67 for (int oz = -1; oz <= 1; oz++) 68 { 69 if (ox == 0 && oz == 0) 70 { 71 level->setTileAndData(x + ox, y + 4, z + oz, Tile::sandStone_Id, 0, Tile::UPDATE_CLIENTS); 72 } 73 else 74 { 75 level->setTileAndData(x + ox, y + 4, z + oz, Tile::stoneSlabHalf_Id, StoneSlabTile::SAND_SLAB, Tile::UPDATE_CLIENTS); 76 } 77 } 78 } 79 80 // place pillars 81 for (int oy = 1; oy <= 3; oy++) 82 { 83 level->setTileAndData(x - 1, y + oy, z - 1, Tile::sandStone_Id, 0, Tile::UPDATE_CLIENTS); 84 level->setTileAndData(x - 1, y + oy, z + 1, Tile::sandStone_Id, 0, Tile::UPDATE_CLIENTS); 85 level->setTileAndData(x + 1, y + oy, z - 1, Tile::sandStone_Id, 0, Tile::UPDATE_CLIENTS); 86 level->setTileAndData(x + 1, y + oy, z + 1, Tile::sandStone_Id, 0, Tile::UPDATE_CLIENTS); 87 } 88 89 return true; 90}