
io.pixeloutlaw.minecraft.spigot.plumbing.v120R2.ItemAttributes.kt Maven / Gradle / Ivy
package io.pixeloutlaw.minecraft.spigot.plumbing.v120R2
import io.pixeloutlaw.minecraft.spigot.plumbing.api.AbstractItemAttributes
import org.bukkit.attribute.Attribute
import org.bukkit.attribute.AttributeModifier
import org.bukkit.craftbukkit.v1_20_R2.CraftEquipmentSlot
import org.bukkit.craftbukkit.v1_20_R2.attribute.CraftAttributeInstance
import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack
import org.bukkit.inventory.EquipmentSlot
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.ItemMeta
import java.util.UUID
import net.minecraft.world.entity.ai.attributes.Attribute as AttributeNms
import net.minecraft.world.entity.ai.attributes.AttributeModifier as AttributeModifierNms
public object ItemAttributes : AbstractItemAttributes() {
override val availableEquipmentSlots: List by lazy {
EquipmentSlot.entries
}
override val availableAttributes: List by lazy {
Attribute.entries
}
override fun handleEquipmentSlot(
itemStack: ItemStack,
slot: EquipmentSlot,
itemMeta: ItemMeta,
) {
CraftItemStack.asNMSCopy(itemStack)
.getAttributeModifiers(CraftEquipmentSlot.getNMS(slot))
.asMap()
.entries
.forEach { entry ->
updateItemMeta(entry, itemMeta, slot)
}
}
private fun updateItemMeta(
entry: MutableMap.MutableEntry>,
itemMeta: ItemMeta,
slot: EquipmentSlot,
) {
val attr: Attribute = attributeFromString(entry.key.descriptionId) ?: return
entry.value.forEach { nmsMod ->
val mod = CraftAttributeInstance.convert(nmsMod)
itemMeta.removeAttributeModifier(attr)
val clonedAttributeModifier =
AttributeModifier(UUID.randomUUID(), mod.name, mod.amount, mod.operation, slot)
itemMeta.addAttributeModifier(attr, clonedAttributeModifier)
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy