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.0 kB · 157 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157#include "stdafx.h"#include "net.minecraft.world.entity.player.h"#include "net.minecraft.world.item.h"#include "net.minecraft.world.level.h"#include "net.minecraft.world.phys.h"#include "LeashFenceKnotEntity.h"
void LeashFenceKnotEntity::_init(){ defineSynchedData();}
LeashFenceKnotEntity::LeashFenceKnotEntity(Level *level) : HangingEntity(level){ _init();}
LeashFenceKnotEntity::LeashFenceKnotEntity(Level *level, int xTile, int yTile, int zTile) : HangingEntity(level, xTile, yTile, zTile, 0){ _init(); setPos(xTile + .5, yTile + .5, zTile + .5);}
void LeashFenceKnotEntity::defineSynchedData(){ HangingEntity::defineSynchedData();}
void LeashFenceKnotEntity::setDir(int dir){ // override to do nothing, knots don't have directions}
int LeashFenceKnotEntity::getWidth(){ return 9;}
int LeashFenceKnotEntity::getHeight(){ return 9;}
bool LeashFenceKnotEntity::shouldRenderAtSqrDistance(double distance){ return distance < 32 * 32;}
void LeashFenceKnotEntity::dropItem(shared_ptr<Entity> causedBy){
}
bool LeashFenceKnotEntity::save(CompoundTag *entityTag){ // knots are not saved, they are recreated by the entities that are tied return false;}
void LeashFenceKnotEntity::addAdditonalSaveData(CompoundTag *tag){}
void LeashFenceKnotEntity::readAdditionalSaveData(CompoundTag *tag){}
bool LeashFenceKnotEntity::interact(shared_ptr<Player> player){ shared_ptr<ItemInstance> item = player->getCarriedItem();
bool attachedMob = false; if (item != NULL && item->id == Item::lead_Id) { if (!level->isClientSide) { // look for entities that can be attached to the fence double range = 7; vector<shared_ptr<Entity> > *mobs = level->getEntitiesOfClass(typeid(Mob), AABB::newTemp(x - range, y - range, z - range, x + range, y + range, z + range)); if (mobs != NULL) { for(AUTO_VAR(it, mobs->begin()); it != mobs->end(); ++it) { shared_ptr<Mob> mob = dynamic_pointer_cast<Mob>( *it ); if (mob->isLeashed() && mob->getLeashHolder() == player) { mob->setLeashedTo(shared_from_this(), true); attachedMob = true; } } delete mobs; } } } if (!level->isClientSide && !attachedMob) { remove();
if (player->abilities.instabuild) { // if the player is in creative mode, attempt to remove all leashed mobs without dropping additional items double range = 7; vector<shared_ptr<Entity> > *mobs = level->getEntitiesOfClass(typeid(Mob), AABB::newTemp(x - range, y - range, z - range, x + range, y + range, z + range)); if (mobs != NULL) { for(AUTO_VAR(it, mobs->begin()); it != mobs->end(); ++it) { shared_ptr<Mob> mob = dynamic_pointer_cast<Mob>( *it ); if (mob->isLeashed() && mob->getLeashHolder() == shared_from_this()) { mob->dropLeash(true, false); } } delete mobs; } } } return true;}
bool LeashFenceKnotEntity::survives(){ // knots are placed on top of fence tiles int tile = level->getTile(xTile, yTile, zTile); if (Tile::tiles[tile] != NULL && Tile::tiles[tile]->getRenderShape() == Tile::SHAPE_FENCE) { return true; } return false;}
shared_ptr<LeashFenceKnotEntity> LeashFenceKnotEntity::createAndAddKnot(Level *level, int x, int y, int z){ shared_ptr<LeashFenceKnotEntity> knot = shared_ptr<LeashFenceKnotEntity>( new LeashFenceKnotEntity(level, x, y, z) ); knot->forcedLoading = true; level->addEntity(knot); return knot;}
shared_ptr<LeashFenceKnotEntity> LeashFenceKnotEntity::findKnotAt(Level *level, int x, int y, int z){ vector<shared_ptr<Entity> > *knots = level->getEntitiesOfClass(typeid(LeashFenceKnotEntity), AABB::newTemp(x - 1.0, y - 1.0, z - 1.0, x + 1.0, y + 1.0, z + 1.0)); if (knots != NULL) { for(AUTO_VAR(it, knots->begin()); it != knots->end(); ++it) { shared_ptr<LeashFenceKnotEntity> knot = dynamic_pointer_cast<LeashFenceKnotEntity>( *it ); if (knot->xTile == x && knot->yTile == y && knot->zTile == z) { delete knots; return knot; } } delete knots; } return nullptr;}