fancyholograms v3: Add trait commands

This commit is contained in:
Oliver
2025-09-28 20:52:56 +02:00
parent 203d77db3d
commit 2973d9c944
6 changed files with 149 additions and 4 deletions

View File

@@ -22,7 +22,7 @@ public final class ConfigCMD {
private ConfigCMD() {
}
@Command("fancyholograms config show")
@Command("fancyholograms-new config show")
@Description("Shows the current configuration")
@CommandPermission("fancyholograms.commands.fancyholograms.config.show")
public void show(

View File

@@ -0,0 +1,73 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.hologram;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.api.trait.HologramTraitRegistry;
import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.AttachedTraitsSuggestion;
import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.DetachedTraitsSuggestion;
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
import de.oliver.fancylib.translations.Translator;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.Description;
import revxrsal.commands.annotation.SuggestWith;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.bukkit.annotation.CommandPermission;
public final class TraitCMD {
public static final TraitCMD INSTANCE = new TraitCMD();
private final FancyHologramsPlugin plugin = FancyHologramsPlugin.get();
private final Translator translator = FancyHologramsPlugin.get().getTranslator();
private TraitCMD() {
}
@Command("hologram-new edit <hologram> trait attach <trait>")
@Description("Attaches a trait to a hologram")
@CommandPermission("fancyholograms.commands.hologram.trait.attach")
public void attach(
final @NotNull BukkitCommandActor actor,
final @NotNull Hologram hologram,
final @NotNull @SuggestWith(AttachedTraitsSuggestion.class) HologramTraitRegistry.TraitInfo trait
) {
if (hologram.getData().getTraitTrait().isTraitAttached(trait.clazz())) {
translator.translate("commands.hologram.edit.trait.attach.already_attached")
.replace("hologram", hologram.getData().getName())
.replace("name", trait.name())
.send(actor.sender());
return;
}
hologram.getData().addTrait(trait.clazz());
translator.translate("commands.hologram.edit.trait.attach.success")
.replace("hologram", hologram.getData().getName())
.replace("name", trait.name())
.send(actor.sender());
}
@Command("hologram-new edit <hologram> trait detach <trait>")
@Description("Detaches a trait to a hologram")
@CommandPermission("fancyholograms.commands.hologram.trait.detach")
public void detach(
final @NotNull BukkitCommandActor actor,
final @NotNull Hologram hologram,
final @SuggestWith(DetachedTraitsSuggestion.class) @NotNull HologramTraitRegistry.TraitInfo trait
) {
if (!hologram.getData().getTraitTrait().isTraitAttached(trait.clazz())) {
translator.translate("commands.hologram.edit.trait.detach.not_attached")
.replace("hologram", hologram.getData().getName())
.replace("name", trait.name())
.send(actor.sender());
return;
}
hologram.getData().getTraitTrait().removeTrait(trait.clazz());
translator.translate("commands.hologram.edit.trait.detach.success")
.replace("hologram", hologram.getData().getName())
.replace("name", trait.name())
.send(actor.sender());
}
}

View File

@@ -0,0 +1,29 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions;
import com.fancyinnovations.fancyholograms.api.FancyHolograms;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.api.trait.HologramTraitRegistry;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.autocomplete.SuggestionProvider;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.node.ExecutionContext;
import java.util.Collection;
import java.util.List;
public class AttachedTraitsSuggestion implements SuggestionProvider<BukkitCommandActor> {
@Override
public @NotNull Collection<String> getSuggestions(@NotNull ExecutionContext<BukkitCommandActor> context) {
Hologram hologram = context.getResolvedArgumentOrNull(Hologram.class);
if (hologram == null) {
return List.of();
}
return FancyHolograms.get().getTraitRegistry().getTraits().stream()
.filter(trait -> !trait.isDefault())
.filter(trait -> !hologram.getData().getTraitTrait().isTraitAttached(trait.clazz()))
.map(HologramTraitRegistry.TraitInfo::name)
.toList();
}
}

View File

@@ -0,0 +1,27 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.api.trait.HologramTrait;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.autocomplete.SuggestionProvider;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.node.ExecutionContext;
import java.util.Collection;
import java.util.List;
public class DetachedTraitsSuggestion implements SuggestionProvider<BukkitCommandActor> {
@Override
public @NotNull Collection<String> getSuggestions(@NotNull ExecutionContext<BukkitCommandActor> context) {
Hologram hologram = context.getResolvedArgumentOrNull(Hologram.class);
if (hologram == null) {
return List.of();
}
return hologram.getData().getTraitTrait().getTraits()
.stream()
.map(HologramTrait::getName)
.toList();
}
}

View File

@@ -6,11 +6,14 @@ import com.fancyinnovations.fancyholograms.api.HologramController;
import com.fancyinnovations.fancyholograms.api.HologramRegistry;
import com.fancyinnovations.fancyholograms.api.data.HologramData;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.api.trait.HologramTraitRegistry;
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.hologram.TraitCMD;
import com.fancyinnovations.fancyholograms.commands.lampCommands.types.HologramCommandType;
import com.fancyinnovations.fancyholograms.commands.lampCommands.types.TraitCommandType;
import com.fancyinnovations.fancyholograms.config.FHConfiguration;
import com.fancyinnovations.fancyholograms.controller.HologramControllerImpl;
import com.fancyinnovations.fancyholograms.converter.FHConversionRegistry;
@@ -198,10 +201,9 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog
public void onEnable() {
new FancyLib(INSTANCE);
registerCommands();
if (configuration.useLampCommands()) {
registerLampCommands();
} else {
registerCommands();
}
registerListeners();
@@ -278,12 +280,20 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog
lampBuilder.parameterTypes(builder -> {
builder.addParameterType(Hologram.class, HologramCommandType.INSTANCE);
builder.addParameterType(HologramTraitRegistry.TraitInfo.class, TraitCommandType.INSTANCE);
});
lampBuilder.exceptionHandler(HologramCommandType.INSTANCE);
lampBuilder
.exceptionHandler(HologramCommandType.INSTANCE)
.exceptionHandler(TraitCommandType.INSTANCE);
Lamp<BukkitCommandActor> lamp = lampBuilder.build();
// fancyholograms commands
lamp.register(ConfigCMD.INSTANCE);
// hologram commands
lamp.register(TraitCMD.INSTANCE);
}
private void registerListeners() {

View File

@@ -15,3 +15,9 @@ messages:
edit:
trait:
not_found: "<dark_gray> <gray>Could not find trait {warningColor}{name}<gray>."
attach:
already_attached: "<dark_gray> <gray>Hologram {warningColor}{hologram}<gray> already has trait {warningColor}{name}<gray> attached."
success: "<dark_gray> <gray>Successfully attached trait {warningColor}{name}<gray> to hologram {warningColor}{hologram}<gray>."
detach:
not_attached: "<dark_gray> <gray>Hologram {warningColor}{hologram}<gray> does not have trait {warningColor}{name}<gray> attached."
success: "<dark_gray> <gray>Successfully detached trait {warningColor}{name}<gray> from hologram {warningColor}{hologram}<gray>."