Fix duplicate LA attributes overwriting each other (#1019)

Somebody please save me from this horrible horrible code
This commit is contained in:
Nicholas Ignoffo 2017-02-13 19:09:19 -08:00
parent 9027f767a6
commit 5bf5fd570d

View file

@ -1,9 +1,7 @@
package WayofTime.bloodmagic.livingArmour;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.*;
import java.util.Map.Entry;
import net.minecraft.entity.EntityLivingBase;
@ -81,8 +79,9 @@ public class LivingArmour implements ILivingArmour
@Override
public Multimap<String, AttributeModifier> getAttributeModifiers()
{
HashMultimap<String, AttributeModifier> modifierMap = HashMultimap.<String, AttributeModifier>create();
HashMultimap<String, AttributeModifier> modifierMap = HashMultimap.create();
int count = 0;
for (Entry<String, LivingArmourUpgrade> entry : upgradeMap.entrySet())
{
LivingArmourUpgrade upgrade = entry.getValue();
@ -90,12 +89,36 @@ public class LivingArmour implements ILivingArmour
{
continue;
}
modifierMap.putAll(upgrade.getAttributeModifiers());
Multimap<String, AttributeModifier> upgradeModifiers = upgrade.getAttributeModifiers();
for (String key : upgradeModifiers.keySet())
{
if (modifierMap.containsKey(key))
{
Collection<AttributeModifier> renamed = renameModifiers(upgradeModifiers.get(key), count);
modifierMap.get(key).addAll(renamed);
count += renamed.size();
} else
modifierMap.putAll(upgradeModifiers);
}
}
return modifierMap;
}
private static Set<AttributeModifier> renameModifiers(Collection<AttributeModifier> modifiers, int count)
{
Set<AttributeModifier> newModifiers = new HashSet<AttributeModifier>();
for (AttributeModifier modifier : modifiers)
{
String newName = modifier.getName().substring(0, modifier.getName().length() - 1) + count;
newModifiers.add(new AttributeModifier(UUID.nameUUIDFromBytes(new byte[] {(byte)count}), newName, modifier.getAmount(), modifier.getOperation()));
count++;
}
return newModifiers;
}
@Override
public boolean upgradeArmour(EntityPlayer user, LivingArmourUpgrade upgrade)
{