the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 128 lines 3.6 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.level.h" 3#include "RedStoneOreTile.h" 4#include "net.minecraft.world.item.h" 5 6RedStoneOreTile::RedStoneOreTile(int id, bool lit) : Tile(id, Material::stone) 7{ 8 if (lit) 9 { 10 this->setTicking(true); 11 } 12 this->lit = lit; 13} 14 15int RedStoneOreTile::getTickDelay(Level *level) 16{ 17 return 30; 18} 19 20void RedStoneOreTile::attack(Level *level, int x, int y, int z, shared_ptr<Player> player) 21{ 22 interact(level, x, y, z); 23 Tile::attack(level, x, y, z, player); 24} 25 26void RedStoneOreTile::stepOn(Level *level, int x, int y, int z, shared_ptr<Entity> entity) 27{ 28 interact(level, x, y, z); 29 Tile::stepOn(level, x, y, z, entity); 30} 31 32// 4J-PB - Adding a TestUse for tooltip display 33bool RedStoneOreTile::TestUse() 34{ 35 return id == Tile::redStoneOre_Id; 36} 37 38bool RedStoneOreTile::use(Level *level, int x, int y, int z, shared_ptr<Player> player, int clickedFace, float clickX, float clickY, float clickZ, bool soundOnly/*=false*/) // 4J added soundOnly param 39{ 40 if (soundOnly) return false; 41 interact(level, x, y, z); 42 return Tile::use(level, x, y, z, player, clickedFace, clickX, clickY, clickZ); 43} 44 45void RedStoneOreTile::interact(Level *level, int x, int y, int z) 46{ 47 poofParticles(level, x, y, z); 48 if (level->isClientSide) return; // 4J added 49 if (id == Tile::redStoneOre_Id) 50 { 51 level->setTileAndUpdate(x, y, z, Tile::redStoneOre_lit_Id); 52 } 53} 54 55void RedStoneOreTile::tick(Level *level, int x, int y, int z, Random* random) 56{ 57 if (id == Tile::redStoneOre_lit_Id) 58 { 59 level->setTileAndUpdate(x, y, z, Tile::redStoneOre_Id); 60 } 61} 62 63int RedStoneOreTile::getResource(int data, Random *random, int playerBonusLevel) 64{ 65 return Item::redStone->id; 66} 67 68int RedStoneOreTile::getResourceCountForLootBonus(int bonusLevel, Random *random) 69{ 70 return getResourceCount(random) + random->nextInt(bonusLevel + 1); 71} 72 73int RedStoneOreTile::getResourceCount(Random *random) 74{ 75 return 4 + random->nextInt(2); 76} 77 78void RedStoneOreTile::spawnResources(Level *level, int x, int y, int z, int data, float odds, int playerBonusLevel) 79{ 80 Tile::spawnResources(level, x, y, z, data, odds, playerBonusLevel); 81 82 // also spawn experience if the block is broken 83 if (getResource(data, level->random, playerBonusLevel) != id) 84 { 85 int magicCount = 1 + level->random->nextInt(5); 86 popExperience(level, x, y, z, magicCount); 87 } 88} 89 90void RedStoneOreTile::animateTick(Level *level, int x, int y, int z, Random *random) 91{ 92 if (lit) 93 { 94 poofParticles(level, x, y, z); 95 } 96} 97 98void RedStoneOreTile::poofParticles(Level *level, int x, int y, int z) 99{ 100 Random *random = level->random; 101 double r = 1 / 16.0f; 102 for (int i = 0; i < 6; i++) 103 { 104 double xx = x + random->nextFloat(); 105 double yy = y + random->nextFloat(); 106 double zz = z + random->nextFloat(); 107 if (i == 0 && !level->isSolidRenderTile(x, y + 1, z)) yy = y + 1 + r; 108 if (i == 1 && !level->isSolidRenderTile(x, y - 1, z)) yy = y + 0 - r; 109 if (i == 2 && !level->isSolidRenderTile(x, y, z + 1)) zz = z + 1 + r; 110 if (i == 3 && !level->isSolidRenderTile(x, y, z - 1)) zz = z + 0 - r; 111 if (i == 4 && !level->isSolidRenderTile(x + 1, y, z)) xx = x + 1 + r; 112 if (i == 5 && !level->isSolidRenderTile(x - 1, y, z)) xx = x + 0 - r; 113 if (xx < x || xx > x + 1 || yy < 0 || yy > y + 1 || zz < z || zz > z + 1) 114 { 115 level->addParticle(eParticleType_reddust, xx, yy, zz, 0, 0, 0); 116 } 117 } 118} 119 120bool RedStoneOreTile::shouldTileTick(Level *level, int x,int y,int z) 121{ 122 return id == Tile::redStoneOre_lit_Id; 123} 124 125shared_ptr<ItemInstance> RedStoneOreTile::getSilkTouchItemInstance(int data) 126{ 127 return shared_ptr<ItemInstance>(new ItemInstance(Tile::redStoneOre)); 128}