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