diff --git a/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/data/TextHologramData.java b/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/data/TextHologramData.java index 06150ff4..12e6cd00 100644 --- a/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/data/TextHologramData.java +++ b/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/data/TextHologramData.java @@ -21,6 +21,7 @@ public class TextHologramData extends DisplayHologramData { public static final boolean DEFAULT_TEXT_SHADOW_STATE = false; public static final boolean DEFAULT_SEE_THROUGH = false; public static final int DEFAULT_TEXT_UPDATE_INTERVAL = -1; + public static final byte DEFAULT_TEXT_OPACITY = (byte) 255; private List text = new ArrayList<>(DEFAULT_TEXT); private Color background = null; @@ -28,6 +29,7 @@ public class TextHologramData extends DisplayHologramData { private boolean textShadow = DEFAULT_TEXT_SHADOW_STATE; private boolean seeThrough = DEFAULT_SEE_THROUGH; private int textUpdateInterval = DEFAULT_TEXT_UPDATE_INTERVAL; + private byte textOpacity = DEFAULT_TEXT_OPACITY; /** * @param name Name of hologram @@ -150,6 +152,19 @@ public TextHologramData setTextUpdateInterval(int textUpdateInterval) { return this; } + public byte getTextOpacity() { + return textOpacity; + } + + public TextHologramData setTextOpacity(byte textOpacity) { + if (this.textOpacity != textOpacity) { + this.textOpacity = textOpacity; + setHasChanges(true); + } + + return this; + } + @Override @ApiStatus.Internal public boolean read(ConfigurationSection section, String name) { @@ -163,6 +178,7 @@ public boolean read(ConfigurationSection section, String name) { textShadow = section.getBoolean("text_shadow", DEFAULT_TEXT_SHADOW_STATE); seeThrough = section.getBoolean("see_through", DEFAULT_SEE_THROUGH); textUpdateInterval = section.getInt("update_text_interval", DEFAULT_TEXT_UPDATE_INTERVAL); + textOpacity = (byte) section.getInt("text_opacity", DEFAULT_TEXT_OPACITY); String textAlignmentStr = section.getString("text_alignment", DEFAULT_TEXT_ALIGNMENT.name().toLowerCase()); textAlignment = switch (textAlignmentStr.toLowerCase(Locale.ROOT)) { @@ -197,6 +213,7 @@ public boolean write(ConfigurationSection section, String name) { section.set("see_through", seeThrough); section.set("text_alignment", textAlignment.name().toLowerCase(Locale.ROOT)); section.set("update_text_interval", textUpdateInterval); + section.set("text_opacity", textOpacity); final String color; if (background == null) { @@ -223,6 +240,7 @@ public TextHologramData copy(String name) { .setTextShadow(this.hasTextShadow()) .setSeeThrough(this.isSeeThrough()) .setTextUpdateInterval(this.getTextUpdateInterval()) + .setTextOpacity(this.getTextOpacity()) .setScale(this.getScale()) .setShadowRadius(this.getShadowRadius()) .setShadowStrength(this.getShadowStrength()) diff --git a/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/events/HologramUpdateEvent.java b/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/events/HologramUpdateEvent.java index dab912b9..60c761eb 100644 --- a/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/events/HologramUpdateEvent.java +++ b/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/events/HologramUpdateEvent.java @@ -78,6 +78,7 @@ public enum HologramModification { BACKGROUND, TEXT_SHADOW, TEXT_ALIGNMENT, + TEXT_OPACITY, SEE_THROUGH, SHADOW_RADIUS, SHADOW_STRENGTH, diff --git a/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/hologram/HologramType.java b/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/hologram/HologramType.java index 24c53a59..9a48e7be 100644 --- a/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/hologram/HologramType.java +++ b/plugins/fancyholograms/fh-api/src/main/java/com/fancyinnovations/fancyholograms/api/hologram/HologramType.java @@ -4,7 +4,7 @@ import java.util.List; public enum HologramType { - TEXT(Arrays.asList("background", "textshadow", "textalignment", "seethrough", "setline", "removeline", "addline", "insertbefore", "insertafter", "swapLines", "moveLineUp", "moveLineDown", "updatetextinterval")), + TEXT(Arrays.asList("background", "textshadow", "textalignment", "textopacity", "seethrough", "setline", "removeline", "addline", "insertbefore", "insertafter", "swapLines", "moveLineUp", "moveLineDown", "updatetextinterval")), ITEM(List.of("item")), BLOCK(List.of("block")); 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 929a027f..f02814d3 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 @@ -52,6 +52,7 @@ public final class HologramCMD extends Command { <%primary_color%>- /hologram edit background - Changes the background of the hologram <%primary_color%>- /hologram edit textShadow - Enables/disables the text shadow <%primary_color%>- /hologram edit textAlignment - Sets the text alignment + <%primary_color%>- /hologram edit textopacity <0-100> - Changes the opacity of the text hologram <%primary_color%>- /hologram edit seeThrough - Enables/disables whether the text can be seen through blocks <%primary_color%>- /hologram edit shadowRadius - Changes the shadow radius of the hologram <%primary_color%>- /hologram edit shadowStrength - Changes the shadow strength of the hologram @@ -195,7 +196,7 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String label, @No final var usingNpcs = PluginUtils.isFancyNpcsEnabled(); - List suggestions = new ArrayList<>(Arrays.asList("traits", "position", "moveHere", "center", "moveTo", "rotate", "rotatepitch", "billboard", "scale", "translate", "visibilityDistance", "visibility", "shadowRadius", "shadowStrength", "brightness", usingNpcs ? "linkWithNpc" : "", usingNpcs ? "unlinkWithNpc" : "")); + List suggestions = new ArrayList<>(Arrays.asList("traits", "position", "moveHere", "center", "moveTo", "rotate", "rotatepitch", "billboard", "scale", "translate", "visibilityDistance", "visibility", "shadowRadius", "shadowStrength", "brightness", "glowing", usingNpcs ? "linkWithNpc" : "", usingNpcs ? "unlinkWithNpc" : "")); suggestions.addAll(type.getCommands()); return suggestions.stream().filter(input -> input.toLowerCase().startsWith(args[2].toLowerCase(Locale.ROOT))).toList(); @@ -259,6 +260,7 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String label, @No case "block" -> Arrays.stream(Material.values()).filter(Material::isBlock).map(Enum::name); case "seethrough" -> Stream.of("true", "false"); case "visibility" -> new VisibilityCMD().tabcompletion(sender, hologram, args).stream(); + case "glowing" -> new GlowingCMD().tabcompletion(sender, hologram, args).stream(); default -> null; }; @@ -368,6 +370,7 @@ private boolean edit(@NotNull final CommandSender player, @NotNull final Hologra case "shadowradius" -> new ShadowRadiusCMD().run(player, hologram, args); case "shadowstrength" -> new ShadowStrengthCMD().run(player, hologram, args); case "brightness" -> new BrightnessCMD().run(player, hologram, args); + case "glowing" -> new GlowingCMD().run(player, hologram, args); // text data case "background" -> new BackgroundCMD().run(player, hologram, args); diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/hologram/GlowingCMD.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/hologram/GlowingCMD.java new file mode 100644 index 00000000..44170896 --- /dev/null +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/hologram/GlowingCMD.java @@ -0,0 +1,130 @@ +package com.fancyinnovations.fancyholograms.commands.hologram; + +import com.fancyinnovations.fancyholograms.api.data.DisplayHologramData; +import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent; +import com.fancyinnovations.fancyholograms.api.hologram.Hologram; +import com.fancyinnovations.fancyholograms.commands.HologramCMD; +import com.fancyinnovations.fancyholograms.commands.Subcommand; +import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin; +import com.fancyinnovations.fancyholograms.utils.GlowingColor; +import de.oliver.fancylib.MessageHelper; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Objects; +import java.util.stream.Collectors; + +public class GlowingCMD implements Subcommand { + + @Override + public List tabcompletion(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) { + if (args.length == 4) { + return Arrays.stream(GlowingColor.values()) + .map(color -> color.name().toLowerCase(Locale.ROOT)) + .collect(Collectors.toList()); + } + return null; + } + + @Override + public boolean run(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) { + if (!(player.hasPermission("fancyholograms.hologram.edit.glowing"))) { + MessageHelper.error(player, "You don't have the required permission to change the glowing of a hologram"); + return false; + } + + if (!(hologram.getData() instanceof DisplayHologramData displayData)) { + MessageHelper.error(player, "This command can only be used on display holograms"); + return false; + } + + if (hologram.getData().getType() == com.fancyinnovations.fancyholograms.api.hologram.HologramType.TEXT) { + MessageHelper.error(player, "You can only make item and block holograms glow"); + return false; + } + + if (args.length == 3) { + final var copied = displayData.copy(displayData.getName()); + copied.setGlowing(!displayData.isGlowing()); + + if (!HologramCMD.callModificationEvent(hologram, player, copied, HologramUpdateEvent.HologramModification.GLOWING)) { + return false; + } + + displayData.setGlowing(copied.isGlowing()); + + if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) { + FancyHologramsPlugin.get().getStorage().save(hologram.getData()); + } + + MessageHelper.success(player, "Toggled glowing " + (displayData.isGlowing() ? "on" : "off")); + return true; + } + + final var colorArg = args[3].toLowerCase(Locale.ROOT); + + if (colorArg.equals("disabled")) { + final var copied = displayData.copy(displayData.getName()); + copied.setGlowing(false); + + if (!HologramCMD.callModificationEvent(hologram, player, copied, HologramUpdateEvent.HologramModification.GLOWING)) { + return false; + } + + displayData.setGlowing(false); + + if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) { + FancyHologramsPlugin.get().getStorage().save(hologram.getData()); + } + + MessageHelper.success(player, "Disabled glowing"); + return true; + } + + NamedTextColor color; + try { + GlowingColor glowingColor = GlowingColor.valueOf(colorArg.toUpperCase(Locale.ROOT)); + color = glowingColor.getColor(); + if (color == null) { + MessageHelper.error(player, "Could not parse glowing color"); + return false; + } + } catch (IllegalArgumentException e) { + MessageHelper.error(player, "Could not parse glowing color"); + return false; + } + + if (Objects.equals(color, displayData.getGlowingColor()) && displayData.isGlowing()) { + MessageHelper.warning(player, "This hologram already has this glowing color"); + return false; + } + + final var copied = displayData.copy(displayData.getName()); + copied.setGlowingColor(color); + copied.setGlowing(true); + + if (!HologramCMD.callModificationEvent(hologram, player, copied, HologramUpdateEvent.HologramModification.GLOWING_COLOR)) { + return false; + } + + if (Objects.equals(copied.getGlowingColor(), displayData.getGlowingColor()) && displayData.isGlowing()) { + MessageHelper.warning(player, "This hologram already has this glowing color"); + return false; + } + + displayData.setGlowingColor(copied.getGlowingColor()); + displayData.setGlowing(true); + + if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) { + FancyHologramsPlugin.get().getStorage().save(hologram.getData()); + } + + MessageHelper.success(player, "Changed glowing color"); + return true; + } +} \ No newline at end of file diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/hologram/OpacityCMD.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/hologram/OpacityCMD.java new file mode 100644 index 00000000..0175d50f --- /dev/null +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/hologram/OpacityCMD.java @@ -0,0 +1,61 @@ +package com.fancyinnovations.fancyholograms.commands.lampCommands.hologram; + +import com.fancyinnovations.fancyholograms.api.data.TextHologramData; +import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent; +import com.fancyinnovations.fancyholograms.api.hologram.Hologram; +import com.fancyinnovations.fancyholograms.commands.HologramCMD; +import com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions.OpacitySuggestion; +import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin; +import de.oliver.fancylib.MessageHelper; +import org.jetbrains.annotations.NotNull; +import revxrsal.commands.annotation.Command; +import revxrsal.commands.annotation.Description; +import revxrsal.commands.annotation.Range; +import revxrsal.commands.annotation.SuggestWith; +import revxrsal.commands.bukkit.actor.BukkitCommandActor; +import revxrsal.commands.bukkit.annotation.CommandPermission; + +public final class OpacityCMD { + + public static final OpacityCMD INSTANCE = new OpacityCMD(); + + private OpacityCMD() { + } + + @Command("hologram-new edit textopacity ") + @Description("Changes the opacity of the text hologram") + @CommandPermission("fancyholograms.hologram.edit.opacity") + public void setOpacity( + final @NotNull BukkitCommandActor actor, + final @NotNull Hologram hologram, + final @Range(min = 0, max = 100) @SuggestWith(OpacitySuggestion.class) int opacity + ) { + if (!(hologram.getData() instanceof TextHologramData textData)) { + MessageHelper.error(actor.sender(), "This command can only be used on text holograms"); + return; + } + + // Convert percentage (0-100) to byte value (0-255) + final byte opacityByte = (byte) Math.round(opacity * 255.0 / 100.0); + + if (opacityByte == textData.getTextOpacity()) { + MessageHelper.warning(actor.sender(), "This hologram already has opacity set to " + opacity + "%"); + return; + } + + final var copied = textData.copy(textData.getName()); + copied.setTextOpacity(opacityByte); + + if (!HologramCMD.callModificationEvent(hologram, actor.sender(), copied, HologramUpdateEvent.HologramModification.TEXT_OPACITY)) { + return; + } + + textData.setTextOpacity(opacityByte); + + if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) { + FancyHologramsPlugin.get().getStorage().save(hologram.getData()); + } + + MessageHelper.success(actor.sender(), "Changed text opacity to " + opacity + "%"); + } +} diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/suggestions/OpacitySuggestion.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/suggestions/OpacitySuggestion.java new file mode 100644 index 00000000..32363145 --- /dev/null +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/commands/lampCommands/suggestions/OpacitySuggestion.java @@ -0,0 +1,17 @@ +package com.fancyinnovations.fancyholograms.commands.lampCommands.suggestions; + +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 OpacitySuggestion implements SuggestionProvider { + + @Override + public @NotNull Collection getSuggestions(@NotNull ExecutionContext context) { + return List.of("0", "25", "50", "75", "100"); + } +} diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/hologram/HologramImpl.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/hologram/HologramImpl.java index cae73f0e..9a243ee5 100644 --- a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/hologram/HologramImpl.java +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/hologram/HologramImpl.java @@ -156,6 +156,7 @@ private void syncWithData() { textDisplay.setStyleFlags((byte) 0); textDisplay.setShadow(textData.hasTextShadow()); textDisplay.setSeeThrough(textData.isSeeThrough()); + textDisplay.setTextOpacity(textData.getTextOpacity()); switch (textData.getTextAlignment()) { case LEFT -> textDisplay.setAlignLeft(true); @@ -221,6 +222,30 @@ private void syncWithData() { } fsDisplay.setViewRange(displayData.getVisibilityDistance()); + + if (displayData.isGlowing()) { + int rgb = displayData.getGlowingColor().value() & 0xFFFFFF; + int argb = 0xFF000000 | rgb; + fsDisplay.setGlowColorOverride(argb); + + byte flags = 0x40; + try { + byte currentFlags = fsDisplay.getSharedFlags(); + flags = (byte) (currentFlags | 0x40); + } catch (NullPointerException ignored) { + } + fsDisplay.setSharedFlags(flags); + } else { + fsDisplay.setGlowColorOverride(-1); + + byte flags = 0; + try { + byte currentFlags = fsDisplay.getSharedFlags(); + flags = (byte) (currentFlags & ~0x40); + } catch (NullPointerException ignored) { + } + fsDisplay.setSharedFlags(flags); + } } } 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 392d2cd6..4e784b33 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 @@ -11,6 +11,7 @@ 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.OpacityCMD; import com.fancyinnovations.fancyholograms.commands.lampCommands.hologram.MoveDownCMD; import com.fancyinnovations.fancyholograms.commands.lampCommands.hologram.MoveUpCMD; import com.fancyinnovations.fancyholograms.commands.lampCommands.hologram.SwapLinesCMD; @@ -312,6 +313,7 @@ private void registerLampCommands() { // hologram commands lamp.register(TraitCMD.INSTANCE); + lamp.register(OpacityCMD.INSTANCE); lamp.register(MoveUpCMD.INSTANCE); lamp.register(MoveDownCMD.INSTANCE); lamp.register(SwapLinesCMD.INSTANCE); diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/storage/json/JsonAdapter.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/storage/json/JsonAdapter.java index c2114246..1fbb3441 100644 --- a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/storage/json/JsonAdapter.java +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/storage/json/JsonAdapter.java @@ -6,6 +6,7 @@ import com.fancyinnovations.fancyholograms.api.trait.HologramTraitRegistry; import com.fancyinnovations.fancyholograms.storage.json.model.*; import de.oliver.fancyanalytics.logger.properties.ThrowableProperty; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -63,12 +64,16 @@ public static JsonDisplayHologramData displayHologramDataToJson(com.fancyinnovat } public static JsonTextHologramData textHologramDataToJson(com.fancyinnovations.fancyholograms.api.data.TextHologramData data) { + // Convert byte (0-255) to percentage (0-100) + int opacityPercentage = Math.round(((int) data.getTextOpacity() & 0xFF) * 100.0f / 255.0f); + return new JsonTextHologramData( data.getText(), data.hasTextShadow(), data.isSeeThrough(), data.getTextAlignment(), data.getTextUpdateInterval(), + opacityPercentage, data.getBackground() == null ? "" : "#" + Integer.toHexString(data.getBackground().asARGB()) ); } @@ -168,12 +173,16 @@ public static com.fancyinnovations.fancyholograms.api.data.HologramData fromJson .setTextShadow(data.text_data().text_shadow()) .setSeeThrough(data.text_data().see_through()) .setTextUpdateInterval(data.text_data().text_update_interval()) + .setTextOpacity(data.text_data().text_opacity() != null + ? (byte) Math.round(data.text_data().text_opacity() * 255.0 / 100.0) + : (byte) 255) .setBillboard(data.display_data().billboard()) // display data .setScale(scale) .setTranslation(translation) .setBrightness(brightness) .setShadowRadius(data.display_data().shadow_radius()) .setShadowStrength(data.display_data().shadow_strength()) + .setGlowingColor(data.display_data().glowing_color() != null ? data.display_data().glowing_color() : com.fancyinnovations.fancyholograms.api.data.DisplayHologramData.DEFAULT_GLOWING_COLOR) .setWorldName(data.hologram_data().worldName())// hologram data .setVisibilityDistance(data.hologram_data().visibilityDistance()) .setVisibility(data.hologram_data().visibility()) diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/storage/json/model/JsonTextHologramData.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/storage/json/model/JsonTextHologramData.java index 0fcb6a52..7fec3728 100644 --- a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/storage/json/model/JsonTextHologramData.java +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/storage/json/model/JsonTextHologramData.java @@ -10,6 +10,7 @@ public record JsonTextHologramData( Boolean see_through, TextDisplay.TextAlignment text_alignment, Integer text_update_interval, + Integer text_opacity, String background_color ) { } diff --git a/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/utils/GlowingColor.java b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/utils/GlowingColor.java new file mode 100644 index 00000000..7f5d4d72 --- /dev/null +++ b/plugins/fancyholograms/src/main/java/com/fancyinnovations/fancyholograms/utils/GlowingColor.java @@ -0,0 +1,50 @@ +package com.fancyinnovations.fancyholograms.utils; + +import net.kyori.adventure.text.format.NamedTextColor; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public enum GlowingColor { + DISABLED(null, ""), + BLACK(NamedTextColor.BLACK, "color_black"), + DARK_BLUE(NamedTextColor.DARK_BLUE, "color_dark_blue"), + DARK_GREEN(NamedTextColor.DARK_GREEN, "color_dark_green"), + DARK_AQUA(NamedTextColor.DARK_AQUA, "color_dark_aqua"), + DARK_RED(NamedTextColor.DARK_RED, "color_dark_red"), + DARK_PURPLE(NamedTextColor.DARK_PURPLE, "color_dark_purple"), + GOLD(NamedTextColor.GOLD, "color_gold"), + GRAY(NamedTextColor.GRAY, "color_gray"), + DARK_GRAY(NamedTextColor.DARK_GRAY, "color_dark_gray"), + BLUE(NamedTextColor.BLUE, "color_blue"), + GREEN(NamedTextColor.GREEN, "color_green"), + AQUA(NamedTextColor.AQUA, "color_aqua"), + RED(NamedTextColor.RED, "color_red"), + LIGHT_PURPLE(NamedTextColor.LIGHT_PURPLE, "color_light_purple"), + YELLOW(NamedTextColor.YELLOW, "color_yellow"), + WHITE(NamedTextColor.WHITE, "color_white"); + + private final @Nullable NamedTextColor color; + private final @NotNull String translationKey; + + GlowingColor(final @Nullable NamedTextColor color, final @NotNull String translationKey) { + this.color = color; + this.translationKey = translationKey; + } + + public @Nullable NamedTextColor getColor() { + return color; + } + + public @NotNull String getTranslationKey() { + return translationKey; + } + + public static @NotNull GlowingColor fromAdventure(final @NotNull NamedTextColor color) { + for (final GlowingColor glowingColor : GlowingColor.values()) + if (glowingColor.color != null && glowingColor.color.value() == color.value()) + return glowingColor; + throw new IllegalArgumentException("UNSUPPORTED COLOR"); + } + +} \ No newline at end of file