diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/types/TraitCommandType.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/types/TraitCommandType.java new file mode 100644 index 00000000..0f8e3d93 --- /dev/null +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/types/TraitCommandType.java @@ -0,0 +1,56 @@ +package com.fancyinnovations.fancyholograms.commands.lampCommands.types; + +import com.fancyinnovations.fancyholograms.api.FancyHolograms; +import com.fancyinnovations.fancyholograms.api.trait.HologramTraitRegistry; +import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin; +import org.jetbrains.annotations.NotNull; +import revxrsal.commands.autocomplete.SuggestionProvider; +import revxrsal.commands.bukkit.actor.BukkitCommandActor; +import revxrsal.commands.bukkit.exception.BukkitExceptionHandler; +import revxrsal.commands.exception.InvalidValueException; +import revxrsal.commands.node.ExecutionContext; +import revxrsal.commands.parameter.ParameterType; +import revxrsal.commands.stream.MutableStringStream; + +public class TraitCommandType extends BukkitExceptionHandler implements ParameterType { + + public static final TraitCommandType INSTANCE = new TraitCommandType(); + private static final HologramTraitRegistry REGISTRY = FancyHolograms.get().getTraitRegistry(); + + private TraitCommandType() { + } + + @Override + public HologramTraitRegistry.TraitInfo parse(@NotNull MutableStringStream input, @NotNull ExecutionContext<@NotNull BukkitCommandActor> context) { + String id = input.readString(); + + HologramTraitRegistry.TraitInfo trait = REGISTRY.getTrait(id); + if (trait != null) { + return trait; + } + + throw new InvalidTraitException(id); + } + + @HandleException + public void onInvalidTrait(InvalidTraitException e, BukkitCommandActor actor) { + FancyHologramsPlugin.get().getTranslator() + .translate("commands.hologram.edit.trait.not_found") + .replace("name", e.input()) + .send(actor.sender()); + } + + @Override + public @NotNull SuggestionProvider<@NotNull BukkitCommandActor> defaultSuggestions() { + return (ctx) -> REGISTRY.getTraits().stream() + .map(HologramTraitRegistry.TraitInfo::name) + .toList(); + } + + public static class InvalidTraitException extends InvalidValueException { + public InvalidTraitException(@NotNull String input) { + super(input); + } + } + +} diff --git a/plugins/fancyholograms/src/main/resources/languages/default.yml b/plugins/fancyholograms/src/main/resources/languages/default.yml index ae1d1d0c..e6f56d25 100644 --- a/plugins/fancyholograms/src/main/resources/languages/default.yml +++ b/plugins/fancyholograms/src/main/resources/languages/default.yml @@ -9,4 +9,9 @@ messages: show: settings_header: "FancyHolograms settings:" experimental_header: "FancyHolograms experimental features:" - entry: " - {warningColor}{path}: {value} (default: {default})" \ No newline at end of file + entry: " - {warningColor}{path}: {value} (default: {default})" + + hologram: + edit: + trait: + not_found: "Could not find trait {warningColor}{name}."