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.3 kB · 221 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222#include "stdafx.h"#include "com.mojang.nbt.h"#include "PistonPieceEntity.h"#include "PistonMovingPiece.h"#include "net.minecraft.world.level.h"#include "Facing.h"#include "Tile.h"
PistonPieceEntity::PistonPieceEntity(){ // for the tile entity loader
// 4J - added initialisers this->id = 0; this->data = 0; this->facing = 0; this->extending = 0; this->_isSourcePiston = 0; progress = 0.0f; progressO = 0.0f;}
PistonPieceEntity::PistonPieceEntity(int id, int data, int facing, bool extending, bool isSourcePiston) : TileEntity(){ // 4J - added initialisers progress = 0.0f; progressO = 0.0f;
this->id = id; this->data = data; this->facing = facing; this->extending = extending; this->_isSourcePiston = isSourcePiston;}
int PistonPieceEntity::getId(){ return id;}
int PistonPieceEntity::getData(){ return data;}
bool PistonPieceEntity::isExtending(){ return extending;}
int PistonPieceEntity::getFacing(){ return facing;}
bool PistonPieceEntity::isSourcePiston(){ return _isSourcePiston;}
float PistonPieceEntity::getProgress(float a){ if (a > 1) { a = 1; } return progressO + (progress - progressO) * a;}
float PistonPieceEntity::getXOff(float a){ if (extending) { return (getProgress(a) - 1.0f) * Facing::STEP_X[facing]; } else { return (1.0f - getProgress(a)) * Facing::STEP_X[facing]; }}
float PistonPieceEntity::getYOff(float a){ if (extending) { return (getProgress(a) - 1.0f) * Facing::STEP_Y[facing]; } else { return (1.0f - getProgress(a)) * Facing::STEP_Y[facing]; }}
float PistonPieceEntity::getZOff(float a){ if (extending) { return (getProgress(a) - 1.0f) * Facing::STEP_Z[facing]; } else { return (1.0f - getProgress(a)) * Facing::STEP_Z[facing]; }}
void PistonPieceEntity::moveCollidedEntities(float progress, float amount){ if (extending) { progress = 1.0f - progress; } else { progress = progress - 1.0f; }
AABB *aabb = Tile::pistonMovingPiece->getAABB(level, x, y, z, id, progress, facing); if (aabb != NULL) { vector<shared_ptr<Entity> > *entities = level->getEntities(nullptr, aabb); if (!entities->empty()) { vector< shared_ptr<Entity> > collisionHolder; for( AUTO_VAR(it, entities->begin()); it != entities->end(); it++ ) { collisionHolder.push_back(*it); }
for( AUTO_VAR(it, collisionHolder.begin()); it != collisionHolder.end(); it++ ) { (*it)->move(amount * Facing::STEP_X[facing], amount * Facing::STEP_Y[facing], amount * Facing::STEP_Z[facing]); } } }}
void PistonPieceEntity::finalTick(){ if (progressO < 1 && level != NULL) { progressO = progress = 1; level->removeTileEntity(x, y, z); setRemoved(); if (level->getTile(x, y, z) == Tile::pistonMovingPiece_Id) { level->setTileAndData(x, y, z, id, data, Tile::UPDATE_ALL); level->neighborChanged(x, y, z, id); } }}
void PistonPieceEntity::tick(){ progressO = progress;
if (progressO >= 1) { moveCollidedEntities(1, 4 / 16.f); level->removeTileEntity(x, y, z); setRemoved(); if (level->getTile(x, y, z) == Tile::pistonMovingPiece_Id) { level->setTileAndData(x, y, z, id, data, Tile::UPDATE_ALL); level->neighborChanged(x, y, z, id); } return; }
progress += .5f; if (progress >= 1) { progress = 1; }
if (extending) { moveCollidedEntities(progress, (progress - progressO) + 1.0f / 16.0f); }}
void PistonPieceEntity::load(CompoundTag *tag){ TileEntity::load(tag);
id = tag->getInt(L"blockId"); data = tag->getInt(L"blockData"); facing = tag->getInt(L"facing"); progressO = progress = tag->getFloat(L"progress"); extending = tag->getBoolean(L"extending");}
void PistonPieceEntity::save(CompoundTag *tag){ TileEntity::save(tag);
tag->putInt(L"blockId", id); tag->putInt(L"blockData", data); tag->putInt(L"facing", facing); tag->putFloat(L"progress", progressO); tag->putBoolean(L"extending", extending);}
// 4J Addedshared_ptr<TileEntity> PistonPieceEntity::clone(){ shared_ptr<PistonPieceEntity> result = shared_ptr<PistonPieceEntity>( new PistonPieceEntity() ); TileEntity::clone(result);
result->id = id; result->data = data; result->facing = facing; result->extending = extending; result->_isSourcePiston = _isSourcePiston; result->progress = progress; result->progressO = progressO; return result;}