fancyholograms v3: Refactor trait commands and add warning if using dev build

This commit is contained in:
Oliver
2025-10-15 16:44:25 +02:00
parent bef84f0366
commit 49f2dfd79a
7 changed files with 47 additions and 104 deletions

View File

@@ -1,5 +1,6 @@
**ATTENTION**: v3 is still in development and contains breaking changes and potential bugs. **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!! 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% Commit hash: %COMMIT_HASH%

View File

@@ -1 +1 @@
3.0.0-SNAPSHOT.6 3.0.0-SNAPSHOT.7

View File

@@ -202,10 +202,6 @@ public final class HologramCMD extends Command {
return Collections.emptyList(); return Collections.emptyList();
} }
if (args[2].equalsIgnoreCase("traits")) {
return new TraitsCMD().tabcompletion(sender, hologram, args);
}
// /holo edit [hologram] [option] {tab:contextual} // /holo edit [hologram] [option] {tab:contextual}
if (args.length == 4) { if (args.length == 4) {
final var suggestions = switch (args[2].toLowerCase(Locale.ROOT)) { final var suggestions = switch (args[2].toLowerCase(Locale.ROOT)) {
@@ -354,9 +350,6 @@ public final class HologramCMD extends Command {
} }
return switch (action) { return switch (action) {
// hologram data
case "traits" -> new TraitsCMD().run(player, hologram, args);
// display data // display data
case "moveto" -> new MoveToCMD().run(player, hologram, args); case "moveto" -> new MoveToCMD().run(player, hologram, args);
case "rotate" -> new RotateCMD().run(player, hologram, args); case "rotate" -> new RotateCMD().run(player, hologram, args);

View File

@@ -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<String> 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 <name> traits <add|remove> <trait name>
if (args.length < 5) {
MessageHelper.error(player, "Usage: /hologram edit <name> traits <add|remove> <trait name>");
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;
}
}
}
}

View File

@@ -1,7 +1,9 @@
package com.fancyinnovations.fancyholograms.commands.lampCommands.hologram; package com.fancyinnovations.fancyholograms.commands.lampCommands.hologram;
import com.fancyinnovations.fancyholograms.api.hologram.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.HologramTraitRegistry;
import com.fancyinnovations.fancyholograms.api.trait.HologramTraitTrait;
import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.AttachedTraitsSuggestion; import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.AttachedTraitsSuggestion;
import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.DetachedTraitsSuggestion; import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.DetachedTraitsSuggestion;
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin; import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
@@ -70,4 +72,30 @@ public final class TraitCMD {
.replace("name", trait.name()) .replace("name", trait.name())
.send(actor.sender()); .send(actor.sender());
} }
@Command("hologram-new edit <hologram> 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());
}
}
} }

View File

@@ -212,6 +212,17 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog
if (!configuration.areVersionNotificationsMuted()) { if (!configuration.areVersionNotificationsMuted()) {
checkForNewerVersion(); 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.register();
metrics.registerLegacy(); metrics.registerLegacy();

View File

@@ -21,3 +21,7 @@ messages:
detach: detach:
not_attached: "<dark_gray> <gray>Hologram {warningColor}{hologram}<gray> does not have trait {warningColor}{name}<gray> attached." 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>." success: "<dark_gray> <gray>Successfully detached trait {warningColor}{name}<gray> from hologram {warningColor}{hologram}<gray>."
list:
no_traits: "<dark_gray> <gray>Hologram {warningColor}{hologram}<gray> does not have any traits attached."
header: "<dark_gray> <gray>Hologram {warningColor}{hologram}<gray> has the following traits attached:"
entry: "<dark_gray> <gray> - {warningColor}{name}<gray>"