4jcraft/Minecraft.World/Blocks/TheEndPortalFrameTile.cpp
MatthewBeshay dfb0e3b03e refactor: replace NULL with nullptr across C++ codebase
Excludes vendored C libs (zlib, Miles, DirectXMath, boost, Iggy).
2026-03-30 16:25:52 +11:00

82 lines
2.7 KiB
C++

#include "../Platform/stdafx.h"
#include "TheEndPortalFrameTile.h"
#include "../Headers/net.minecraft.world.level.h"
#include "../Headers/net.minecraft.world.level.redstone.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 = nullptr;
iconEye = nullptr;
}
Icon* TheEndPortalFrameTile::getTexture(int face, int data) {
if (face == Facing::UP) {
return iconTop;
}
if (face == Facing::DOWN) {
return Tile::endStone->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<LivingEntity> by,
std::shared_ptr<ItemInstance> itemInstance) {
int dir = (((Mth::floor(by->yRot * 4 / (360) + 0.5)) & 3) + 2) % 4;
level->setData(x, y, z, dir, Tile::UPDATE_CLIENTS);
}
bool TheEndPortalFrameTile::hasAnalogOutputSignal() { return true; }
int TheEndPortalFrameTile::getAnalogOutputSignal(Level* level, int x, int y,
int z, int dir) {
int data = level->getData(x, y, z);
if (hasEye(data)) {
return Redstone::SIGNAL_MAX;
} else {
return Redstone::SIGNAL_NONE;
}
}