the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 153 lines 3.0 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.entity.h" 3#include "net.minecraft.world.entity.player.h" 4#include "net.minecraft.world.item.h" 5#include "net.minecraft.world.level.h" 6#include "SynchedEntityData.h" 7#include "GenericStats.h" 8#include "AgableMob.h" 9 10AgableMob::AgableMob(Level *level) : PathfinderMob(level) 11{ 12 registeredBBWidth = -1; 13 registeredBBHeight = 0; 14} 15 16bool AgableMob::mobInteract(shared_ptr<Player> player) 17{ 18 shared_ptr<ItemInstance> item = player->inventory->getSelected(); 19 20 if (item != NULL && item->id == Item::spawnEgg_Id) 21 { 22 if (!level->isClientSide) 23 { 24 eINSTANCEOF classToSpawn = EntityIO::getClass(item->getAuxValue()); 25 if (classToSpawn != eTYPE_NOTSET && (classToSpawn & eTYPE_AGABLE_MOB) == eTYPE_AGABLE_MOB && classToSpawn == GetType() ) // 4J Added GetType() check to only spawn same type 26 { 27 int error; 28 shared_ptr<Entity> result = SpawnEggItem::canSpawn(item->getAuxValue(), level, &error); 29 30 if (result != NULL) 31 { 32 shared_ptr<AgableMob> offspring = getBreedOffspring(dynamic_pointer_cast<AgableMob>(shared_from_this())); 33 if (offspring != NULL) 34 { 35 offspring->setAge(BABY_START_AGE); 36 offspring->moveTo(x, y, z, 0, 0); 37 38 level->addEntity(offspring); 39 40 if (!player->abilities.instabuild) 41 { 42 item->count--; 43 44 if (item->count <= 0) 45 { 46 player->inventory->setItem(player->inventory->selected, nullptr); 47 } 48 } 49 } 50 } 51 else 52 { 53 SpawnEggItem::DisplaySpawnError(player, error); 54 } 55 } 56 } 57 return true; 58 } 59 60 return false; 61} 62 63void AgableMob::defineSynchedData() 64{ 65 PathfinderMob::defineSynchedData(); 66 entityData->define(DATA_AGE_ID, 0); 67} 68 69int AgableMob::getAge() 70{ 71 return entityData->getInteger(DATA_AGE_ID); 72} 73 74void AgableMob::ageUp(int seconds) 75{ 76 int age = getAge(); 77 age += seconds * SharedConstants::TICKS_PER_SECOND; 78 if (age > 0) 79 { 80 age = 0; 81 } 82 setAge(age); 83} 84 85void AgableMob::setAge(int age) 86{ 87 entityData->set(DATA_AGE_ID, age); 88 updateSize(isBaby()); 89} 90 91void AgableMob::addAdditonalSaveData(CompoundTag *tag) 92{ 93 PathfinderMob::addAdditonalSaveData(tag); 94 tag->putInt(L"Age", getAge()); 95} 96 97void AgableMob::readAdditionalSaveData(CompoundTag *tag) 98{ 99 PathfinderMob::readAdditionalSaveData(tag); 100 setAge(tag->getInt(L"Age")); 101} 102 103void AgableMob::aiStep() 104{ 105 PathfinderMob::aiStep(); 106 107 if(level->isClientSide) 108 { 109 updateSize(isBaby()); 110 } 111 else 112 { 113 int age = getAge(); 114 if (age < 0) 115 { 116 age++; 117 setAge(age); 118 } 119 else if (age > 0) 120 { 121 age--; 122 setAge(age); 123 } 124 } 125} 126 127bool AgableMob::isBaby() 128{ 129 return getAge() < 0; 130} 131 132void AgableMob::updateSize(bool isBaby) 133{ 134 internalSetSize(isBaby ? .5f : 1.0f); 135} 136 137void AgableMob::setSize(float w, float h) 138{ 139 bool inited = registeredBBWidth > 0; 140 141 registeredBBWidth = w; 142 registeredBBHeight = h; 143 144 if (!inited) 145 { 146 internalSetSize(1.0f); 147 } 148} 149 150void AgableMob::internalSetSize(float scale) 151{ 152 PathfinderMob::setSize(registeredBBWidth * scale, registeredBBHeight * scale); 153}