Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
4.8 kB · 216 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216#include "stdafx.h"#include "net.minecraft.world.level.h"#include "net.minecraft.world.entity.player.h"#include "net.minecraft.world.level.tile.h"#include "net.minecraft.h"#include "TrapDoorTile.h"
TrapDoorTile::TrapDoorTile(int id, Material *material) : Tile(id, material,isSolidRender()){ float r = 0.5f; float h = 1.0f; setShape(0.5f - r, 0, 0.5f - r, 0.5f + r, h, 0.5f + r);}
bool TrapDoorTile::blocksLight(){ return false;}
bool TrapDoorTile::isSolidRender(bool isServerLevel){ return false;}
bool TrapDoorTile::isCubeShaped(){ return false;}
bool TrapDoorTile::isPathfindable(LevelSource *level, int x, int y, int z){ return !isOpen(level->getData(x, y, z));}
int TrapDoorTile::getRenderShape(){ return Tile::SHAPE_BLOCK;}
AABB *TrapDoorTile::getTileAABB(Level *level, int x, int y, int z){ updateShape(level, x, y, z); return Tile::getTileAABB(level, x, y, z);}
AABB *TrapDoorTile::getAABB(Level *level, int x, int y, int z){ updateShape(level, x, y, z); return Tile::getAABB(level, x, y, z);}
void TrapDoorTile::updateShape(LevelSource *level, int x, int y, int z, int forceData, shared_ptr<TileEntity> forceEntity) // 4J added forceData, forceEntity param{ setShape(level->getData(x, y, z));}
void TrapDoorTile::updateDefaultShape(){ float r = 3 / 16.0f; setShape(0, 0.5f - r / 2, 0, 1, 0.5f + r / 2, 1);}
void TrapDoorTile::setShape(int data){
float r = 3 / 16.0f; if ((data & TOP_MASK) != 0) { setShape(0, 1 - r, 0, 1, 1, 1); } else { setShape(0, 0, 0, 1, r, 1); } if (isOpen(data)) { if ((data & 3) == 0) setShape(0, 0, 1 - r, 1, 1, 1); if ((data & 3) == 1) setShape(0, 0, 0, 1, 1, r); if ((data & 3) == 2) setShape(1 - r, 0, 0, 1, 1, 1); if ((data & 3) == 3) setShape(0, 0, 0, r, 1, 1); }}
void TrapDoorTile::attack(Level *level, int x, int y, int z, shared_ptr<Player> player){ //use(level, x, y, z, player, 0, 0, 0, 0);}
// 4J-PB - Adding a TestUse for tooltip displaybool TrapDoorTile::TestUse(){ return true;}
bool TrapDoorTile::use(Level *level, int x, int y, int z, shared_ptr<Player> player, int clickedFace, float clickX, float clickY, float clickZ, bool soundOnly/*=false*/) // 4J added soundOnly param{ if (material == Material::metal) return true;
if (soundOnly) { // 4J - added - just do enough to play the sound level->levelEvent(player, LevelEvent::SOUND_OPEN_DOOR, x, y, z, 0); return false; }
int dir = level->getData(x, y, z); level->setData(x, y, z, dir ^ 4, Tile::UPDATE_CLIENTS);
level->levelEvent(player, LevelEvent::SOUND_OPEN_DOOR, x, y, z, 0); return true;}
void TrapDoorTile::setOpen(Level *level, int x, int y, int z, bool shouldOpen){ int dir = level->getData(x, y, z);
bool wasOpen = (dir & 4) > 0; if (wasOpen == shouldOpen) return;
level->setData(x, y, z, dir ^ 4, Tile::UPDATE_CLIENTS);
level->levelEvent(nullptr, LevelEvent::SOUND_OPEN_DOOR, x, y, z, 0);}
void TrapDoorTile::neighborChanged(Level *level, int x, int y, int z, int type){ if (level->isClientSide) return;
int data = level->getData(x, y, z); int xt = x; int zt = z; if ((data & 3) == 0) zt++; if ((data & 3) == 1) zt--; if ((data & 3) == 2) xt++; if ((data & 3) == 3) xt--;
if (!attachesTo(level->getTile(xt, y, zt))) { level->removeTile(x, y, z); spawnResources(level, x, y, z, data, 0); }
bool signal = level->hasNeighborSignal(x, y, z); if( signal || ((type > 0 && Tile::tiles[type]->isSignalSource())) ) { setOpen(level, x, y, z, signal); }}
HitResult *TrapDoorTile::clip(Level *level, int xt, int yt, int zt, Vec3 *a, Vec3 *b){ updateShape(level, xt, yt, zt); return Tile::clip(level, xt, yt, zt, a, b);}
int TrapDoorTile::getDir(int dir){ if ((dir & 4) == 0) { return ((dir - 1) & 3); } else { return (dir & 3); }}
int TrapDoorTile::getPlacedOnFaceDataValue(Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, int itemValue){ int dir = 0; if (face == 2) dir = 0; if (face == 3) dir = 1; if (face == 4) dir = 2; if (face == 5) dir = 3; if (face != Facing::UP && face != Facing::DOWN && clickY > 0.5f) dir |= TOP_MASK; return dir;}
bool TrapDoorTile::mayPlace(Level *level, int x, int y, int z, int face){ if (face == 0) return false; if (face == 1) return false; if (face == 2) z++; if (face == 3) z--; if (face == 4) x++; if (face == 5) x--;
return attachesTo(level->getTile(x, y, z));}
bool TrapDoorTile::isOpen(int data){ return (data & 4) != 0;}
bool TrapDoorTile::attachesTo(int id){ if (id <= 0) { return false; } Tile *tile = Tile::tiles[id];
return tile != NULL && (tile->material->isSolidBlocking() && tile->isCubeShaped()) || tile == Tile::glowstone || (dynamic_cast<HalfSlabTile *>(tile) != NULL) || (dynamic_cast<StairTile *>(tile) != NULL);}