aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/ServersideAttributeMap.cpp
blob: c7308666236012ca221b3db73d634cffd31ddd88 (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
#include "stdafx.h"

#include "Attribute.h"
#include "RangedAttribute.h"
#include "AttributeInstance.h"
#include "ModifiableAttributeInstance.h"
#include "ServersideAttributeMap.h"

AttributeInstance *ServersideAttributeMap::getInstance(Attribute *attribute)
{
	return BaseAttributeMap::getInstance(attribute);
}

AttributeInstance *ServersideAttributeMap::getInstance(eATTRIBUTE_ID id)
{
	AttributeInstance *result = BaseAttributeMap::getInstance(id);

	// 4J: Removed legacy name
	// If we didn't find it, search by legacy name
	/*if (result == nullptr)
	{
		auto it = attributesByLegacy.find(name);
		if(it != attributesByLegacy.end())
		{
			result = it->second;
		}
	}*/

	return result;
}

AttributeInstance *ServersideAttributeMap::registerAttribute(Attribute *attribute)
{
    auto it = attributesById.find(attribute->getId());
    if (it != attributesById.end())
	{
		return it->second;
	}

	AttributeInstance *instance = new ModifiableAttributeInstance(this, attribute);
	attributesById.insert(std::pair<eATTRIBUTE_ID, AttributeInstance *>(attribute->getId(), instance));

	// 4J: Removed legacy name
	// If this is a ranged attribute also add to legacy name map
	/*RangedAttribute *rangedAttribute = dynamic_cast<RangedAttribute*>(attribute);
	if (rangedAttribute != nullptr && rangedAttribute->getImportLegacyName() != L"")
	{
		attributesByLegacy.insert(std::pair<wstring, AttributeInstance*>(rangedAttribute->getImportLegacyName(), instance));
	}*/

	return instance;
}

void ServersideAttributeMap::onAttributeModified(ModifiableAttributeInstance *attributeInstance)
{
	if (attributeInstance->getAttribute()->isClientSyncable())
	{
		dirtyAttributes.insert(attributeInstance);
	}
}

unordered_set<AttributeInstance *> *ServersideAttributeMap::getDirtyAttributes()
{
	return &dirtyAttributes;
}

unordered_set<AttributeInstance *> *ServersideAttributeMap::getSyncableAttributes()
{
	unordered_set<AttributeInstance *> *result = new unordered_set<AttributeInstance *>();
	vector<AttributeInstance *> atts;
	getAttributes(atts);
	for (size_t i = 0; i < atts.size(); i++)
	{
		AttributeInstance *instance = atts.at(i);
		if (instance == nullptr)
		{
			continue;
		}

		if (instance->getAttribute()->isClientSyncable())
		{
			result->insert(instance);
		}
	}

	return result;
}