From 44d1d4dbb76a96b3c3bdf59172add37728ccf30c Mon Sep 17 00:00:00 2001 From: Torabi Date: Sat, 26 Jan 2019 09:06:59 -0700 Subject: [PATCH] Fix Immunities Switch to an EnumSet for immunities, both because it's more efficient for this purpose, and because adding immunities to an entity caused a crash, because of improperly attempting to extend an array through the asList wrapper. --- .../wizardry/util/MagicDamage.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/electroblob/wizardry/util/MagicDamage.java b/src/main/java/electroblob/wizardry/util/MagicDamage.java index 20c901bf..5d849035 100644 --- a/src/main/java/electroblob/wizardry/util/MagicDamage.java +++ b/src/main/java/electroblob/wizardry/util/MagicDamage.java @@ -1,8 +1,8 @@ package electroblob.wizardry.util; -import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; -import java.util.List; +import java.util.EnumSet; import java.util.Map; import electroblob.wizardry.entity.living.EntityBlazeMinion; @@ -68,7 +68,7 @@ public class MagicDamage extends EntityDamageSource implements IElementalDamage /** The name of the damagesource for indirect magic damage from the wizardry mod. */ public static final String INDIRECT_MAGIC_DAMAGE = "indirect_wizardry_magic"; // Technically, I don't need to specify that the classes in this map must extend entity, but it's good practice to. - private static final Map, DamageType[]> immunityMapping = new HashMap, DamageType[]>(); + private static final Map, EnumSet> immunityMapping = new HashMap<>(); private final DamageType type; private final boolean isRetaliatory; @@ -149,23 +149,25 @@ public class MagicDamage extends EntityDamageSource implements IElementalDamage public static boolean isEntityImmune(DamageType type, Entity entity){ if(type == DamageType.FIRE && entity.isImmuneToFire()) return true; + EnumSet immunities = immunityMapping.get(entity.getClass()); - DamageType[] immunities = MagicDamage.immunityMapping.get(entity.getClass()); - - return immunities != null && Arrays.asList(immunities).contains(type); + return immunities != null && immunities.contains(type); } /** Registers the given type of entity as immune to all of the passed in damage types. */ public static void setEntityImmunities(Class entityType, DamageType... immunities){ - immunityMapping.put(entityType, immunities); + EnumSet immunitySet = EnumSet.noneOf(DamageType.class); + Collections.addAll(immunitySet, immunities); + immunityMapping.put(entityType, immunitySet); } /** Adds the passed in damage type to the list of damage types to which the given entity is immune. */ public static void addEntityImmunity(Class entityType, DamageType immunity){ - List immunities = Arrays.asList(immunityMapping.get(entityType)); - immunities.add(immunity); - // Apparently putting 0 here works just fine. - immunityMapping.put(entityType, immunities.toArray(new DamageType[0])); + EnumSet immunitySet = immunityMapping.get(entityType); + if (immunitySet == null) immunitySet = EnumSet.of(immunity); + else immunitySet.add(immunity); + + immunityMapping.put(entityType, immunitySet); } /**