aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/ArmorItem.h
blob: 92a40aea3509ae42878533f89dcd90c411a1f491 (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
#pragma once

#include "Item.h"
#include "DefaultDispenseItemBehavior.h"

class ArmorItem : public Item
{
public:
	static const int SLOT_HEAD = 0;
	static const int SLOT_TORSO = 1;
	static const int SLOT_LEGS = 2;
	static const int SLOT_FEET = 3;
	static const eMinecraftColour DEFAULT_LEATHER_COLOR = eMinecraftColour_Armour_Default_Leather_Colour;

private:
	static const int healthPerSlot[];
	static const wstring LEATHER_OVERLAYS[] ;

public:
	static const wstring TEXTURE_EMPTY_SLOTS[];

private:
	class ArmorDispenseItemBehavior : public DefaultDispenseItemBehavior
	{
	protected:
		virtual shared_ptr<ItemInstance> execute(BlockSource *source, shared_ptr<ItemInstance> dispensed, eOUTCOME &outcome);
	};

public:
	class ArmorMaterial
	{
	public:
		static const int clothArray[];
		static const int chainArray[];
		static const int ironArray[];
		static const int goldArray[];
		static const int diamondArray[];
	public:
		static const ArmorMaterial *CLOTH;
		static const ArmorMaterial *CHAIN;
		static const ArmorMaterial *IRON;
		static const ArmorMaterial *GOLD;
		static const ArmorMaterial *DIAMOND;

	private:
		int durabilityMultiplier;
		int *slotProtections;
		int enchantmentValue;

		// 4J Stu - Had to make this public but was private
		// We shouldn't be creating these except the static initialisation
	public:
		ArmorMaterial(int durabilityMultiplier, const int slotProtections[], int enchantmentValue);
		~ArmorMaterial();

	public:
		int getHealthForSlot(int slot) const;
		int getDefenseForSlot(int slot) const;
		int getEnchantmentValue() const;
		int getTierItemId() const;
	};

	const int slot;
	const int defense;
	const int modelIndex;

private:
	const ArmorMaterial *armorType;
	Icon *overlayIcon;
	Icon *iconEmpty;

public:
	ArmorItem(int id, const ArmorMaterial *armorType, int icon, int slot);


	virtual int getColor(shared_ptr<ItemInstance> item, int spriteLayer);
	virtual bool hasMultipleSpriteLayers();
	virtual int getEnchantmentValue();
	virtual const ArmorMaterial *getMaterial();
	virtual bool hasCustomColor(shared_ptr<ItemInstance> item);
	virtual int getColor(shared_ptr<ItemInstance> item);

	virtual Icon *getLayerIcon(int auxValue, int spriteLayer);
	virtual void clearColor(shared_ptr<ItemInstance> item);
	virtual void setColor(shared_ptr<ItemInstance> item, int color);

	virtual bool isValidRepairItem(shared_ptr<ItemInstance> source, shared_ptr<ItemInstance> repairItem);
	virtual void registerIcons(IconRegister *iconRegister);

	static Icon *getEmptyIcon(int slot);
};