Files
Blacksmith/src/main/java/net/knarcraft/blacksmith/util/TabCompleteValuesHelper.java
EpicKnarvik97 967791d275
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
Fixes merge problems
2025-09-06 15:16:00 +02:00

182 lines
6.2 KiB
Java

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 <p>The value type to get possible values for</p>
* @return <p>The values to show the user</p>
*/
public static @NotNull List<String> 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 <p>A complete list of reforge-able material names</p>
*/
private static @NotNull List<String> getAllReforgeAbleMaterialNames() {
List<String> 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 <p>A complete list of enchantments</p>
*/
private static @NotNull List<String> getAllEnchantments() {
Registry<Enchantment> enchantmentRegistry = Bukkit.getRegistry(Enchantment.class);
if (enchantmentRegistry == null) {
throw new RuntimeException("Unable to get the enchantment registry");
}
List<String> 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 <p>Some example possible values for reforge-able materials</p>
*/
private static @NotNull List<String> getReforgeAbleMaterials() {
List<String> 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 <p>Some example string values</p>
*/
private static @NotNull List<String> getStrings() {
List<String> strings = new ArrayList<>(1);
strings.add("&aExample message. Use & for color tags.");
return strings;
}
/**
* Gets some example percentage values
*
* @return <p>Some example percentage values</p>
*/
private static @NotNull List<String> getPercentages() {
List<String> 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 <p>Some possible positive doubles</p>
*/
private static @NotNull List<String> getPositiveDoubles() {
List<String> 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 <p>Some example positive integers</p>
*/
private static @NotNull List<String> getPositiveIntegers() {
List<String> 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 <p>The possible boolean values</p>
*/
private static @NotNull List<String> getBooleans() {
List<String> booleans = new ArrayList<>(2);
booleans.add("True");
booleans.add("False");
return booleans;
}
}