mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-23 21:33:37 +00:00
137 lines
4.5 KiB
C++
137 lines
4.5 KiB
C++
#pragma once
|
|
|
|
#include "../AI/Attributes/AttributeModifier.h"
|
|
|
|
class Mob;
|
|
class MobEffectInstance;
|
|
class Attribute;
|
|
|
|
class MobEffect {
|
|
public:
|
|
enum EMobEffectIcon {
|
|
e_MobEffectIcon_None,
|
|
e_MobEffectIcon_Blindness,
|
|
e_MobEffectIcon_FireResistance,
|
|
e_MobEffectIcon_Haste,
|
|
e_MobEffectIcon_Hunger,
|
|
e_MobEffectIcon_Invisiblity,
|
|
e_MobEffectIcon_JumpBoost,
|
|
e_MobEffectIcon_MiningFatigue,
|
|
e_MobEffectIcon_Nausea,
|
|
e_MobEffectIcon_NightVision,
|
|
e_MobEffectIcon_Poison,
|
|
e_MobEffectIcon_Regeneration,
|
|
e_MobEffectIcon_Resistance,
|
|
e_MobEffectIcon_Slowness,
|
|
e_MobEffectIcon_Speed,
|
|
e_MobEffectIcon_Strength,
|
|
e_MobEffectIcon_WaterBreathing,
|
|
e_MobEffectIcon_Weakness,
|
|
e_MobEffectIcon_Wither,
|
|
e_MobEffectIcon_HealthBoost,
|
|
e_MobEffectIcon_Absorption,
|
|
|
|
e_MobEffectIcon_COUNT,
|
|
};
|
|
|
|
static const int NUM_EFFECTS = 32;
|
|
static MobEffect* effects[NUM_EFFECTS];
|
|
|
|
static MobEffect* voidEffect;
|
|
static MobEffect* movementSpeed;
|
|
static MobEffect* movementSlowdown;
|
|
static MobEffect* digSpeed;
|
|
static MobEffect* digSlowdown;
|
|
static MobEffect* damageBoost;
|
|
static MobEffect* heal;
|
|
static MobEffect* harm;
|
|
static MobEffect* jump;
|
|
static MobEffect* confusion;
|
|
static MobEffect* regeneration;
|
|
static MobEffect* damageResistance;
|
|
static MobEffect* fireResistance;
|
|
static MobEffect* waterBreathing;
|
|
static MobEffect* invisibility;
|
|
static MobEffect* blindness;
|
|
static MobEffect* nightVision;
|
|
static MobEffect* hunger;
|
|
static MobEffect* weakness;
|
|
static MobEffect* poison;
|
|
static MobEffect* wither;
|
|
static MobEffect* healthBoost;
|
|
static MobEffect* absorption;
|
|
static MobEffect* saturation;
|
|
static MobEffect* reserved_24;
|
|
static MobEffect* reserved_25;
|
|
static MobEffect* reserved_26;
|
|
static MobEffect* reserved_27;
|
|
static MobEffect* reserved_28;
|
|
static MobEffect* reserved_29;
|
|
static MobEffect* reserved_30;
|
|
static MobEffect* reserved_31;
|
|
|
|
const int id;
|
|
|
|
static void staticCtor();
|
|
|
|
private:
|
|
std::unordered_map<Attribute*, AttributeModifier*> attributeModifiers;
|
|
int descriptionId;
|
|
int m_postfixDescriptionId; // 4J added
|
|
EMobEffectIcon icon; // 4J changed type
|
|
const bool _isHarmful;
|
|
double durationModifier;
|
|
bool _isDisabled;
|
|
const eMinecraftColour color;
|
|
|
|
protected:
|
|
MobEffect(int id, bool isHarmful, eMinecraftColour color);
|
|
|
|
// MobEffect *setIcon(int xPos, int yPos);
|
|
MobEffect* setIcon(EMobEffectIcon icon);
|
|
|
|
public:
|
|
virtual int getId();
|
|
virtual void applyEffectTick(std::shared_ptr<LivingEntity> mob,
|
|
int amplification);
|
|
virtual void applyInstantenousEffect(std::shared_ptr<LivingEntity> source,
|
|
std::shared_ptr<LivingEntity> mob,
|
|
int amplification, double scale);
|
|
virtual bool isInstantenous();
|
|
virtual bool isDurationEffectTick(int remainingDuration, int amplification);
|
|
|
|
MobEffect* setDescriptionId(unsigned int id);
|
|
unsigned int getDescriptionId(int iData = -1);
|
|
|
|
// 4J Added
|
|
MobEffect* setPostfixDescriptionId(unsigned int id);
|
|
unsigned int getPostfixDescriptionId(int iData = -1);
|
|
|
|
bool hasIcon();
|
|
EMobEffectIcon getIcon(); // 4J changed return type
|
|
bool isHarmful();
|
|
static std::wstring formatDuration(MobEffectInstance* instance);
|
|
|
|
protected:
|
|
MobEffect* setDurationModifier(double durationModifier);
|
|
|
|
public:
|
|
virtual double getDurationModifier();
|
|
virtual MobEffect* setDisabled();
|
|
virtual bool isDisabled();
|
|
virtual eMinecraftColour getColor();
|
|
|
|
virtual MobEffect* addAttributeModifier(Attribute* attribute,
|
|
eMODIFIER_ID id, double amount,
|
|
int operation);
|
|
virtual std::unordered_map<Attribute*, AttributeModifier*>*
|
|
getAttributeModifiers();
|
|
virtual void removeAttributeModifiers(std::shared_ptr<LivingEntity> entity,
|
|
BaseAttributeMap* attributes,
|
|
int amplifier);
|
|
virtual void addAttributeModifiers(std::shared_ptr<LivingEntity> entity,
|
|
BaseAttributeMap* attributes,
|
|
int amplifier);
|
|
virtual double getAttributeModifierValue(int amplifier,
|
|
AttributeModifier* original);
|
|
}; |