All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
182 lines
6.2 KiB
Java
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;
|
|
}
|
|
|
|
}
|