diff --git a/src/main/java/studio/magemonkey/divinity/modules/ModuleItem.java b/src/main/java/studio/magemonkey/divinity/modules/ModuleItem.java index b40d17e1..5cd0010d 100644 --- a/src/main/java/studio/magemonkey/divinity/modules/ModuleItem.java +++ b/src/main/java/studio/magemonkey/divinity/modules/ModuleItem.java @@ -1,6 +1,7 @@ package studio.magemonkey.divinity.modules; import org.apache.commons.lang3.ArrayUtils; +import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -8,6 +9,7 @@ import org.bukkit.attribute.AttributeModifier; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.*; @@ -135,16 +137,25 @@ public ModuleItem(@NotNull Divinity plugin, @NotNull JYML cfg, @NotNull QModuleD this.attributes = new HashMap<>(); for (String attr : cfg.getSection("attributes")) { - String[] attrData = cfg.getString("attributes." + attr, "").split(":"); - double value = Double.parseDouble(attrData[0]); - String operation = attrData.length > 1 ? attrData[1] : "ADD_NUMBER"; - NBTAttribute nbtAttr = NBTAttribute.valueOf(attr.toUpperCase()); - AttributeModifier attrModifier = VersionManager.getCompat() - .createAttributeModifier(nbtAttr, value, AttributeModifier.Operation.valueOf(operation)); + String[] attrData = cfg.getString("attributes." + attr, "").split(":"); + double value = Double.parseDouble(attrData[0]); + String operation = attrData.length > 1 ? attrData[1] : "ADD_NUMBER"; + String equipmentSlot = attrData.length > 2 ? attrData[2] : null; + NBTAttribute nbtAttr = NBTAttribute.valueOf(attr.toUpperCase()); + + // Check attribute through compat support + AttributeModifier attrModifier = VersionManager.getCompat().createAttributeModifier(nbtAttr, value, AttributeModifier.Operation.valueOf(operation)); if (attrModifier == null) { Codex.warn("Invalid attribute provided: " + attr + " (" + cfg.getFile().getName() + ")"); continue; } + // If everything was fine and equipmentslot != null, recreate the modifier including the equipment slot + if(equipmentSlot != null) { + EquipmentSlot slot = EquipmentSlot.valueOf(equipmentSlot.toUpperCase()); + attrModifier = new AttributeModifier(attrModifier.getUniqueId(), attrModifier.getName(), attrModifier.getAmount(), attrModifier.getOperation(), slot); + // Debug + //Bukkit.getLogger().info("Registered attribute " + nbtAttr.name() + " with value " + value + ", operation " + operation + " and equipment slot " + equipmentSlot + " for item " + this.getId()); + } this.attributes.put(nbtAttr.getAttribute(), attrModifier); } @@ -277,6 +288,7 @@ protected ItemStack build(@NotNull ItemStack item) { for (Map.Entry attribute : this.attributes.entrySet()) { if (attribute != null) { + AttributeModifier mod = new AttributeModifier(attribute.getValue().getName(), attribute.getValue().getAmount(), attribute.getValue().getOperation()); meta.addAttributeModifier(attribute.getKey(), attribute.getValue()); } }