From e8cc799f2096384baa3d4cb30d8c598e2dabea30 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 28 Sep 2025 13:41:20 +0200 Subject: [PATCH] fancyholograms v3: Add hologram command type --- .../types/HologramCommandType.java | 59 +++++++++++++++++++ .../main/FancyHologramsPlugin.java | 9 +-- .../src/main/resources/languages/default.yml | 3 + 3 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/types/HologramCommandType.java diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/types/HologramCommandType.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/types/HologramCommandType.java new file mode 100644 index 00000000..7099bcab --- /dev/null +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/types/HologramCommandType.java @@ -0,0 +1,59 @@ +package com.fancyinnovations.fancyholograms.commands.lampCommands.types; + +import com.fancyinnovations.fancyholograms.api.FancyHolograms; +import com.fancyinnovations.fancyholograms.api.HologramRegistry; +import com.fancyinnovations.fancyholograms.api.hologram.Hologram; +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; + +import java.util.Optional; + +public class HologramCommandType extends BukkitExceptionHandler implements ParameterType { + + public static final HologramCommandType INSTANCE = new HologramCommandType(); + private static final HologramRegistry REGISTRY = FancyHolograms.get().getRegistry(); + + private HologramCommandType() { + } + + @Override + public Hologram parse(@NotNull MutableStringStream input, @NotNull ExecutionContext<@NotNull BukkitCommandActor> context) { + String id = input.readString(); + + Optional hologram = REGISTRY.get(id); + if (hologram.isPresent()) { + return hologram.get(); + } + + throw new InvalidHologramException(id); + } + + @HandleException + public void onInvalidHologram(InvalidHologramException e, BukkitCommandActor actor) { + FancyHologramsPlugin.get().getTranslator() + .translate("common.hologram.not_found") + .replace("name", e.input()) + .send(actor.sender()); + } + + @Override + public @NotNull SuggestionProvider<@NotNull BukkitCommandActor> defaultSuggestions() { + return (ctx) -> REGISTRY.getAll().stream() + .map(hologram -> hologram.getData().getName()) + .toList(); + } + + public static class InvalidHologramException extends InvalidValueException { + public InvalidHologramException(@NotNull String input) { + super(input); + } + } + +} diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/main/FancyHologramsPlugin.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/main/FancyHologramsPlugin.java index 1abeeef7..e677f6a5 100644 --- a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/main/FancyHologramsPlugin.java +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/main/FancyHologramsPlugin.java @@ -10,6 +10,7 @@ import com.fancyinnovations.fancyholograms.commands.FancyHologramsCMD; import com.fancyinnovations.fancyholograms.commands.FancyHologramsTestCMD; import com.fancyinnovations.fancyholograms.commands.HologramCMD; import com.fancyinnovations.fancyholograms.commands.lampCommands.fancyholograms.ConfigCMD; +import com.fancyinnovations.fancyholograms.commands.lampCommands.types.HologramCommandType; import com.fancyinnovations.fancyholograms.config.FHConfiguration; import com.fancyinnovations.fancyholograms.controller.HologramControllerImpl; import com.fancyinnovations.fancyholograms.converter.FHConversionRegistry; @@ -275,10 +276,10 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog Lamp.Builder lampBuilder = BukkitLamp .builder(this); -// lampBuilder.parameterTypes(builder -> { -// builder.addParameterType(Dialog.class, DialogCommandType.INSTANCE); -// }); -// lampBuilder.exceptionHandler(DialogCommandType.INSTANCE); + lampBuilder.parameterTypes(builder -> { + builder.addParameterType(Hologram.class, HologramCommandType.INSTANCE); + }); + lampBuilder.exceptionHandler(HologramCommandType.INSTANCE); Lamp lamp = lampBuilder.build(); diff --git a/plugins/fancyholograms/src/main/resources/languages/default.yml b/plugins/fancyholograms/src/main/resources/languages/default.yml index c11ff5af..ae1d1d0c 100644 --- a/plugins/fancyholograms/src/main/resources/languages/default.yml +++ b/plugins/fancyholograms/src/main/resources/languages/default.yml @@ -1,5 +1,8 @@ language_name: default messages: + common: + hologram: + not_found: "Could not find hologram {warningColor}{name}." commands: fancyholograms: config: