mirror of
https://github.com/celisej567/mcpe.git
synced 2025-12-31 17:49:17 +03:00
120 lines
2.8 KiB
C++
120 lines
2.8 KiB
C++
/********************************************************************
|
|
Minecraft: Pocket Edition - Decompilation Project
|
|
Copyright (C) 2023 iProgramInCpp
|
|
|
|
The following code is licensed under the BSD 1 clause license.
|
|
SPDX-License-Identifier: BSD-1-Clause
|
|
********************************************************************/
|
|
|
|
#include "RedStoneOreTile.hpp"
|
|
#include "world/level/Level.hpp"
|
|
|
|
RedStoneOreTile::RedStoneOreTile(int id, int texture, bool bLit) : Tile(id, texture, Material::stone)
|
|
{
|
|
m_bLit = bLit;
|
|
if (bLit)
|
|
setTicking(true);
|
|
}
|
|
|
|
int RedStoneOreTile::getResource(int x, Random* random)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int RedStoneOreTile::getResourceCount(Random* random)
|
|
{
|
|
return random->genrand_int32() % 2 + 4;
|
|
}
|
|
|
|
int RedStoneOreTile::getSpawnResourcesAuxValue(int x)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int RedStoneOreTile::poofParticles(Level* level, int x, int y, int z)
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
float xo = float(x) + level->m_random.nextFloat();
|
|
float yo = float(y) + level->m_random.nextFloat();
|
|
float zo = float(z) + level->m_random.nextFloat();
|
|
|
|
switch (i)
|
|
{
|
|
case DIR_YNEG:
|
|
if (!level->isSolidTile(x, y + 1, z))
|
|
yo = float(y + 1) + 0.0625f;
|
|
break;
|
|
case DIR_YPOS:
|
|
if (!level->isSolidTile(x, y - 1, z))
|
|
yo = float(y) - 0.0625f;
|
|
break;
|
|
case DIR_ZNEG:
|
|
if (!level->isSolidTile(x, y, z + 1))
|
|
zo = float(z + 1) + 0.0625f;
|
|
break;
|
|
case DIR_ZPOS:
|
|
if (!level->isSolidTile(x, y, z - 1))
|
|
zo = float(z) - 0.0625f;
|
|
break;
|
|
case DIR_XNEG:
|
|
if (!level->isSolidTile(x + 1, y, z))
|
|
xo = float(x + 1) + 0.0625f;
|
|
break;
|
|
case DIR_XPOS:
|
|
if (!level->isSolidTile(x - 1, y, z))
|
|
xo = float(x) - 0.0625f;
|
|
break;
|
|
}
|
|
|
|
if (xo < float(x) || float(x + 1) < xo || yo < 0.0f || float(y + 1) < yo || zo < float(z) || float(z + 1) < zo)
|
|
{
|
|
level->addParticle("reddust", xo, yo, zo, 0.0f, 0.0f, 0.0f);
|
|
}
|
|
}
|
|
|
|
// @HUH: For whatever reason??
|
|
return 1300;
|
|
}
|
|
|
|
void RedStoneOreTile::animateTick(Level* level, int x, int y, int z, Random* random)
|
|
{
|
|
if (m_bLit)
|
|
poofParticles(level, x, y, z);
|
|
}
|
|
|
|
void RedStoneOreTile::tick(Level* level, int x, int y, int z, Random* random)
|
|
{
|
|
if (m_ID == Tile::redStoneOre_lit->m_ID)
|
|
level->setTile(x, y, z, Tile::redStoneOre->m_ID);
|
|
}
|
|
|
|
void RedStoneOreTile::interact(Level* level, int x, int y, int z)
|
|
{
|
|
poofParticles(level, x, y, z);
|
|
|
|
if (m_ID == Tile::redStoneOre->m_ID)
|
|
level->setTile(x, y, z, Tile::redStoneOre_lit->m_ID);
|
|
}
|
|
|
|
void RedStoneOreTile::attack(Level* level, int x, int y, int z, Player* player)
|
|
{
|
|
interact(level, x, y, z);
|
|
}
|
|
|
|
int RedStoneOreTile::use(Level* level, int x, int y, int z, Player* player)
|
|
{
|
|
interact(level, x, y, z);
|
|
return Tile::use(level, x, y, z, player);
|
|
}
|
|
|
|
void RedStoneOreTile::stepOn(Level* level, int x, int y, int z, Entity* entity)
|
|
{
|
|
interact(level, x, y, z);
|
|
}
|
|
|
|
int RedStoneOreTile::getTickDelay()
|
|
{
|
|
return 30;
|
|
}
|