package me.youhavetrouble.enchantio.enchants; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.EnchantmentRegistryEntry; import io.papermc.paper.registry.keys.tags.EnchantmentTagKeys; import io.papermc.paper.registry.tag.TagKey; import io.papermc.paper.tag.TagEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemType; import org.jetbrains.annotations.NotNull; import java.util.Collections; import java.util.HashSet; import java.util.Set; @SuppressWarnings("UnstableApiUsage") public class BeheadingEnchant implements EnchantioEnchant { public static final Key KEY = Key.key("enchantio:beheading"); private final int anvilCost, weight, maxLevel; private final EnchantmentRegistryEntry.EnchantmentCost minimumCost; private final EnchantmentRegistryEntry.EnchantmentCost maximumCost; private final Set> supportedItemTags; private final double chanceToDropHeadPerLevel; private final Set> enchantTagKeys = new HashSet<>(); private final Set activeSlots = new HashSet<>(); public BeheadingEnchant( int anvilCost, int weight, EnchantmentRegistryEntry.EnchantmentCost minimumCost, EnchantmentRegistryEntry.EnchantmentCost maximumCost, boolean canGetFromEnchantingTable, Set> supportedItemTags, Set activeSlots, int maxLevel, double chanceToDropHeadPerLevel ) { this.anvilCost = anvilCost; this.weight = weight; this.minimumCost = minimumCost; this.maximumCost = maximumCost; this.supportedItemTags = supportedItemTags; this.maxLevel = maxLevel; this.chanceToDropHeadPerLevel = chanceToDropHeadPerLevel; this.activeSlots.addAll(activeSlots); if (canGetFromEnchantingTable) { enchantTagKeys.add(EnchantmentTagKeys.IN_ENCHANTING_TABLE); } } @Override public @NotNull Key getKey() { return KEY; } @Override public @NotNull Component getDescription() { return Component.translatable("enchantio.enchant.beheading", "Beheading"); } @Override public int getAnvilCost() { return anvilCost; } @Override public int getMaxLevel() { return maxLevel; } public double getChanceToDropHeadPerLevel() { return chanceToDropHeadPerLevel; } @Override public int getWeight() { return weight; } @Override public EnchantmentRegistryEntry.@NotNull EnchantmentCost getMinimumCost() { return minimumCost; } @Override public EnchantmentRegistryEntry.@NotNull EnchantmentCost getMaximumCost() { return maximumCost; } @Override public @NotNull Iterable getActiveSlots() { return activeSlots; } @Override public @NotNull TagKey getTagForSupportedItems() { return TagKey.create(RegistryKey.ITEM, Key.key("enchantio:beheading_enchantable")); } @Override public @NotNull Set> getSupportedItems() { return supportedItemTags; } @Override public @NotNull Set> getEnchantTagKeys() { return Collections.unmodifiableSet(enchantTagKeys); } }