4jcraft/Minecraft.World/Blocks/PlantTile.cpp
Nikita Edel a006cc5aa0 uninitialized vptr
the vptr to isSolidRender() is not known before contruction of the Tile. Its true by default. if false, need to pass false. that is what i did. i verfied what isSolidRender() is in every file. and did exactly what isSolidRender() would return
2026-03-10 23:22:34 +01:00

88 lines
1.7 KiB
C++

#include "../Platform/stdafx.h"
#include "../Headers/net.minecraft.world.level.h"
#include "GrassTile.h"
#include "PlantTile.h"
void Bush::_init()
{
setTicking(true);
updateDefaultShape();
}
Bush::Bush(int id, Material *material) : Tile(id, material, false)
{
_init();
}
Bush::Bush(int id) : Tile(id, Material::plant, false)
{
_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;
}