4jcraft/Minecraft.World/Blocks/FenceTile.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

133 lines
2.7 KiB
C++

#include "../Platform/stdafx.h"
#include "../Headers/net.minecraft.world.level.h"
#include "../Headers/net.minecraft.world.phys.h"
#include "../Headers/net.minecraft.world.h"
#include "FenceTile.h"
FenceTile::FenceTile(int id, const std::wstring &texture, Material *material) : Tile( id, material, false)
{
this->texture = texture;
}
AABB *FenceTile::getAABB(Level *level, int x, int y, int z)
{
bool n = connectsTo(level, x, y, z - 1);
bool s = connectsTo(level, x, y, z + 1);
bool w = connectsTo(level, x - 1, y, z);
bool e = connectsTo(level, x + 1, y, z);
float west = 6.0f / 16.0f;
float east = 10.0f / 16.0f;
float north = 6.0f / 16.0f;
float south = 10.0f / 16.0f;
if (n)
{
north = 0;
}
if (s)
{
south = 1;
}
if (w)
{
west = 0;
}
if (e)
{
east = 1;
}
return AABB::newTemp(x + west, y, z + north, x + east, y + 1.5f, z + south);
}
void FenceTile::updateShape(LevelSource *level, int x, int y, int z, int forceData, std::shared_ptr<TileEntity> forceEntity) // 4J added forceData, forceEntity param
{
bool n = connectsTo(level, x, y, z - 1);
bool s = connectsTo(level, x, y, z + 1);
bool w = connectsTo(level, x - 1, y, z);
bool e = connectsTo(level, x + 1, y, z);
float west = 6.0f / 16.0f;
float east = 10.0f / 16.0f;
float north = 6.0f / 16.0f;
float south = 10.0f / 16.0f;
if (n)
{
north = 0;
}
if (s)
{
south = 1;
}
if (w)
{
west = 0;
}
if (e)
{
east = 1;
}
setShape(west, 0, north, east, 1.0f, south);
}
bool FenceTile::blocksLight()
{
return false;
}
bool FenceTile::isSolidRender(bool isServerLevel)
{
return false;
}
bool FenceTile::isCubeShaped()
{
return false;
}
bool FenceTile::isPathfindable(LevelSource *level, int x, int y, int z)
{
return false;
}
int FenceTile::getRenderShape()
{
return Tile::SHAPE_FENCE;
}
bool FenceTile::connectsTo(LevelSource *level, int x, int y, int z)
{
int tile = level->getTile(x, y, z);
if (tile == id || tile == Tile::fenceGate_Id)
{
return true;
}
Tile *tileInstance = Tile::tiles[tile];
if (tileInstance != NULL)
{
if (tileInstance->material->isSolidBlocking() && tileInstance->isCubeShaped())
{
return tileInstance->material != Material::vegetable;
}
}
return false;
}
bool FenceTile::isFence(int tile)
{
return tile == Tile::fence_Id || tile == Tile::netherFence_Id;
}
void FenceTile::registerIcons(IconRegister *iconRegister)
{
icon = iconRegister->registerIcon(texture);
}
bool FenceTile::shouldRenderFace(LevelSource *level, int x, int y, int z, int face)
{
return true;
}