mirror of
https://github.com/celisej567/mcpe.git
synced 2026-01-14 02:09:43 +03:00
51 lines
1.6 KiB
C++
51 lines
1.6 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 "Feature.hpp"
|
|
#include "world/level/Level.hpp"
|
|
|
|
SpringFeature::SpringFeature(int id)
|
|
{
|
|
m_ID = id;
|
|
}
|
|
|
|
bool SpringFeature::place(Level* level, Random* random, int x, int y, int z)
|
|
{
|
|
if (level->getTile(x, y + 1, z) != Tile::rock->m_ID)
|
|
return false;
|
|
|
|
if (level->getTile(x, y - 1, z) != Tile::rock->m_ID)
|
|
return false;
|
|
|
|
if (level->getTile(x, y, z) && level->getTile(x, y, z) != Tile::rock->m_ID)
|
|
return false;
|
|
|
|
int nRockTiles = 0;
|
|
int nEmptyTiles = 0;
|
|
|
|
if (level->getTile(x - 1, y, z) == Tile::rock->m_ID) nRockTiles++;
|
|
if (level->getTile(x + 1, y, z) == Tile::rock->m_ID) nRockTiles++;
|
|
if (level->getTile(x, y, z - 1) == Tile::rock->m_ID) nRockTiles++;
|
|
if (level->getTile(x, y, z + 1) == Tile::rock->m_ID) nRockTiles++;
|
|
|
|
if (level->isEmptyTile(x - 1, y, z)) nEmptyTiles++;
|
|
if (level->isEmptyTile(x + 1, y, z)) nEmptyTiles++;
|
|
if (level->isEmptyTile(x, y, z - 1)) nEmptyTiles++;
|
|
if (level->isEmptyTile(x, y, z + 1)) nEmptyTiles++;
|
|
|
|
if (nEmptyTiles != 1) return true;
|
|
if (nRockTiles != 3) return true;
|
|
|
|
level->setTile(x, y, z, m_ID);
|
|
|
|
level->m_bInstantTicking = true;
|
|
Tile::tiles[m_ID]->tick(level, x, y, z, random);
|
|
level->m_bInstantTicking = false;
|
|
return true;
|
|
}
|