diff --git a/src/engine/gameManager/ItemManager.java b/src/engine/gameManager/ItemManager.java index c5bb2a74..ac97103d 100644 --- a/src/engine/gameManager/ItemManager.java +++ b/src/engine/gameManager/ItemManager.java @@ -21,66 +21,46 @@ public enum ItemManager { public static final AtomicInteger lastNegativeID = new AtomicInteger(0); + // restrict true: the set is a blacklist; false: a whitelist. An empty set allows everyone. + public static Boolean ValidRace(Item item, mbEnums.MonsterType race) { - if (item.template.item_race_req.isEmpty() && item.template.item_race_res.isEmpty()) + EnumSet races = item.template.cacheTemplate.getItemRaceReq(); + boolean restrict = item.template.cacheTemplate.getItemRaceReqRestrict(); + + if (races.isEmpty()) return true; - if (item.template.item_race_req.isEmpty() == false) - if (item.template.item_race_req.contains(race)) - return true; - - if (item.template.item_race_res.isEmpty() == false) - if (item.template.item_race_res.contains(race) == false) - return true; - - return false; + return races.contains(race) != restrict; } public static Boolean ValidClass(Item item, mbEnums.ClassType base, mbEnums.ClassType profession) { - // Early exit if no entry + EnumSet classes = item.template.cacheTemplate.getItemClassReq(); + boolean restrict = item.template.cacheTemplate.getItemClassReqRestrict(); + boolean listed; - if (item.template.item_class_req.isEmpty() && item.template.item_class_res.isEmpty()) + if (classes.isEmpty()) return true; - if (item.template.item_class_req.isEmpty() == false) - if (item.template.item_class_req.contains(base) || item.template.item_class_req.contains(profession)) - return true; + listed = classes.contains(base) || classes.contains(profession); - if (item.template.item_class_res.isEmpty() == false) - if (item.template.item_class_res.contains(base) == false && item.template.item_class_res.contains(profession) == false) - return true; - - return false; + return listed != restrict; } public static Boolean ValidDiscipline(Item item, EnumSet discs) { - // Early exit if no entry + EnumSet disciplines = item.template.cacheTemplate.getItemDiscReq(); + boolean restrict = item.template.cacheTemplate.getItemDiscReqRestrict(); + EnumSet workSet; - if (item.template.item_disc_req.isEmpty() && item.template.item_disc_res.isEmpty()) + if (disciplines.isEmpty()) return true; - EnumSet workSet = EnumSet.copyOf(discs); + workSet = EnumSet.copyOf(discs); + workSet.retainAll(disciplines); - if (item.template.item_disc_req.isEmpty() == false) { - - workSet.retainAll(item.template.item_disc_req); - - if (workSet.isEmpty() == false) - return true; - } - - if (item.template.item_disc_res.isEmpty() == false) { - - workSet.retainAll(item.template.item_disc_res); - - if (workSet.isEmpty() == false) - return true; - } - - return false; + return workSet.isEmpty() == restrict; } public static Boolean canCharacterEquip(Item item, AbstractCharacter character) {