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.
3.0 kB · 153 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154#include "stdafx.h"#include "net.minecraft.world.entity.h"#include "net.minecraft.world.entity.player.h"#include "net.minecraft.world.item.h"#include "net.minecraft.world.level.h"#include "SynchedEntityData.h"#include "GenericStats.h"#include "AgableMob.h"
AgableMob::AgableMob(Level *level) : PathfinderMob(level){ registeredBBWidth = -1; registeredBBHeight = 0;}
bool AgableMob::mobInteract(shared_ptr<Player> player){ shared_ptr<ItemInstance> item = player->inventory->getSelected();
if (item != NULL && item->id == Item::spawnEgg_Id) { if (!level->isClientSide) { eINSTANCEOF classToSpawn = EntityIO::getClass(item->getAuxValue()); if (classToSpawn != eTYPE_NOTSET && (classToSpawn & eTYPE_AGABLE_MOB) == eTYPE_AGABLE_MOB && classToSpawn == GetType() ) // 4J Added GetType() check to only spawn same type { int error; shared_ptr<Entity> result = SpawnEggItem::canSpawn(item->getAuxValue(), level, &error);
if (result != NULL) { shared_ptr<AgableMob> offspring = getBreedOffspring(dynamic_pointer_cast<AgableMob>(shared_from_this())); if (offspring != NULL) { offspring->setAge(BABY_START_AGE); offspring->moveTo(x, y, z, 0, 0);
level->addEntity(offspring);
if (!player->abilities.instabuild) { item->count--;
if (item->count <= 0) { player->inventory->setItem(player->inventory->selected, nullptr); } } } } else { SpawnEggItem::DisplaySpawnError(player, error); } } } return true; }
return false;}
void AgableMob::defineSynchedData(){ PathfinderMob::defineSynchedData(); entityData->define(DATA_AGE_ID, 0);}
int AgableMob::getAge(){ return entityData->getInteger(DATA_AGE_ID);}
void AgableMob::ageUp(int seconds){ int age = getAge(); age += seconds * SharedConstants::TICKS_PER_SECOND; if (age > 0) { age = 0; } setAge(age);}
void AgableMob::setAge(int age){ entityData->set(DATA_AGE_ID, age); updateSize(isBaby());}
void AgableMob::addAdditonalSaveData(CompoundTag *tag){ PathfinderMob::addAdditonalSaveData(tag); tag->putInt(L"Age", getAge());}
void AgableMob::readAdditionalSaveData(CompoundTag *tag){ PathfinderMob::readAdditionalSaveData(tag); setAge(tag->getInt(L"Age"));}
void AgableMob::aiStep(){ PathfinderMob::aiStep();
if(level->isClientSide) { updateSize(isBaby()); } else { int age = getAge(); if (age < 0) { age++; setAge(age); } else if (age > 0) { age--; setAge(age); } }}
bool AgableMob::isBaby(){ return getAge() < 0;}
void AgableMob::updateSize(bool isBaby){ internalSetSize(isBaby ? .5f : 1.0f);}
void AgableMob::setSize(float w, float h){ bool inited = registeredBBWidth > 0;
registeredBBWidth = w; registeredBBHeight = h;
if (!inited) { internalSetSize(1.0f); }}
void AgableMob::internalSetSize(float scale){ PathfinderMob::setSize(registeredBBWidth * scale, registeredBBHeight * scale);}