Fix duplicate LA attributes overwriting each other (#1019)
Somebody please save me from this horrible horrible code
This commit is contained in:
parent
9027f767a6
commit
5bf5fd570d
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue