mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-24 07:23:41 +00:00
82 lines
2.7 KiB
C++
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;
|
|
}
|
|
} |