From 49f2dfd79a0769b3b37d200f809aeab5e404d40d Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 15 Oct 2025 16:44:25 +0200 Subject: [PATCH] fancyholograms v3: Refactor trait commands and add warning if using dev build --- plugins/fancyholograms/CHANGELOG-SNAPSHOT.md | 5 +- plugins/fancyholograms/VERSION | 2 +- .../fancyholograms/commands/HologramCMD.java | 7 -- .../commands/hologram/TraitsCMD.java | 94 ------------------- .../lampCommands/hologram/TraitCMD.java | 28 ++++++ .../main/FancyHologramsPlugin.java | 11 +++ .../src/main/resources/languages/default.yml | 4 + 7 files changed, 47 insertions(+), 104 deletions(-) delete mode 100644 plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/hologram/TraitsCMD.java diff --git a/plugins/fancyholograms/CHANGELOG-SNAPSHOT.md b/plugins/fancyholograms/CHANGELOG-SNAPSHOT.md index 8ff8b587..42ff7372 100644 --- a/plugins/fancyholograms/CHANGELOG-SNAPSHOT.md +++ b/plugins/fancyholograms/CHANGELOG-SNAPSHOT.md @@ -1,5 +1,6 @@ -**ATTENTION**: v3 is still in development and contains breaking changes and potential bugs. -Do not use this version in production at all, or you may lose data!! +**ATTENTION**: v3 is still in development and contains breaking changes and potential bugs. +Do not use this version in production at all, or you may lose data! +Once migrated to v3, you cannot go back to v2 without losing all your holograms and configurations! Commit hash: %COMMIT_HASH% diff --git a/plugins/fancyholograms/VERSION b/plugins/fancyholograms/VERSION index a26a84a5..e61a90b0 100644 --- a/plugins/fancyholograms/VERSION +++ b/plugins/fancyholograms/VERSION @@ -1 +1 @@ -3.0.0-SNAPSHOT.6 \ No newline at end of file +3.0.0-SNAPSHOT.7 \ No newline at end of file diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/HologramCMD.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/HologramCMD.java index 233fea46..88922c2f 100644 --- a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/HologramCMD.java +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/HologramCMD.java @@ -202,10 +202,6 @@ public final class HologramCMD extends Command { return Collections.emptyList(); } - if (args[2].equalsIgnoreCase("traits")) { - return new TraitsCMD().tabcompletion(sender, hologram, args); - } - // /holo edit [hologram] [option] {tab:contextual} if (args.length == 4) { final var suggestions = switch (args[2].toLowerCase(Locale.ROOT)) { @@ -354,9 +350,6 @@ public final class HologramCMD extends Command { } return switch (action) { - // hologram data - case "traits" -> new TraitsCMD().run(player, hologram, args); - // display data case "moveto" -> new MoveToCMD().run(player, hologram, args); case "rotate" -> new RotateCMD().run(player, hologram, args); diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/hologram/TraitsCMD.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/hologram/TraitsCMD.java deleted file mode 100644 index 52c0719f..00000000 --- a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/hologram/TraitsCMD.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.fancyinnovations.fancyholograms.commands.hologram; - -import com.fancyinnovations.fancyholograms.api.FancyHolograms; -import com.fancyinnovations.fancyholograms.api.hologram.Hologram; -import com.fancyinnovations.fancyholograms.api.trait.HologramTraitRegistry; -import com.fancyinnovations.fancyholograms.commands.Subcommand; -import de.oliver.fancylib.MessageHelper; -import org.bukkit.command.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -public class TraitsCMD implements Subcommand { - - @Override - public List tabcompletion(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) { - if (args.length == 4) { - return List.of("add", "remove"); - } else if (args.length == 5) { - return FancyHolograms.get().getTraitRegistry().getTraits() - .stream() - .filter(ti -> !ti.isDefault()) - .filter(ti -> { - if (args[3].equalsIgnoreCase("add")) { - return !hologram.getData().getTraitTrait().isTraitAttached(ti.clazz()); - } else if (args[3].equalsIgnoreCase("remove")) { - return hologram.getData().getTraitTrait().isTraitAttached(ti.clazz()); - } - - return true; - }) - .map(HologramTraitRegistry.TraitInfo::name) - .toList(); - } - - return List.of(); - } - - @Override - public boolean run(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) { - if (!(player.hasPermission("fancyholograms.hologram.edit.traits"))) { - MessageHelper.error(player, "You don't have the required permission to change traits of a hologram."); - return false; - } - - // /hologram edit traits - - if (args.length < 5) { - MessageHelper.error(player, "Usage: /hologram edit traits "); - return false; - } - - String action = args[3]; - String traitName = args[4]; - if (traitName == null || traitName.isEmpty()) { - MessageHelper.error(player, "You must specify a trait name."); - return false; - } - - HologramTraitRegistry.TraitInfo traitInfo = FancyHolograms.get().getTraitRegistry().getTrait(traitName); - if (traitInfo == null) { - MessageHelper.error(player, "Trait '" + traitName + "' does not exist."); - return false; - } - - switch (action.toLowerCase()) { - case "add": { - if (hologram.getData().getTraitTrait().isTraitAttached(traitInfo.clazz())) { - MessageHelper.error(player, "Trait '" + traitName + "' is already attached to hologram '" + hologram.getData().getName() + "'."); - return false; - } - - hologram.getData().getTraitTrait().addTrait(traitInfo.clazz()); - MessageHelper.success(player, "Trait '" + traitName + "' has been added to hologram '" + hologram.getData().getName() + "'."); - return true; - } - case "remove": { - if (!hologram.getData().getTraitTrait().isTraitAttached(traitInfo.clazz())) { - MessageHelper.error(player, "Trait '" + traitName + "' is not attached to hologram '" + hologram.getData().getName() + "'."); - return false; - } - - hologram.getData().getTraitTrait().removeTrait(traitInfo.clazz()); - MessageHelper.success(player, "Trait '" + traitName + "' has been removed from hologram '" + hologram.getData().getName() + "'."); - return true; - } - default: { - MessageHelper.error(player, "Invalid action. Use 'add' or 'remove'."); - return false; - } - } - } -} diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/hologram/TraitCMD.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/hologram/TraitCMD.java index 0a61250c..db060e11 100644 --- a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/hologram/TraitCMD.java +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/hologram/TraitCMD.java @@ -1,7 +1,9 @@ package com.fancyinnovations.fancyholograms.commands.lampCommands.hologram; import com.fancyinnovations.fancyholograms.api.hologram.Hologram; +import com.fancyinnovations.fancyholograms.api.trait.HologramTrait; import com.fancyinnovations.fancyholograms.api.trait.HologramTraitRegistry; +import com.fancyinnovations.fancyholograms.api.trait.HologramTraitTrait; import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.AttachedTraitsSuggestion; import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.DetachedTraitsSuggestion; import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin; @@ -70,4 +72,30 @@ public final class TraitCMD { .replace("name", trait.name()) .send(actor.sender()); } + + @Command("hologram-new edit trait list") + @Description("Lists all attached traits of a hologram") + @CommandPermission("fancyholograms.commands.hologram.trait.list") + public void list( + final @NotNull BukkitCommandActor actor, + final @NotNull Hologram hologram + ) { + HologramTraitTrait traitTrait = hologram.getData().getTraitTrait(); + if (traitTrait.getTraits().isEmpty()) { + translator.translate("commands.hologram.edit.trait.list.no_traits") + .replace("hologram", hologram.getData().getName()) + .send(actor.sender()); + return; + } + + translator.translate("commands.hologram.edit.trait.list.header") + .replace("hologram", hologram.getData().getName()) + .send(actor.sender()); + + for (HologramTrait trait : traitTrait.getTraits()) { + translator.translate("commands.hologram.edit.trait.list.entry") + .replace("name", trait.getName()) + .send(actor.sender()); + } + } } 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 8c7a2df4..776d7678 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 @@ -212,6 +212,17 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog if (!configuration.areVersionNotificationsMuted()) { checkForNewerVersion(); } + if (versionConfig.isDevelopmentBuild()) { + fancyLogger.warn(""" + + -------------------------------------------------- + You are using a development build of FancyHolograms. + Please be aware that there might be bugs in this version. + If you find any bugs, please report them on our discord server (https://discord.gg/ZUgYCEJUEx). + Read more about the risks of using a development build here: https://docs.fancyinnovations.com/development-guidelines/versioning/#build + -------------------------------------------------- + """); + } metrics.register(); metrics.registerLegacy(); diff --git a/plugins/fancyholograms/src/main/resources/languages/default.yml b/plugins/fancyholograms/src/main/resources/languages/default.yml index 708cd455..a0420d21 100644 --- a/plugins/fancyholograms/src/main/resources/languages/default.yml +++ b/plugins/fancyholograms/src/main/resources/languages/default.yml @@ -21,3 +21,7 @@ messages: detach: not_attached: "Hologram {warningColor}{hologram} does not have trait {warningColor}{name} attached." success: "Successfully detached trait {warningColor}{name} from hologram {warningColor}{hologram}." + list: + no_traits: "Hologram {warningColor}{hologram} does not have any traits attached." + header: "Hologram {warningColor}{hologram} has the following traits attached:" + entry: " - {warningColor}{name}"