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

93 lines
2.6 KiB
C++

#include "../Platform/stdafx.h"
#include "EnchantmentTableTile.h"
#include "TileEntities/EnchantmentTableTileEntity.h"
#include "../Headers/net.minecraft.world.level.h"
#include "../Headers/net.minecraft.h"
#include "../Headers/net.minecraft.world.h"
const std::wstring EnchantmentTableTile::TEXTURE_SIDE = L"enchantment_side";
const std::wstring EnchantmentTableTile::TEXTURE_TOP = L"enchantment_top";
const std::wstring EnchantmentTableTile::TEXTURE_BOTTOM = L"enchantment_bottom";
EnchantmentTableTile::EnchantmentTableTile(int id) : EntityTile(id, Material::stone, false)
{
updateDefaultShape();
setLightBlock(0);
iconTop = NULL;
iconBottom = NULL;
}
// 4J Added override
void EnchantmentTableTile::updateDefaultShape()
{
setShape(0, 0, 0, 1, 12 / 16.0f, 1);
}
bool EnchantmentTableTile::isCubeShaped()
{
return false;
}
void EnchantmentTableTile::animateTick(Level *level, int x, int y, int z, Random *random)
{
EntityTile::animateTick(level, x, y, z, random);
for (int xx = x - 2; xx <= x + 2; xx++)
{
for (int zz = z - 2; zz <= z + 2; zz++)
{
if (xx > x - 2 && xx < x + 2 && zz == z - 1)
{
zz = z + 2;
}
if (random->nextInt(16) != 0) continue;
for (int yy = y; yy <= y + 1; yy++)
{
if (level->getTile(xx, yy, zz) == Tile::bookshelf_Id)
{
if (!level->isEmptyTile((xx - x) / 2 + x, yy, (zz - z) / 2 + z)) break;
level->addParticle(eParticleType_enchantmenttable, x + 0.5, y + 2.0, z + 0.5, xx - x + random->nextFloat() - 0.5, yy - y - random->nextFloat() - 1, zz - z + random->nextFloat() - 0.5);
}
}
}
}
}
bool EnchantmentTableTile::isSolidRender(bool isServerLevel)
{
return false;
}
Icon *EnchantmentTableTile::getTexture(int face, int data)
{
if (face == Facing::DOWN) return iconBottom;
if (face == Facing::UP) return iconTop;
return icon;
}
std::shared_ptr<TileEntity> EnchantmentTableTile::newTileEntity(Level *level)
{
return std::shared_ptr<TileEntity>(new EnchantmentTableEntity());
}
bool EnchantmentTableTile::use(Level *level, int x, int y, int z, std::shared_ptr<Player> player, int clickedFace, float clickX, float clickY, float clickZ, bool soundOnly/*=false*/) // 4J added soundOnly param
{
if(soundOnly) return false;
if (level->isClientSide)
{
return true;
}
player->startEnchanting(x, y, z);
return true;
}
void EnchantmentTableTile::registerIcons(IconRegister *iconRegister)
{
icon = iconRegister->registerIcon(TEXTURE_SIDE);
iconTop = iconRegister->registerIcon(TEXTURE_TOP);
iconBottom = iconRegister->registerIcon(TEXTURE_BOTTOM);
}