From 1dac740fca8b6a1490942a8fe06d24fe201d7b5a Mon Sep 17 00:00:00 2001
From: MagicBot <MagicBot@magicbane.com>
Date: Thu, 4 Apr 2024 13:59:30 -0400
Subject: [PATCH] Bitvector helper method added.

---
 src/engine/Enum.java                 | 14 ++++++++++++++
 src/engine/objects/ItemTemplate.java |  8 ++++++++
 src/engine/util/MiscUtils.java       |  1 +
 3 files changed, 23 insertions(+)

diff --git a/src/engine/Enum.java b/src/engine/Enum.java
index 9da4fa22..08e9685e 100644
--- a/src/engine/Enum.java
+++ b/src/engine/Enum.java
@@ -34,6 +34,20 @@ import java.util.concurrent.ThreadLocalRandom;
 
 public class Enum {
 
+    public static <E extends java.lang.Enum<E>> EnumSet<E> fromLong(long bitVector, Class<E> enumClass) {
+
+        // Bitvector -> EnumSet without the EnumBitvector dependency
+
+        EnumSet<E> enumSet = EnumSet.noneOf(enumClass);
+
+        for (E enumValue : enumClass.getEnumConstants()) {
+            if ((bitVector & (1L << enumValue.ordinal())) != 0) {
+                enumSet.add(enumValue);
+            }
+        }
+        return enumSet;
+    }
+
     public enum PetitionType {
         NONE,
         GENERAL,
diff --git a/src/engine/objects/ItemTemplate.java b/src/engine/objects/ItemTemplate.java
index c581ed49..717ba8c8 100644
--- a/src/engine/objects/ItemTemplate.java
+++ b/src/engine/objects/ItemTemplate.java
@@ -129,6 +129,8 @@ public class ItemTemplate {
     public final HashMap<String, int[]> rune_skill_adj = new HashMap<>();
     public final EnumSet<Enum.MonsterType> rune_enemy_monster_types = EnumSet.noneOf(Enum.MonsterType.class);
     public final EnumSet<Enum.MonsterType> rune_not_enemy_monster_types = EnumSet.noneOf(Enum.MonsterType.class);
+    public final EnumSet<Enum.MonsterType> rune_groupee_monster_types = EnumSet.noneOf(Enum.MonsterType.class);
+    public final EnumSet<Enum.MonsterType> rune_helper_monster_types = EnumSet.noneOf(Enum.MonsterType.class);
 
     public ItemTemplate(JSONObject jsonObject) {
 
@@ -511,6 +513,12 @@ public class ItemTemplate {
                     rune_not_enemy_monster_types.add(monsterType);
                 }
 
+                long rune_groupee_bitvector = ((Long) jsonObject.get("rune_groupee_monster_types")).intValue();
+                rune_groupee_monster_types.addAll(Enum.fromLong(rune_groupee_bitvector, Enum.MonsterType.class));
+
+                long rune_helper_bitvector = ((Long) jsonObject.get("rune_helper_monster_types")).intValue();
+                rune_helper_monster_types.addAll(Enum.fromLong(rune_helper_bitvector, Enum.MonsterType.class));
+
                 rune_renderable = ((Boolean) jsonObject.get("rune_renderable"));
                 rune_natural_power_attack = ((Long) jsonObject.get("rune_natural_power_attack")).intValue();
 
diff --git a/src/engine/util/MiscUtils.java b/src/engine/util/MiscUtils.java
index 9f077c69..9902f543 100644
--- a/src/engine/util/MiscUtils.java
+++ b/src/engine/util/MiscUtils.java
@@ -35,4 +35,5 @@ public class MiscUtils {
         // empty last names are fine, return false
         return false;
     }
+
 }