the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2using namespace std;
3
4#include "Entity.h"
5#include "MobType.h"
6#include "GoalSelector.h"
7#include "SharedConstants.h"
8
9class CombatTracker;
10class AttributeInstance;
11class AttributeModifier;
12class MobEffectInstance;
13class BaseAttributeMap;
14class Team;
15class Attribute;
16class MobEffect;
17class HitResult;
18class Vec3;
19
20class LivingEntity : public Entity
21{
22 friend class MobSpawner;
23protected:
24 // 4J - added for common ctor code
25 void _init();
26public:
27 // 4J-PB - added to replace (e instanceof Type), avoiding dynamic casts
28 eINSTANCEOF GetType() { return eTYPE_LIVINGENTITY;}
29 static Entity *create(Level *level) { return NULL; }
30
31private:
32 static AttributeModifier *SPEED_MODIFIER_SPRINTING;
33
34public:
35 static const int SLOT_WEAPON = 0;
36 static const int SLOT_BOOTS = 1;
37 static const int SLOT_LEGGINGS = 2;
38 static const int SLOT_CHEST = 3;
39 static const int SLOT_HELM = 4;
40
41 static const int SWING_DURATION = 6;
42 static const int PLAYER_HURT_EXPERIENCE_TIME = SharedConstants::TICKS_PER_SECOND * 5;
43
44private:
45 static const double MIN_MOVEMENT_DISTANCE;
46
47public:
48 static const int DATA_HEALTH_ID = 6;
49 static const int DATA_EFFECT_COLOR_ID = 7;
50 static const int DATA_EFFECT_AMBIENCE_ID = 8;
51 static const int DATA_ARROW_COUNT_ID = 9;
52
53private:
54 BaseAttributeMap *attributes;
55 CombatTracker *combatTracker;
56 unordered_map<int, MobEffectInstance *> activeEffects;
57 ItemInstanceArray lastEquipment;
58
59public:
60 bool swinging;
61 int swingTime;
62 int removeArrowTime;
63 float lastHealth;
64
65 int hurtTime;
66 int hurtDuration;
67 float hurtDir;
68 int deathTime;
69 int attackTime;
70 float oAttackAnim, attackAnim;
71
72 float walkAnimSpeedO;
73 float walkAnimSpeed;
74 float walkAnimPos;
75 int invulnerableDuration;
76 float oTilt, tilt;
77 float timeOffs;
78 float rotA;
79 float yBodyRot, yBodyRotO;
80 float yHeadRot, yHeadRotO;
81 float flyingSpeed;
82
83protected:
84 shared_ptr<Player> lastHurtByPlayer;
85 int lastHurtByPlayerTime;
86 bool dead;
87 int noActionTime;
88 float oRun, run;
89 float animStep, animStepO;
90 float rotOffs;
91 int deathScore;
92 float lastHurt;
93 bool jumping;
94
95public:
96 float xxa;
97 float yya;
98
99protected:
100 float yRotA;
101 int lSteps;
102 double lx, ly, lz, lyr, lxr;
103
104private:
105 bool effectsDirty;
106
107 shared_ptr<LivingEntity> lastHurtByMob;
108 int lastHurtByMobTimestamp;
109 shared_ptr<LivingEntity> lastHurtMob;
110 int lastHurtMobTimestamp;
111
112 float speed;
113
114protected:
115 int noJumpDelay;
116
117private:
118 float absorptionAmount;
119
120public:
121 LivingEntity(Level* level);
122 virtual ~LivingEntity();
123
124protected:
125 virtual void defineSynchedData();
126 virtual void registerAttributes();
127 virtual void checkFallDamage(double ya, bool onGround);
128
129public:
130 virtual bool isWaterMob();
131 virtual void baseTick();
132 virtual bool isBaby();
133
134protected:
135 virtual void tickDeath();
136 virtual int decreaseAirSupply(int currentSupply);
137 virtual int getExperienceReward(shared_ptr<Player> killedBy);
138 virtual bool isAlwaysExperienceDropper();
139
140public:
141 virtual Random *getRandom();
142 virtual shared_ptr<LivingEntity> getLastHurtByMob();
143 virtual int getLastHurtByMobTimestamp();
144 virtual void setLastHurtByMob(shared_ptr<LivingEntity> hurtBy);
145 virtual shared_ptr<LivingEntity> getLastHurtMob();
146 virtual int getLastHurtMobTimestamp();
147 virtual void setLastHurtMob(shared_ptr<Entity> target);
148 virtual int getNoActionTime();
149 virtual void addAdditonalSaveData(CompoundTag *entityTag);
150 virtual void readAdditionalSaveData(CompoundTag *tag);
151
152protected:
153 virtual void tickEffects();
154
155public:
156 virtual void removeAllEffects();
157 virtual vector<MobEffectInstance *> *getActiveEffects();
158 virtual bool hasEffect(int id);
159 virtual bool hasEffect(MobEffect *effect);
160 virtual MobEffectInstance *getEffect(MobEffect *effect);
161 virtual void addEffect(MobEffectInstance *newEffect);
162 virtual void addEffectNoUpdate(MobEffectInstance *newEffect); // 4J added
163 virtual bool canBeAffected(MobEffectInstance *newEffect);
164 virtual bool isInvertedHealAndHarm();
165 virtual void removeEffectNoUpdate(int effectId);
166 virtual void removeEffect(int effectId);
167
168protected:
169 virtual void onEffectAdded(MobEffectInstance *effect);
170 virtual void onEffectUpdated(MobEffectInstance *effect, bool doRefreshAttributes);
171 virtual void onEffectRemoved(MobEffectInstance *effect);
172
173public:
174 virtual void heal(float heal);
175 virtual float getHealth();
176 virtual void setHealth(float health);
177 virtual bool hurt(DamageSource *source, float dmg);
178 virtual void breakItem(shared_ptr<ItemInstance> itemInstance);
179 virtual void die(DamageSource *source);
180
181protected:
182 virtual void dropEquipment(bool byPlayer, int playerBonusLevel);
183
184public:
185 virtual void knockback(shared_ptr<Entity> source, float dmg, double xd, double zd);
186
187protected:
188 virtual int getHurtSound();
189 virtual int getDeathSound();
190
191protected:
192 virtual void dropRareDeathLoot(int rareLootLevel);
193 virtual void dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel);
194
195public:
196 virtual bool onLadder();
197 virtual bool isShootable();
198 virtual bool isAlive();
199 virtual void causeFallDamage(float distance);
200 virtual void animateHurt();
201 virtual int getArmorValue();
202
203protected:
204 virtual void hurtArmor(float damage);
205 virtual float getDamageAfterArmorAbsorb(DamageSource *damageSource, float damage);
206 virtual float getDamageAfterMagicAbsorb(DamageSource *damageSource, float damage);
207 virtual void actuallyHurt(DamageSource *source, float dmg);
208
209public:
210 virtual CombatTracker *getCombatTracker();
211 virtual shared_ptr<LivingEntity> getKillCredit();
212 virtual float getMaxHealth();
213 virtual int getArrowCount();
214 virtual void setArrowCount(int count);
215
216private:
217 int getCurrentSwingDuration();
218
219public:
220 virtual void swing();
221 virtual void handleEntityEvent(byte id);
222
223protected:
224 virtual void outOfWorld();
225 virtual void updateSwingTime();
226
227public:
228 virtual AttributeInstance *getAttribute(Attribute *attribute);
229 virtual BaseAttributeMap *getAttributes();
230 virtual MobType getMobType();
231
232 virtual shared_ptr<ItemInstance> getCarriedItem() = 0;
233 virtual shared_ptr<ItemInstance> getCarried(int slot) = 0;
234 virtual shared_ptr<ItemInstance> getArmor(int pos) = 0;
235 virtual void setEquippedSlot(int slot, shared_ptr<ItemInstance> item) = 0;
236 virtual void setSprinting(bool value);
237
238 virtual ItemInstanceArray getEquipmentSlots() = 0;
239
240 virtual Icon *getItemInHandIcon(shared_ptr<ItemInstance> item, int layer);
241
242protected:
243 virtual float getSoundVolume();
244 virtual float getVoicePitch();
245 virtual bool isImmobile();
246
247public:
248 virtual void teleportTo(double x, double y, double z);
249
250protected:
251 virtual void findStandUpPosition(shared_ptr<Entity> vehicle);
252
253public:
254 virtual bool shouldShowName();
255
256protected:
257 virtual void jumpFromGround();
258
259public:
260 virtual void travel(float xa, float ya);
261
262 virtual int getLightColor(float a); // 4J - added
263
264protected:
265 virtual bool useNewAi();
266
267public:
268 virtual float getSpeed();
269 virtual void setSpeed(float speed);
270 virtual bool doHurtTarget(shared_ptr<Entity> target);
271 virtual bool isSleeping();
272 virtual void tick();
273
274protected:
275 virtual float tickHeadTurn(float yBodyRotT, float walkSpeed);
276
277public:
278 virtual void aiStep();
279
280protected:
281 virtual void newServerAiStep();
282 virtual void pushEntities();
283 virtual void doPush(shared_ptr<Entity> e);
284
285public:
286 virtual void rideTick();
287 virtual void lerpTo(double x, double y, double z, float yRot, float xRot, int steps);
288
289protected:
290 virtual void serverAiMobStep();
291 virtual void serverAiStep();
292
293public:
294 virtual void setJumping(bool jump);
295 virtual void take(shared_ptr<Entity> e, int orgCount);
296 virtual bool canSee(shared_ptr<Entity> target);
297
298
299public:
300 virtual Vec3 *getLookAngle();
301 virtual Vec3 *getViewVector(float a);
302 virtual float getAttackAnim(float a);
303 virtual Vec3 *getPos(float a);
304 virtual HitResult *pick(double range, float a);
305 virtual bool isEffectiveAi();
306
307 virtual bool isPickable();
308 virtual bool isPushable();
309 virtual float getHeadHeight();
310
311protected:
312 virtual void markHurt();
313
314public:
315 virtual float getYHeadRot();
316 virtual void setYHeadRot(float yHeadRot);
317
318 virtual float getAbsorptionAmount();
319 virtual void setAbsorptionAmount(float absorptionAmount);
320 virtual Team *getTeam();
321 virtual bool isAlliedTo(shared_ptr<LivingEntity> other);
322 virtual bool isAlliedTo(Team *other);
323};