aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/LivingEntity.h
diff options
context:
space:
mode:
authordaoge <3523206925@qq.com>2026-03-03 03:04:10 +0800
committerGitHub <noreply@github.com>2026-03-03 03:04:10 +0800
commitb3feddfef372618c8a9d7a0abcaf18cfad866c18 (patch)
tree267761c3bb39241ba5c347bfbe2254d06686e287 /Minecraft.World/LivingEntity.h
parent84c31a2331f7a0ec85b9d438992e244f60e5020f (diff)
feat: TU19 (Dec 2014) Features & Content (#155)
* try to resolve merge conflict * feat: TU19 (Dec 2014) Features & Content (#32) * December 2014 files * Working release build * Fix compilation issues * Add sound to Windows64Media * Add DLC content and force Tutorial DLC * Revert "Add DLC content and force Tutorial DLC" This reverts commit 97a43994725008e35fceb984d5549df9c8cea470. * Disable broken light packing * Disable breakpoint during DLC texture map load Allows DLC loading but the DLC textures are still broken * Fix post build not working * ... * fix vs2022 build * fix cmake build --------- Co-authored-by: Loki <lokirautio@gmail.com>
Diffstat (limited to 'Minecraft.World/LivingEntity.h')
-rw-r--r--Minecraft.World/LivingEntity.h323
1 files changed, 323 insertions, 0 deletions
diff --git a/Minecraft.World/LivingEntity.h b/Minecraft.World/LivingEntity.h
new file mode 100644
index 00000000..5869eeb2
--- /dev/null
+++ b/Minecraft.World/LivingEntity.h
@@ -0,0 +1,323 @@
+#pragma once
+using namespace std;
+
+#include "Entity.h"
+#include "MobType.h"
+#include "GoalSelector.h"
+#include "SharedConstants.h"
+
+class CombatTracker;
+class AttributeInstance;
+class AttributeModifier;
+class MobEffectInstance;
+class BaseAttributeMap;
+class Team;
+class Attribute;
+class MobEffect;
+class HitResult;
+class Vec3;
+
+class LivingEntity : public Entity
+{
+ friend class MobSpawner;
+protected:
+ // 4J - added for common ctor code
+ void _init();
+public:
+ // 4J-PB - added to replace (e instanceof Type), avoiding dynamic casts
+ eINSTANCEOF GetType() { return eTYPE_LIVINGENTITY;}
+ static Entity *create(Level *level) { return NULL; }
+
+private:
+ static AttributeModifier *SPEED_MODIFIER_SPRINTING;
+
+public:
+ static const int SLOT_WEAPON = 0;
+ static const int SLOT_BOOTS = 1;
+ static const int SLOT_LEGGINGS = 2;
+ static const int SLOT_CHEST = 3;
+ static const int SLOT_HELM = 4;
+
+ static const int SWING_DURATION = 6;
+ static const int PLAYER_HURT_EXPERIENCE_TIME = SharedConstants::TICKS_PER_SECOND * 5;
+
+private:
+ static const double MIN_MOVEMENT_DISTANCE;
+
+public:
+ static const int DATA_HEALTH_ID = 6;
+ static const int DATA_EFFECT_COLOR_ID = 7;
+ static const int DATA_EFFECT_AMBIENCE_ID = 8;
+ static const int DATA_ARROW_COUNT_ID = 9;
+
+private:
+ BaseAttributeMap *attributes;
+ CombatTracker *combatTracker;
+ unordered_map<int, MobEffectInstance *> activeEffects;
+ ItemInstanceArray lastEquipment;
+
+public:
+ bool swinging;
+ int swingTime;
+ int removeArrowTime;
+ float lastHealth;
+
+ int hurtTime;
+ int hurtDuration;
+ float hurtDir;
+ int deathTime;
+ int attackTime;
+ float oAttackAnim, attackAnim;
+
+ float walkAnimSpeedO;
+ float walkAnimSpeed;
+ float walkAnimPos;
+ int invulnerableDuration;
+ float oTilt, tilt;
+ float timeOffs;
+ float rotA;
+ float yBodyRot, yBodyRotO;
+ float yHeadRot, yHeadRotO;
+ float flyingSpeed;
+
+protected:
+ shared_ptr<Player> lastHurtByPlayer;
+ int lastHurtByPlayerTime;
+ bool dead;
+ int noActionTime;
+ float oRun, run;
+ float animStep, animStepO;
+ float rotOffs;
+ int deathScore;
+ float lastHurt;
+ bool jumping;
+
+public:
+ float xxa;
+ float yya;
+
+protected:
+ float yRotA;
+ int lSteps;
+ double lx, ly, lz, lyr, lxr;
+
+private:
+ bool effectsDirty;
+
+ shared_ptr<LivingEntity> lastHurtByMob;
+ int lastHurtByMobTimestamp;
+ shared_ptr<LivingEntity> lastHurtMob;
+ int lastHurtMobTimestamp;
+
+ float speed;
+
+protected:
+ int noJumpDelay;
+
+private:
+ float absorptionAmount;
+
+public:
+ LivingEntity(Level* level);
+ virtual ~LivingEntity();
+
+protected:
+ virtual void defineSynchedData();
+ virtual void registerAttributes();
+ virtual void checkFallDamage(double ya, bool onGround);
+
+public:
+ virtual bool isWaterMob();
+ virtual void baseTick();
+ virtual bool isBaby();
+
+protected:
+ virtual void tickDeath();
+ virtual int decreaseAirSupply(int currentSupply);
+ virtual int getExperienceReward(shared_ptr<Player> killedBy);
+ virtual bool isAlwaysExperienceDropper();
+
+public:
+ virtual Random *getRandom();
+ virtual shared_ptr<LivingEntity> getLastHurtByMob();
+ virtual int getLastHurtByMobTimestamp();
+ virtual void setLastHurtByMob(shared_ptr<LivingEntity> hurtBy);
+ virtual shared_ptr<LivingEntity> getLastHurtMob();
+ virtual int getLastHurtMobTimestamp();
+ virtual void setLastHurtMob(shared_ptr<Entity> target);
+ virtual int getNoActionTime();
+ virtual void addAdditonalSaveData(CompoundTag *entityTag);
+ virtual void readAdditionalSaveData(CompoundTag *tag);
+
+protected:
+ virtual void tickEffects();
+
+public:
+ virtual void removeAllEffects();
+ virtual vector<MobEffectInstance *> *getActiveEffects();
+ virtual bool hasEffect(int id);
+ virtual bool hasEffect(MobEffect *effect);
+ virtual MobEffectInstance *getEffect(MobEffect *effect);
+ virtual void addEffect(MobEffectInstance *newEffect);
+ virtual void addEffectNoUpdate(MobEffectInstance *newEffect); // 4J added
+ virtual bool canBeAffected(MobEffectInstance *newEffect);
+ virtual bool isInvertedHealAndHarm();
+ virtual void removeEffectNoUpdate(int effectId);
+ virtual void removeEffect(int effectId);
+
+protected:
+ virtual void onEffectAdded(MobEffectInstance *effect);
+ virtual void onEffectUpdated(MobEffectInstance *effect, bool doRefreshAttributes);
+ virtual void onEffectRemoved(MobEffectInstance *effect);
+
+public:
+ virtual void heal(float heal);
+ virtual float getHealth();
+ virtual void setHealth(float health);
+ virtual bool hurt(DamageSource *source, float dmg);
+ virtual void breakItem(shared_ptr<ItemInstance> itemInstance);
+ virtual void die(DamageSource *source);
+
+protected:
+ virtual void dropEquipment(bool byPlayer, int playerBonusLevel);
+
+public:
+ virtual void knockback(shared_ptr<Entity> source, float dmg, double xd, double zd);
+
+protected:
+ virtual int getHurtSound();
+ virtual int getDeathSound();
+
+protected:
+ virtual void dropRareDeathLoot(int rareLootLevel);
+ virtual void dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel);
+
+public:
+ virtual bool onLadder();
+ virtual bool isShootable();
+ virtual bool isAlive();
+ virtual void causeFallDamage(float distance);
+ virtual void animateHurt();
+ virtual int getArmorValue();
+
+protected:
+ virtual void hurtArmor(float damage);
+ virtual float getDamageAfterArmorAbsorb(DamageSource *damageSource, float damage);
+ virtual float getDamageAfterMagicAbsorb(DamageSource *damageSource, float damage);
+ virtual void actuallyHurt(DamageSource *source, float dmg);
+
+public:
+ virtual CombatTracker *getCombatTracker();
+ virtual shared_ptr<LivingEntity> getKillCredit();
+ virtual float getMaxHealth();
+ virtual int getArrowCount();
+ virtual void setArrowCount(int count);
+
+private:
+ int getCurrentSwingDuration();
+
+public:
+ virtual void swing();
+ virtual void handleEntityEvent(byte id);
+
+protected:
+ virtual void outOfWorld();
+ virtual void updateSwingTime();
+
+public:
+ virtual AttributeInstance *getAttribute(Attribute *attribute);
+ virtual BaseAttributeMap *getAttributes();
+ virtual MobType getMobType();
+
+ virtual shared_ptr<ItemInstance> getCarriedItem() = 0;
+ virtual shared_ptr<ItemInstance> getCarried(int slot) = 0;
+ virtual shared_ptr<ItemInstance> getArmor(int pos) = 0;
+ virtual void setEquippedSlot(int slot, shared_ptr<ItemInstance> item) = 0;
+ virtual void setSprinting(bool value);
+
+ virtual ItemInstanceArray getEquipmentSlots() = 0;
+
+ virtual Icon *getItemInHandIcon(shared_ptr<ItemInstance> item, int layer);
+
+protected:
+ virtual float getSoundVolume();
+ virtual float getVoicePitch();
+ virtual bool isImmobile();
+
+public:
+ virtual void teleportTo(double x, double y, double z);
+
+protected:
+ virtual void findStandUpPosition(shared_ptr<Entity> vehicle);
+
+public:
+ virtual bool shouldShowName();
+
+protected:
+ virtual void jumpFromGround();
+
+public:
+ virtual void travel(float xa, float ya);
+
+ virtual int getLightColor(float a); // 4J - added
+
+protected:
+ virtual bool useNewAi();
+
+public:
+ virtual float getSpeed();
+ virtual void setSpeed(float speed);
+ virtual bool doHurtTarget(shared_ptr<Entity> target);
+ virtual bool isSleeping();
+ virtual void tick();
+
+protected:
+ virtual float tickHeadTurn(float yBodyRotT, float walkSpeed);
+
+public:
+ virtual void aiStep();
+
+protected:
+ virtual void newServerAiStep();
+ virtual void pushEntities();
+ virtual void doPush(shared_ptr<Entity> e);
+
+public:
+ virtual void rideTick();
+ virtual void lerpTo(double x, double y, double z, float yRot, float xRot, int steps);
+
+protected:
+ virtual void serverAiMobStep();
+ virtual void serverAiStep();
+
+public:
+ virtual void setJumping(bool jump);
+ virtual void take(shared_ptr<Entity> e, int orgCount);
+ virtual bool canSee(shared_ptr<Entity> target);
+
+
+public:
+ virtual Vec3 *getLookAngle();
+ virtual Vec3 *getViewVector(float a);
+ virtual float getAttackAnim(float a);
+ virtual Vec3 *getPos(float a);
+ virtual HitResult *pick(double range, float a);
+ virtual bool isEffectiveAi();
+
+ virtual bool isPickable();
+ virtual bool isPushable();
+ virtual float getHeadHeight();
+
+protected:
+ virtual void markHurt();
+
+public:
+ virtual float getYHeadRot();
+ virtual void setYHeadRot(float yHeadRot);
+
+ virtual float getAbsorptionAmount();
+ virtual void setAbsorptionAmount(float absorptionAmount);
+ virtual Team *getTeam();
+ virtual bool isAlliedTo(shared_ptr<LivingEntity> other);
+ virtual bool isAlliedTo(Team *other);
+};