From 5bf5fd570db4d7aa8ba922b30ddd280421b815a8 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Feb 2017 19:09:19 -0800 Subject: [PATCH] Fix duplicate LA attributes overwriting each other (#1019) Somebody please save me from this horrible horrible code --- .../bloodmagic/livingArmour/LivingArmour.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java index 6c880de0..52236c4e 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java @@ -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 getAttributeModifiers() { - HashMultimap modifierMap = HashMultimap.create(); + HashMultimap modifierMap = HashMultimap.create(); + int count = 0; for (Entry entry : upgradeMap.entrySet()) { LivingArmourUpgrade upgrade = entry.getValue(); @@ -90,12 +89,36 @@ public class LivingArmour implements ILivingArmour { continue; } - modifierMap.putAll(upgrade.getAttributeModifiers()); + + Multimap upgradeModifiers = upgrade.getAttributeModifiers(); + for (String key : upgradeModifiers.keySet()) + { + if (modifierMap.containsKey(key)) + { + Collection renamed = renameModifiers(upgradeModifiers.get(key), count); + modifierMap.get(key).addAll(renamed); + count += renamed.size(); + } else + modifierMap.putAll(upgradeModifiers); + } } return modifierMap; } + private static Set renameModifiers(Collection modifiers, int count) + { + Set newModifiers = new HashSet(); + 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) {