the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "net.minecraft.world.level.h"
3#include "net.minecraft.world.level.tile.h"
4#include "net.minecraft.world.item.h"
5#include "net.minecraft.world.entity.player.h"
6#include "net.minecraft.world.entity.item.h"
7#include "..\Minecraft.Client\Textures.h"
8#include "MushroomCow.h"
9#include "MobCategory.h"
10#include "AABB.h"
11
12
13
14MushroomCow::MushroomCow(Level *level) : Cow(level)
15{
16 // 4J Stu - This function call had to be moved here from the Entity ctor to ensure that
17 // the derived version of the function is called
18 this->defineSynchedData();
19 setHealth(getMaxHealth());
20
21 this->setSize(0.9f, 1.3f);
22}
23
24bool MushroomCow::mobInteract(shared_ptr<Player> player)
25{
26 shared_ptr<ItemInstance> item = player->inventory->getSelected();
27 if (item != NULL && item->id == Item::bowl_Id && getAge() >= 0)
28 {
29 if (item->count == 1)
30 {
31 player->inventory->setItem(player->inventory->selected, shared_ptr<ItemInstance>( new ItemInstance(Item::mushroomStew) ) );
32 return true;
33 }
34
35 if (player->inventory->add(shared_ptr<ItemInstance>(new ItemInstance(Item::mushroomStew))) && !player->abilities.instabuild)
36 {
37 player->inventory->removeItem(player->inventory->selected, 1);
38 return true;
39 }
40 }
41 // 4J: Do not allow shearing if we can't create more cows
42 if (item != NULL && item->id == Item::shears_Id && getAge() >= 0 && level->canCreateMore(eTYPE_COW, Level::eSpawnType_Breed))
43 {
44 remove();
45 level->addParticle(eParticleType_largeexplode, x, y + bbHeight / 2, z, 0, 0, 0);
46 if(!level->isClientSide)
47 {
48 remove();
49 shared_ptr<Cow> cow = shared_ptr<Cow>( new Cow(level) );
50 cow->moveTo(x, y, z, yRot, xRot);
51 cow->setHealth(getHealth());
52 cow->yBodyRot = yBodyRot;
53 level->addEntity(cow);
54 for (int i = 0; i < 5; i++)
55 {
56 level->addEntity( shared_ptr<ItemEntity>( new ItemEntity(level, x, y + bbHeight, z, shared_ptr<ItemInstance>( new ItemInstance(Tile::mushroom_red))) ));
57 }
58 return true;
59 }
60 return true;
61 }
62 return Cow::mobInteract(player);
63}
64
65// 4J - added so that mushroom cows have more of a chance of spawning, they can now spawn on mycelium as well as grass - seems a bit odd that they don't already really
66bool MushroomCow::canSpawn()
67{
68 int xt = Mth::floor(x);
69 int yt = Mth::floor(bb->y0);
70 int zt = Mth::floor(z);
71 return ( level->getTile(xt, yt - 1, zt) == Tile::grass_Id || level->getTile(xt, yt - 1, zt) == Tile::mycel_Id ) && level->getDaytimeRawBrightness(xt, yt, zt) > 8 && PathfinderMob::canSpawn();
72}
73
74shared_ptr<AgableMob> MushroomCow::getBreedOffspring(shared_ptr<AgableMob> target)
75{
76 // 4J - added limit to number of animals that can be bred
77 if( level->canCreateMore( GetType(), Level::eSpawnType_Breed) )
78 {
79 return shared_ptr<MushroomCow>( new MushroomCow(level) );
80 }
81 else
82 {
83 return nullptr;
84 }
85}