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 "com.mojang.nbt.h"
3#include "net.minecraft.world.level.tile.h"
4#include "net.minecraft.world.phys.h"
5#include "net.minecraft.world.level.h"
6#include "net.minecraft.world.item.h"
7#include "net.minecraft.world.entity.h"
8#include "net.minecraft.world.entity.ai.attributes.h"
9#include "net.minecraft.world.entity.monster.h"
10#include "SharedConstants.h"
11#include "Squid.h"
12#include "..\Minecraft.Client\Textures.h"
13
14void Squid::_init()
15{
16 xBodyRot = xBodyRotO = 0.0f;
17 zBodyRot = zBodyRotO = 0.0f;
18
19 tentacleMovement = oldTentacleMovement = 0.0f;
20 tentacleAngle = oldTentacleAngle = 0.0f;
21
22 speed = 0.0f;
23 tentacleSpeed = 0.0f;
24 rotateSpeed = 0.0f;
25
26 tx = ty = tz = 0.0f;
27}
28
29Squid::Squid(Level *level) : WaterAnimal( level )
30{
31 // 4J Stu - This function call had to be moved here from the Entity ctor to ensure that
32 // the derived version of the function is called
33 this->defineSynchedData();
34 registerAttributes();
35 setHealth(getMaxHealth());
36
37 _init();
38 this->setSize(0.95f, 0.95f);
39 tentacleSpeed = 1 / (random->nextFloat() + 1) * 0.2f;
40}
41
42void Squid::registerAttributes()
43{
44 WaterAnimal::registerAttributes();
45
46 getAttribute(SharedMonsterAttributes::MAX_HEALTH)->setBaseValue(10);
47}
48
49int Squid::getAmbientSound()
50{
51 return -1;
52}
53
54int Squid::getHurtSound()
55{
56 return -1;
57}
58
59int Squid::getDeathSound()
60{
61 return -1;
62}
63
64float Squid::getSoundVolume()
65{
66 return 0.4f;
67}
68
69int Squid::getDeathLoot()
70{
71 return 0;
72}
73
74bool Squid::makeStepSound()
75{
76 return false;
77}
78
79void Squid::dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel)
80{
81 int count = random->nextInt(3 + playerBonusLevel) + 1;
82 for (int i = 0; i < count; i++)
83 {
84 spawnAtLocation(shared_ptr<ItemInstance>( new ItemInstance(Item::dye_powder, 1, DyePowderItem::BLACK) ), 0.0f);
85 }
86}
87
88bool Squid::isInWater()
89{
90 return level->checkAndHandleWater(bb->grow(0, -0.6f, 0), Material::water, shared_from_this() );
91}
92
93void Squid::aiStep()
94{
95 WaterAnimal::aiStep();
96
97 xBodyRotO = xBodyRot;
98 zBodyRotO = zBodyRot;
99
100 oldTentacleMovement = tentacleMovement;
101 oldTentacleAngle = tentacleAngle;
102
103 tentacleMovement += tentacleSpeed;
104 if (tentacleMovement > (float) PI * 2.0f)
105 {
106 tentacleMovement -= (float) PI * 2.0f;
107 if (random->nextInt(10) == 0) tentacleSpeed = 1 / (random->nextFloat() + 1) * 0.2f;
108 }
109
110 if (isInWater())
111 {
112 if (tentacleMovement < PI)
113 {
114 float tentacleScale = tentacleMovement / PI;
115 tentacleAngle = Mth::sin(tentacleScale * tentacleScale * PI) * PI * 0.25f;
116
117 if (tentacleScale > .75)
118 {
119 speed = 1.0f;
120 rotateSpeed = 1.0f;
121 }
122 else
123 {
124 rotateSpeed = rotateSpeed * 0.8f;
125 }
126 }
127 else
128 {
129 tentacleAngle = 0.0f;
130 speed = speed * 0.9f;
131 rotateSpeed = rotateSpeed * 0.99f;
132 }
133
134 if (!level->isClientSide)
135 {
136 xd = tx * speed;
137 yd = ty * speed;
138 zd = tz * speed;
139 }
140
141 double horizontalMovement = sqrt(xd * xd + zd * zd);
142
143 yBodyRot += ((-(float) atan2(xd, zd) * 180 / PI) - yBodyRot) * 0.1f;
144 yRot = yBodyRot;
145 zBodyRot = zBodyRot + (float) PI * rotateSpeed * 1.5f;
146 xBodyRot += ((-(float) atan2(horizontalMovement, yd) * 180 / PI) - xBodyRot) * 0.1f;
147 }
148 else
149 {
150 tentacleAngle = Mth::abs(Mth::sin(tentacleMovement)) * PI * 0.25f;
151
152 if (!level->isClientSide)
153 {
154 // unable to move, apply gravity
155 xd = 0.0f;
156 yd -= 0.08;
157 yd *= 0.98f;
158 zd = 0.0f;
159 }
160
161 // fall over
162 xBodyRot += (-90 - xBodyRot) * 0.02f;
163 }
164}
165
166void Squid::travel(float xa, float ya)
167{
168 move(xd, yd, zd);
169}
170
171void Squid::serverAiStep()
172{
173 noActionTime++;
174
175 // ridiculous simple movement ai
176 if (noActionTime > SharedConstants::TICKS_PER_SECOND * 5)
177 {
178 tx = ty = tz = 0;
179 }
180 else if (random->nextInt(50) == 0 || !wasInWater || (tx == 0 && ty == 0 && tz == 0))
181 {
182 float angle = random->nextFloat() * PI * 2.0f;
183 tx = Mth::cos(angle) * 0.2f;
184 ty = -0.1f + random->nextFloat() * 0.2f;
185 tz = Mth::sin(angle) * 0.2f;
186 }
187 checkDespawn(); // 4J - 1.7.0 fix
188}
189
190bool Squid::canSpawn()
191{
192 return y > 45 && y < level->seaLevel && WaterAnimal::canSpawn();
193}