aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/MobEffect.h
blob: 840684523024d626730011c219256a61b5c6126e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#pragma once
using namespace std;

#include "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:
	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(shared_ptr<LivingEntity> mob, int amplification);
	virtual void applyInstantenousEffect(shared_ptr<LivingEntity> source, 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 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 unordered_map<Attribute *, AttributeModifier *> *getAttributeModifiers();
	virtual void removeAttributeModifiers(shared_ptr<LivingEntity> entity, BaseAttributeMap *attributes, int amplifier);
	virtual void addAttributeModifiers(shared_ptr<LivingEntity> entity, BaseAttributeMap *attributes, int amplifier);
	virtual double getAttributeModifierValue(int amplifier, AttributeModifier *original);
};