From 75e1dddd08aa91257c44f6ce4738c77f2f07d641 Mon Sep 17 00:00:00 2001
From: MagicBot <MagicBot@magicbane.com>
Date: Sat, 15 Feb 2025 12:55:06 -0500
Subject: [PATCH] ModBehaviour defined

---
 src/engine/mbEnums.java                       | 170 ++++++++++--------
 .../BlockedPowerTypeEffectModifier.java       |   6 +-
 2 files changed, 97 insertions(+), 79 deletions(-)

diff --git a/src/engine/mbEnums.java b/src/engine/mbEnums.java
index 2d32cd5f..114af5d8 100644
--- a/src/engine/mbEnums.java
+++ b/src/engine/mbEnums.java
@@ -1235,91 +1235,105 @@ public class mbEnums {
     }
 
     public enum ModType {
-        None,
-        AdjustAboveDmgCap,
-        Ambidexterity,
-        AnimOverride,
-        ArmorPiercing,
-        AttackDelay,
-        Attr,
-        BlackMantle,
-        BladeTrails,
-        Block,
-        BlockedPowerType,
-        CannotAttack,
-        CannotCast,
-        CannotMove,
-        CannotTrack,
-        Charmed,
-        ConstrainedAmbidexterity,
-        DamageCap,
-        DamageShield,
-        DCV,
-        Dodge,
-        DR,
-        Durability,
-        ExclusiveDamageCap,
-        Fade,
-        Fly,
-        Health,
-        HealthFull,
-        HealthRecoverRate,
-        IgnoreDamageCap,
-        IgnorePassiveDefense,
-        ImmuneTo,
-        ImmuneToAttack,
-        ImmuneToPowers,
-        Invisible,
-        ItemName,
-        Mana,
-        ManaFull,
-        ManaRecoverRate,
-        MaxDamage,
-        MeleeDamageModifier,
-        MinDamage,
-        NoMod,
-        OCV,
-        Parry,
-        PassiveDefense,
-        PowerCost,
-        PowerCostHealth,
-        PowerDamageModifier,
-        ProtectionFrom,
-        Resistance,
-        ScaleHeight,
-        ScaleWidth,
-        ScanRange,
-        SeeInvisible,
-        Silenced,
-        Skill,
-        Slay,
-        Speed,
-        SpireBlock,
-        Stamina,
-        StaminaFull,
-        StaminaRecoverRate,
-        Stunned,
-        Value,
-        WeaponProc,
-        WeaponRange,
-        WeaponSpeed;
+        Ambidexterity(mbEnums.ModBehaviorType.Flag),
+        AnimOverride(mbEnums.ModBehaviorType.MapIntToInts),
+        ArmorPiercing(mbEnums.ModBehaviorType.Standard),
+        AttackDelay(mbEnums.ModBehaviorType.Standard),
+        Attr(mbEnums.ModBehaviorType.FPSubTypeAttr),
+        AttrReq(mbEnums.ModBehaviorType.FPSubTypeAttr),
+        BlackMantle(mbEnums.ModBehaviorType.SubTypeSourceType),
+        BladeTrails(mbEnums.ModBehaviorType.Flag),
+        Block(mbEnums.ModBehaviorType.Standard),
+        BlockedPowerType(mbEnums.ModBehaviorType.SubTypePowerType),
+        BulkFactor(mbEnums.ModBehaviorType.Standard),
+        BulkFactorMin(mbEnums.ModBehaviorType.Standard),
+        CannotAttack(mbEnums.ModBehaviorType.Flag),
+        CannotCast(mbEnums.ModBehaviorType.Flag),
+        CannotCastSpell(mbEnums.ModBehaviorType.Flag),
+        CannotCastSkill(mbEnums.ModBehaviorType.Flag),
+        CannotMove(mbEnums.ModBehaviorType.Flag),
+        CannotTrack(mbEnums.ModBehaviorType.Flag),
+        Charmed(mbEnums.ModBehaviorType.Flag),
+        ConstrainedAmbidexterity(mbEnums.ModBehaviorType.SubTypeSkill),
+        DCV(mbEnums.ModBehaviorType.Standard),
+        DR(mbEnums.ModBehaviorType.Standard),
+        MeleeDamageModifier(mbEnums.ModBehaviorType.Standard),
+        PowerDamageModifier(mbEnums.ModBehaviorType.Standard),
+        DamageShield(mbEnums.ModBehaviorType.FPSubTypeDmg),
+        Desolid(mbEnums.ModBehaviorType.Flag),
+        Dodge(mbEnums.ModBehaviorType.Standard),
+        Durability(mbEnums.ModBehaviorType.Standard),
+        Encumbrance(mbEnums.ModBehaviorType.Standard),
+        Fade(mbEnums.ModBehaviorType.Standard),
+        Fly(mbEnums.ModBehaviorType.Flag),
+        Health(mbEnums.ModBehaviorType.DD),
+        HealthFull(mbEnums.ModBehaviorType.Standard),
+        HealthRecoverRate(mbEnums.ModBehaviorType.Standard),
+        IgnorePassiveDefense(mbEnums.ModBehaviorType.Flag),
+        ImmuneTo(mbEnums.ModBehaviorType.SubTypeSourceType),
+        ImmuneToAttack(mbEnums.ModBehaviorType.Flag),
+        ImmuneToPowers(mbEnums.ModBehaviorType.Flag),
+        Invisible(mbEnums.ModBehaviorType.Flag),
+        ItemName(mbEnums.ModBehaviorType.String),
+        LevelReq(mbEnums.ModBehaviorType.Standard),
+        Mana(mbEnums.ModBehaviorType.DD),
+        ManaFull(mbEnums.ModBehaviorType.Standard),
+        ManaRecoverRate(mbEnums.ModBehaviorType.Standard),
+        MaxDamage(mbEnums.ModBehaviorType.Standard),
+        MaxNaturalAttackDamage(mbEnums.ModBehaviorType.Standard),
+        MinDamage(mbEnums.ModBehaviorType.Standard),
+        MinNaturalAttackDamage(mbEnums.ModBehaviorType.Standard),
+        NoMod(mbEnums.ModBehaviorType.SubTypeMod),
+        NoStilled(mbEnums.ModBehaviorType.Flag),
+        OCV(mbEnums.ModBehaviorType.Standard),
+        Parry(mbEnums.ModBehaviorType.Standard),
+        PassiveDefense(mbEnums.ModBehaviorType.Standard),
+        PowerCost(mbEnums.ModBehaviorType.Standard),
+        PowerGrant(mbEnums.ModBehaviorType.SubTypePower),
+        ProjectileSpeed(mbEnums.ModBehaviorType.Standard),
+        ProtectionFrom(mbEnums.ModBehaviorType.SubTypeDmg),
+        Resistance(mbEnums.ModBehaviorType.FPSubTypeDmg),
+        ScaleHeight(mbEnums.ModBehaviorType.Standard),
+        ScaleWidth(mbEnums.ModBehaviorType.Standard),
+        ScanRange(mbEnums.ModBehaviorType.Standard),
+        SeeInvisible(mbEnums.ModBehaviorType.Flag),
+        Silenced(mbEnums.ModBehaviorType.Flag),
+        Skill(mbEnums.ModBehaviorType.FPSubTypeSkill),
+        Slay(mbEnums.ModBehaviorType.FPSubTypeMonster),
+        Sneak(mbEnums.ModBehaviorType.Flag),
+        Speed(mbEnums.ModBehaviorType.Standard),
+        Stamina(mbEnums.ModBehaviorType.DD),
+        StaminaFull(mbEnums.ModBehaviorType.Standard),
+        StaminaRecoverRate(mbEnums.ModBehaviorType.Standard),
+        StaminaUseWhileRunning(mbEnums.ModBehaviorType.Standard),
+        Stilled(mbEnums.ModBehaviorType.SubTypeSkill),
+        Stunned(mbEnums.ModBehaviorType.Flag),
+        Value(mbEnums.ModBehaviorType.Standard),
+        WeaponProc(mbEnums.ModBehaviorType.ProcInfo),
+        WeaponRange(mbEnums.ModBehaviorType.Standard),
+        WeaponSpeed(mbEnums.ModBehaviorType.Standard),
+        Weight(mbEnums.ModBehaviorType.Standard),
+        IgnoreDamageCap(mbEnums.ModBehaviorType.SubTypeDmg),
+        ExclusiveDamageCap(mbEnums.ModBehaviorType.SubTypeDmg),
+        DamageCap(mbEnums.ModBehaviorType.Standard),
+        AdjustAboveDmgCap(mbEnums.ModBehaviorType.Standard),
+        SpireBlock(mbEnums.ModBehaviorType.Flag),
+        PowerCostHealth(mbEnums.ModBehaviorType.Flag);
+
+        public ModBehaviorType behaviorType;
+
+        ModType(ModBehaviorType behaviorType) {
+            this.behaviorType = behaviorType;
+        }
 
         public static ModType GetModType(String modName) {
             ModType modType;
-            if (modName.isEmpty())
-                return ModType.None;
-
-            try {
-                modType = ModType.valueOf(modName.replace(",", ""));
-            } catch (Exception e) {
-                Logger.error(e);
-                return ModType.None;
-            }
+            modType = ModType.valueOf(modName.replace(",", ""));
             return modType;
         }
     }
 
-    public enum ModBehavior {
+    public enum ModBehaviorType {
         Behavior,
         Flag,
         MapIntToInts,
diff --git a/src/engine/powers/effectmodifiers/BlockedPowerTypeEffectModifier.java b/src/engine/powers/effectmodifiers/BlockedPowerTypeEffectModifier.java
index 5b9be4ba..d27e6c48 100644
--- a/src/engine/powers/effectmodifiers/BlockedPowerTypeEffectModifier.java
+++ b/src/engine/powers/effectmodifiers/BlockedPowerTypeEffectModifier.java
@@ -42,7 +42,7 @@ public class BlockedPowerTypeEffectModifier extends AbstractEffectModifier {
 
         for (String effect : ac.getEffects().keySet()) {
             Effect eff = ac.getEffects().get(effect);
-            ModType toBlock = ModType.None;
+            ModType toBlock = null;
 
             switch (this.sourceType) {
                 case Invisible:
@@ -50,6 +50,10 @@ public class BlockedPowerTypeEffectModifier extends AbstractEffectModifier {
                     break;
             }
 
+            if (toBlock == null)
+                return;
+            ;
+                
             HashSet<AbstractEffectModifier> aemList = eff.getEffectModifiers();
             for (AbstractEffectModifier aem : aemList) {
                 if (aem.modType.equals(toBlock)) {