package net.knarcraft.blacksmith.util; import net.knarcraft.blacksmith.config.SettingValueType; import net.knarcraft.blacksmith.config.SmithPreset; import net.knarcraft.blacksmith.config.SmithPresetFilter; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Registry; import org.bukkit.enchantments.Enchantment; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; /** * A helper class for getting valid values for tab-completion */ public final class TabCompleteValuesHelper { private TabCompleteValuesHelper() { } /** * Gets tab-completion values for the given value type * * @param valueType

The value type to get possible values for

* @return

The values to show the user

*/ public static @NotNull List getTabCompletions(@NotNull SettingValueType valueType) { return switch (valueType) { case POSITIVE_INTEGER -> getPositiveIntegers(); case BOOLEAN -> getBooleans(); case POSITIVE_DOUBLE -> getPositiveDoubles(); case STRING -> getStrings(); case PERCENTAGE -> getPercentages(); case REFORGE_ABLE_ITEMS -> getReforgeAbleMaterials(); case MATERIAL -> getAllReforgeAbleMaterialNames(); case ENCHANTMENT, ENCHANTMENT_LIST -> getAllEnchantments(); case STRING_LIST -> List.of("*_SHOVEL,*_PICKAXE,*_AXE,*_HOE,*_SWORD:STICK,SMITHING_TABLE:*_PLANKS"); // TODO: Change this to something that makes sense case ADVANCED_COST -> List.of(); }; } /** * Gets a complete list of all reforge-able material names * * @return

A complete list of reforge-able material names

*/ private static @NotNull List getAllReforgeAbleMaterialNames() { List reforgeAbleMaterials = new ArrayList<>(); for (Material material : ItemHelper.getAllReforgeAbleMaterials()) { reforgeAbleMaterials.add(material.name()); } reforgeAbleMaterials.add("NETHERITE_*"); reforgeAbleMaterials.add("DIAMOND_*"); reforgeAbleMaterials.add("GOLDEN_*"); reforgeAbleMaterials.add("IRON_*"); reforgeAbleMaterials.add("CHAINMAIL_*"); reforgeAbleMaterials.add("STONE_*"); reforgeAbleMaterials.add("*BOW"); reforgeAbleMaterials.add("LEATHER_*"); reforgeAbleMaterials.add("WOODEN_*"); return reforgeAbleMaterials; } /** * Gets a complete list of enchantments * * @return

A complete list of enchantments

*/ private static @NotNull List getAllEnchantments() { Registry enchantmentRegistry = Bukkit.getRegistry(Enchantment.class); if (enchantmentRegistry == null) { throw new RuntimeException("Unable to get the enchantment registry"); } List enchantments = new ArrayList<>(); for (Enchantment enchantment : enchantmentRegistry) { // Note: While depreciated in Spigot, the new method is not available for Paper //noinspection deprecation enchantments.add(enchantment.getKey().getKey()); } return enchantments; } /** * Gets some example possible values for reforge-able materials * * @return

Some example possible values for reforge-able materials

*/ private static @NotNull List getReforgeAbleMaterials() { List stringLists = new ArrayList<>(); for (SmithPreset preset : SmithPreset.values()) { stringLists.add("preset:" + preset.name()); for (SmithPresetFilter filter : preset.getSupportedFilters()) { stringLists.add("preset:" + preset.name() + ":" + filter.name()); } } stringLists.add("preset:WEAPON_SMITH:RANGED,SHIELD"); stringLists.add("preset:WEAPON_SMITH,preset:ARMOR_SMITH"); stringLists.add("preset:WEAPON_SMITH,preset:TOOL_SMITH"); stringLists.add("preset:ARMOR_SMITH,preset:TOOL_SMITH"); stringLists.add("BOW,CROSSBOW,ELYTRA"); return stringLists; } /** * Gets some example string values * * @return

Some example string values

*/ private static @NotNull List getStrings() { List strings = new ArrayList<>(1); strings.add("&aExample message. Use & for color tags."); return strings; } /** * Gets some example percentage values * * @return

Some example percentage values

*/ private static @NotNull List getPercentages() { List percentages = new ArrayList<>(6); percentages.add("0"); percentages.add("10"); percentages.add("25"); percentages.add("45"); percentages.add("75"); percentages.add("100"); return percentages; } /** * Gets some possible positive doubles * * @return

Some possible positive doubles

*/ private static @NotNull List getPositiveDoubles() { List positiveDoubles = new ArrayList<>(4); positiveDoubles.add("0.0"); positiveDoubles.add("0.0001"); positiveDoubles.add("5.0"); positiveDoubles.add("7.34"); positiveDoubles.add("5674.34534"); return positiveDoubles; } /** * Gets some example positive integers * * @return

Some example positive integers

*/ private static @NotNull List getPositiveIntegers() { List positiveIntegers = new ArrayList<>(6); positiveIntegers.add("0"); positiveIntegers.add("5"); positiveIntegers.add("10"); positiveIntegers.add("25"); positiveIntegers.add("50"); positiveIntegers.add("100"); positiveIntegers.add("4565"); return positiveIntegers; } /** * Gets the possible boolean values * * @return

The possible boolean values

*/ private static @NotNull List getBooleans() { List booleans = new ArrayList<>(2); booleans.add("True"); booleans.add("False"); return booleans; } }