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

84 lines
2 KiB
C++

#include "../Platform/stdafx.h"
#include "TheEndPortalFrameTile.h"
#include "../Headers/net.minecraft.world.level.h"
#include "../Headers/net.minecraft.world.h"
#include "../Util/Facing.h"
const std::wstring TheEndPortalFrameTile::TEXTURE_EYE = L"endframe_eye";
TheEndPortalFrameTile::TheEndPortalFrameTile(int id) : Tile(id, Material::glass, false )
{
iconTop = NULL;
iconEye = NULL;
}
Icon *TheEndPortalFrameTile::getTexture(int face, int data)
{
if (face == Facing::UP)
{
return iconTop;
}
if (face == Facing::DOWN)
{
return Tile::whiteStone->getTexture(face);
}
return icon;
}
void TheEndPortalFrameTile::registerIcons(IconRegister *iconRegister)
{
icon = iconRegister->registerIcon(L"endframe_side");
iconTop = iconRegister->registerIcon(L"endframe_top");
iconEye = iconRegister->registerIcon(L"endframe_eye");
}
Icon *TheEndPortalFrameTile::getEye()
{
return iconEye;
}
bool TheEndPortalFrameTile::isSolidRender(bool isServerLevel)
{
return false;
}
int TheEndPortalFrameTile::getRenderShape()
{
return SHAPE_PORTAL_FRAME;
}
void TheEndPortalFrameTile::updateDefaultShape()
{
setShape(0, 0, 0, 1, 13.0f / 16.0f, 1);
}
void TheEndPortalFrameTile::addAABBs(Level *level, int x, int y, int z, AABB *box, AABBList *boxes, std::shared_ptr<Entity> source)
{
setShape(0, 0, 0, 1, 13.0f / 16.0f, 1);
Tile::addAABBs(level, x, y, z, box, boxes, source);
int data = level->getData(x, y, z);
if (hasEye(data))
{
setShape(5.0f / 16.0f, 13.0f / 16.0f, 5.0f / 16.0f, 11.0f / 16.0f, 1, 11.0f / 16.0f);
Tile::addAABBs(level, x, y, z, box, boxes, source);
}
updateDefaultShape();
}
bool TheEndPortalFrameTile::hasEye(int data)
{
return (data & EYE_BIT) != 0;
}
int TheEndPortalFrameTile::getResource(int data, Random *random, int playerBonusLevel)
{
return 0;
}
void TheEndPortalFrameTile::setPlacedBy(Level *level, int x, int y, int z, std::shared_ptr<Mob> by)
{
int dir = (((Mth::floor(by->yRot * 4 / (360) + 0.5)) & 3) + 2) % 4;
level->setData(x, y, z, dir);
}