package me.youhavetrouble.enchantio.enchants; 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 me.youhavetrouble.enchantio.EnchantioConfig; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import org.bukkit.configuration.ConfigurationSection; 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.List; import java.util.Set; import static me.youhavetrouble.enchantio.EnchantioConfig.ENCHANTS; @SuppressWarnings("UnstableApiUsage") public class ReplantingEnchant implements EnchantioEnchant { public static final Key KEY = Key.key("enchantio:replanting"); private final int anvilCost, weight; private final EnchantmentRegistryEntry.EnchantmentCost minimumCost; private final EnchantmentRegistryEntry.EnchantmentCost maximumCost; private final Set> supportedItemTags; private final Set> enchantTagKeys = new HashSet<>(); public ReplantingEnchant( int anvilCost, int weight, EnchantmentRegistryEntry.EnchantmentCost minimumCost, EnchantmentRegistryEntry.EnchantmentCost maximumCost, boolean canGetFromEnchantingTable, Set> supportedItemTags ) { this.anvilCost = anvilCost; this.weight = weight; this.minimumCost = minimumCost; this.maximumCost = maximumCost; this.supportedItemTags = supportedItemTags; 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.replanting", "Replanting"); } @Override public int getAnvilCost() { return anvilCost; } @Override public int getMaxLevel() { return 1; } @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 Set.of(EquipmentSlotGroup.MAINHAND); } @Override public @NotNull Set> getSupportedItems() { return supportedItemTags; } @Override public @NotNull Set> getEnchantTagKeys() { return Collections.unmodifiableSet(enchantTagKeys); } public static ReplantingEnchant create(ConfigurationSection configurationSection) { ReplantingEnchant replantingEnchant = new ReplantingEnchant( EnchantioConfig.getInt(configurationSection, "anvilCost", 1), EnchantioConfig.getInt(configurationSection, "weight", 10), EnchantmentRegistryEntry.EnchantmentCost.of( EnchantioConfig.getInt(configurationSection, "minimumCost.base", 1), EnchantioConfig.getInt(configurationSection, "minimumCost.additionalPerLevel", 1) ), EnchantmentRegistryEntry.EnchantmentCost.of( EnchantioConfig.getInt(configurationSection, "maximumCost.base", 65), EnchantioConfig.getInt(configurationSection, "maximumCost.additionalPerLevel", 1) ), EnchantioConfig.getBoolean(configurationSection, "canGetFromEnchantingTable", true), EnchantioConfig.getTagsFromList(EnchantioConfig.getStringList( configurationSection, "supportedItemTags", List.of( "#minecraft:hoes" ) )) ); if (EnchantioConfig.getBoolean(configurationSection, "enabled", true)) { ENCHANTS.put(ReplantingEnchant.KEY, replantingEnchant); } return replantingEnchant; } }