mirror of
https://github.com/FancyInnovations/FancyPlugins.git
synced 2025-12-06 07:43:36 +00:00
fancyholograms v3: Add trait commands
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
@@ -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>."
|
||||
|
||||
Reference in New Issue
Block a user