#include "stdafx.h"
#include "net.minecraft.world.level.h"
#include "GrassTile.h"
#include "Bush.h"

void Bush::_init()
{
    setTicking(true);
    updateDefaultShape();
}

Bush::Bush(int id, Material *material) : Tile(id, material, isSolidRender())
{
    _init();
}

Bush::Bush(int id) : Tile(id, Material::plant, isSolidRender())
{
	_init();
}

// 4J Added override
void Bush::updateDefaultShape()
{
    float ss = 0.2f;
    this->setShape(0.5f - ss, 0, 0.5f - ss, 0.5f + ss, ss * 3, 0.5f + ss);
}

bool Bush::mayPlace(Level *level, int x, int y, int z)
{
	return Tile::mayPlace(level, x, y, z) && mayPlaceOn(level->getTile(x, y - 1, z));
}

bool Bush::mayPlaceOn(int tile)
{
	return tile == Tile::grass_Id || tile == Tile::dirt_Id || tile == Tile::farmland_Id;
}

void Bush::neighborChanged(Level *level, int x, int y, int z, int type)
{
	Tile::neighborChanged(level, x, y, z, type);
	checkAlive(level, x, y, z);
}

void Bush::tick(Level *level, int x, int y, int z, Random *random)
{
	checkAlive(level, x, y, z);
}

void Bush::checkAlive(Level *level, int x, int y, int z)
{
    if (!canSurvive(level, x, y, z))
	{
        this->spawnResources(level, x, y, z, level->getData(x, y, z), 0);
        level->setTile(x, y, z, 0);
    }
}

bool Bush::canSurvive(Level *level, int x, int y, int z)
{
	return ( level->getDaytimeRawBrightness(x, y, z) >= 8 || (level->canSeeSky(x, y, z))) && mayPlaceOn(level->getTile(x, y - 1, z));
}

AABB *Bush::getAABB(Level *level, int x, int y, int z)
{
	return NULL;
}

bool Bush::blocksLight()
{
	return false;
}

bool Bush::isSolidRender(bool isServerLevel)
{
	return false;
}

bool Bush::isCubeShaped()
{
	return false;
}

int Bush::getRenderShape()
{
	return Tile::SHAPE_CROSS_TEXTURE;
}
