fancyholograms v3: Add hologram command type

This commit is contained in:
Oliver
2025-09-28 13:41:20 +02:00
parent bf699305d5
commit e8cc799f20
3 changed files with 67 additions and 4 deletions

View File

@@ -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<BukkitCommandActor, Hologram> {
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> 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);
}
}
}

View File

@@ -10,6 +10,7 @@ import com.fancyinnovations.fancyholograms.commands.FancyHologramsCMD;
import com.fancyinnovations.fancyholograms.commands.FancyHologramsTestCMD; import com.fancyinnovations.fancyholograms.commands.FancyHologramsTestCMD;
import com.fancyinnovations.fancyholograms.commands.HologramCMD; import com.fancyinnovations.fancyholograms.commands.HologramCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.fancyholograms.ConfigCMD; 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.config.FHConfiguration;
import com.fancyinnovations.fancyholograms.controller.HologramControllerImpl; import com.fancyinnovations.fancyholograms.controller.HologramControllerImpl;
import com.fancyinnovations.fancyholograms.converter.FHConversionRegistry; import com.fancyinnovations.fancyholograms.converter.FHConversionRegistry;
@@ -275,10 +276,10 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog
Lamp.Builder<BukkitCommandActor> lampBuilder = BukkitLamp Lamp.Builder<BukkitCommandActor> lampBuilder = BukkitLamp
.builder(this); .builder(this);
// lampBuilder.parameterTypes(builder -> { lampBuilder.parameterTypes(builder -> {
// builder.addParameterType(Dialog.class, DialogCommandType.INSTANCE); builder.addParameterType(Hologram.class, HologramCommandType.INSTANCE);
// }); });
// lampBuilder.exceptionHandler(DialogCommandType.INSTANCE); lampBuilder.exceptionHandler(HologramCommandType.INSTANCE);
Lamp<BukkitCommandActor> lamp = lampBuilder.build(); Lamp<BukkitCommandActor> lamp = lampBuilder.build();

View File

@@ -1,5 +1,8 @@
language_name: default language_name: default
messages: messages:
common:
hologram:
not_found: "<dark_gray> <gray>Could not find hologram {warningColor}{name}<gray>."
commands: commands:
fancyholograms: fancyholograms:
config: config: