aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/PotionBrewing.h
blob: 8f110c936e4302ab894f9cb798ab8569c006f641 (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
#pragma once
using namespace std;
class MobEffectInstance;

class PotionBrewing
{
public:
	static const int POTION_ID_SPLASH_DAMAGE = 32732;
	static const int POTION_ID_SPLASH_WEAKNESS = 32696;
	static const int POTION_ID_SPLASH_SLOWNESS = 32698;
	static const int POTION_ID_SPLASH_POISON = 32660;
	static const int POTION_ID_HEAL = 16341;
	static const int POTION_ID_SWIFTNESS = 16274;
	static const int POTION_ID_FIRE_RESISTANCE = 16307;

	static const bool SIMPLIFIED_BREWING = true;
	// 4J Stu - Made #define so we can use it to select const initialisation
#define _SIMPLIFIED_BREWING 1

	static const int BREWING_TIME_SECONDS = 20;

	static const int THROWABLE_BIT = 14;
	static const int THROWABLE_MASK = (1 << THROWABLE_BIT);

	static const wstring MOD_WATER;
	static const wstring MOD_SUGAR;
	static const wstring MOD_GHASTTEARS;
	static const wstring MOD_SPIDEREYE;
	static const wstring MOD_FERMENTEDEYE;
	static const wstring MOD_SPECKLEDMELON;
	static const wstring MOD_BLAZEPOWDER;
	static const wstring MOD_MAGMACREAM;
	static const wstring MOD_REDSTONE;
	static const wstring MOD_GLOWSTONE;
	static const wstring MOD_NETHERWART;
	static const wstring MOD_GUNPOWDER;
	static const wstring MOD_GOLDENCARROT;

	static const int BITS_FOR_MAX_NORMAL_EFFECT = 0xF;
	static const int BITS_FOR_DURATION = (1 << 5);
	static const int BITS_FOR_EXTENDED = (1 << 6);
	static const int BITS_FOR_NORMAL = (1 << 13);
	static const int BITS_FOR_SPLASH = (1 << 14);

private:
	typedef unordered_map<int, wstring> intStringMap;
	static intStringMap potionEffectDuration;
	static intStringMap potionEffectAmplifier;
	
public:
	static void staticCtor();

	static const int NUM_BITS = 15;
	
	// 4J Stu - Made public
	static const int BREW_MASK = 0x7fff;
private:
	static const int TOP_BIT = 0x4000;

	static bool isWrappedLit(int brew, int position);

public:
	static bool isLit(int brew, int position);

private:
	static int isBit(int brew, int position);
	static int isNotBit(int brew, int position);

public:
	static int getAppearanceValue(int brew);
	static int getColorValue(vector<MobEffectInstance *> *effects);
	static bool areAllEffectsAmbient(vector<MobEffectInstance *> *effects);

private:
	static unordered_map<int, int> cachedColors;

public:
	static int getColorValue(int brew, bool includeDisabledEffects);
	static int getSmellValue(int brew);

private:
	static const int DEFAULT_APPEARANCES[];

public:
	static int getAppearanceName(int brew);

private:
	static const int NO_COUNT = -1;
	static const int EQUAL_COUNT = 0;
	static const int GREATER_COUNT = 1;
	static const int LESS_COUNT = 2;

	static int constructParsedValue(bool isNot, bool hasMultiplier, bool isNeg, int countCompare, int valuePart, int multiplierPart, int brew);
	static int countOnes(int brew);
	static int parseEffectFormulaValue(const wstring &definition, int start, int end, int brew);

public:
	static vector<MobEffectInstance *> *getEffects(int brew, bool includeDisabledEffects);

#if !(_SIMPLIFIED_BREWING)
	static int boil(int brew);
	static int shake(int brew);
	static int stirr(int brew);
#endif

private:
	static int applyBrewBit(int currentBrew, int bit, bool isNeg, bool isNot, bool isRequired);

public:
	static int applyBrew(int currentBrew, const wstring &formula);
	static int setBit(int brew, int position, bool onOff);
	static int valueOf(int brew, int p1, int p2, int p3, int p4);
	static int valueOf(int brew, int p1, int p2, int p3, int p4, int p5);
	static wstring toString(int brew);
	//static void main(String[] args);
};