mirror of
https://github.com/celisej567/mcpe.git
synced 2025-12-31 17:49:17 +03:00
115 lines
2.2 KiB
C++
115 lines
2.2 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 "FarmTile.hpp"
|
|
#include "world/level/Level.hpp"
|
|
|
|
FarmTile::FarmTile(int a, Material* c) : Tile(a, c)
|
|
{
|
|
m_TextureFrame = TEXTURE_FARMLAND_DRY;
|
|
|
|
setTicking(true);
|
|
setShape(0, 0, 0, 1, 15.0f / 16.0f, 1.0f);
|
|
setLightBlock(255);
|
|
}
|
|
|
|
AABB* FarmTile::getAABB(Level*, int x, int y, int z)
|
|
{
|
|
// a full block
|
|
m_aabbReturned = AABB(
|
|
float(x),
|
|
float(y),
|
|
float(z),
|
|
float(x + 1),
|
|
float(y + 1),
|
|
float(z + 1)
|
|
);
|
|
|
|
return &m_aabbReturned;
|
|
}
|
|
|
|
int FarmTile::getResource(int x, Random* random)
|
|
{
|
|
return Tile::dirt->getResource(x, random);
|
|
}
|
|
|
|
int FarmTile::getTexture(int dir, int data)
|
|
{
|
|
if (dir == DIR_YPOS)
|
|
{
|
|
if (data > 0)
|
|
return m_TextureFrame - 1;
|
|
|
|
return m_TextureFrame;
|
|
}
|
|
|
|
return TEXTURE_DIRT;
|
|
}
|
|
|
|
bool FarmTile::isCubeShaped()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool FarmTile::isSolidRender()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool FarmTile::isNearWater(Level* level, int x, int y, int z)
|
|
{
|
|
for (int ax = x - 4; ax <= x + 4; ax++)
|
|
{
|
|
for (int ay = y; ay <= y + 1; ay++)
|
|
{
|
|
for (int az = z - 4; az <= z + 4; az++)
|
|
{
|
|
if (level->getMaterial(ax, ay, az) == Material::water)
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void FarmTile::neighborChanged(Level* level, int x, int y, int z, int a)
|
|
{
|
|
if (level->getMaterial(x, y + 1, z)->isSolid())
|
|
level->setTile(x, y, z, Tile::dirt->m_ID);
|
|
}
|
|
|
|
void FarmTile::stepOn(Level* level, int x, int y, int z, Entity* pEnt)
|
|
{
|
|
if (level->m_random.genrand_int32() % 4 == 0)
|
|
level->setTile(x, y, z, Tile::dirt->m_ID);
|
|
}
|
|
|
|
void FarmTile::tick(Level* level, int x, int y, int z, Random* random)
|
|
{
|
|
int val = random->genrand_int32();
|
|
|
|
//@HUH: weird way of saying val % 5 == 0
|
|
if (val != 5 * (val / 5))
|
|
return;
|
|
|
|
if (isNearWater(level, x, y, z))
|
|
{
|
|
level->setData(x, y, z, 7);
|
|
}
|
|
else
|
|
{
|
|
int data = level->getData(x, y, z);
|
|
|
|
if (data <= 0)
|
|
level->setTile(x, y, z, Tile::dirt->m_ID);
|
|
else
|
|
level->setData(x, y, z, data - 1);
|
|
}
|
|
}
|