Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions src/main/java/studio/magemonkey/divinity/modules/ModuleItem.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
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;
import org.bukkit.attribute.Attribute;
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.*;
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -277,6 +288,7 @@ protected ItemStack build(@NotNull ItemStack item) {

for (Map.Entry<Attribute, AttributeModifier> 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());
}
}
Expand Down
Loading