All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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