the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 323 lines 8.2 kB view raw
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};