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; package WayofTime.bloodmagic.livingArmour;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
@ -81,8 +79,9 @@ public class LivingArmour implements ILivingArmour
@Override @Override
public Multimap<String, AttributeModifier> getAttributeModifiers() 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()) for (Entry<String, LivingArmourUpgrade> entry : upgradeMap.entrySet())
{ {
LivingArmourUpgrade upgrade = entry.getValue(); LivingArmourUpgrade upgrade = entry.getValue();
@ -90,12 +89,36 @@ public class LivingArmour implements ILivingArmour
{ {
continue; 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; 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 @Override
public boolean upgradeArmour(EntityPlayer user, LivingArmourUpgrade upgrade) public boolean upgradeArmour(EntityPlayer user, LivingArmourUpgrade upgrade)
{ {