diff --git a/src/main/java/com/alttd/easter/commands/subcommands/SpawnEggs.java b/src/main/java/com/alttd/easter/commands/subcommands/SpawnEggs.java
index e931ea8..dd85d59 100644
--- a/src/main/java/com/alttd/easter/commands/subcommands/SpawnEggs.java
+++ b/src/main/java/com/alttd/easter/commands/subcommands/SpawnEggs.java
@@ -4,6 +4,7 @@ import com.alttd.easter.commands.SubCommand;
import com.alttd.easter.config.Messages;
import com.alttd.easter.egg.EggType;
import com.alttd.easter.util.ItemUtils;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -34,7 +35,9 @@ public class SpawnEggs extends SubCommand {
EggType specific = parseEggType(args[1]);
if (specific != null) {
giveEgg(player, specific, amount);
- player.sendRichMessage("Spawned " + amount + " of " + ItemUtils.prettify(specific.name()) + " egg(s).");
+ player.sendRichMessage("Spawned " + amount + " of egg(s).",
+ Placeholder.component("type", ItemUtils.typeNameComponent(specific))
+ );
return true;
}
}
@@ -42,7 +45,9 @@ public class SpawnEggs extends SubCommand {
EggType specific = parseEggType(args[2]);
if (specific != null) {
giveEgg(player, specific, amount);
- player.sendRichMessage("Spawned " + amount + " of " + ItemUtils.prettify(specific.name()) + " egg(s).");
+ player.sendRichMessage("Spawned " + amount + " of egg(s).",
+ Placeholder.component("type", ItemUtils.typeNameComponent(specific))
+ );
return true;
}
}
diff --git a/src/main/java/com/alttd/easter/egg/EggType.java b/src/main/java/com/alttd/easter/egg/EggType.java
index 3832b10..ca07f28 100644
--- a/src/main/java/com/alttd/easter/egg/EggType.java
+++ b/src/main/java/com/alttd/easter/egg/EggType.java
@@ -1,27 +1,28 @@
package com.alttd.easter.egg;
import lombok.Getter;
+import net.kyori.adventure.text.format.TextColor;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
public enum EggType {
- BROWN_HUSK(Material.BROWN_GLAZED_TERRACOTTA, EntityType.HUSK, Enchantment.FIRE_PROTECTION, 2, Difficulty.NORMAL),
- RED_SPIDER(Material.RED_GLAZED_TERRACOTTA, EntityType.SPIDER, Enchantment.BANE_OF_ARTHROPODS, 2, Difficulty.NORMAL),
- ORANGE_BLAZE(Material.ORANGE_GLAZED_TERRACOTTA, EntityType.BLAZE, Enchantment.FIRE_ASPECT, 2, Difficulty.NORMAL),
- YELLOW_PIGLIN(Material.YELLOW_GLAZED_TERRACOTTA, EntityType.PIGLIN, Enchantment.FORTUNE, 2, Difficulty.NORMAL),
- LIME_CREEPER(Material.LIME_GLAZED_TERRACOTTA, EntityType.CREEPER, Enchantment.BLAST_PROTECTION, 2, Difficulty.NORMAL),
- GREEN_ZOMBIE(Material.GREEN_GLAZED_TERRACOTTA, EntityType.ZOMBIE, Enchantment.FEATHER_FALLING, 2, Difficulty.NORMAL),
- LIGHT_BLUE_STRAY(Material.LIGHT_BLUE_GLAZED_TERRACOTTA, EntityType.STRAY, Enchantment.FROST_WALKER, 2, Difficulty.NORMAL),
- CYAN_GUARDIAN(Material.CYAN_GLAZED_TERRACOTTA, EntityType.GUARDIAN, Enchantment.THORNS, 2, Difficulty.EASY),
- BLUE_WARDEN(Material.BLUE_GLAZED_TERRACOTTA, EntityType.WARDEN, Enchantment.SWIFT_SNEAK, 2, Difficulty.HARD),
- PURPLE_ENDER_DRAGON(Material.PURPLE_GLAZED_TERRACOTTA, EntityType.ENDER_DRAGON, Enchantment.POWER, 2, Difficulty.HARD),
- MAGENTA_ENDERMAN(Material.MAGENTA_GLAZED_TERRACOTTA, EntityType.ENDERMAN, Enchantment.INFINITY, 2, Difficulty.EASY),
- PINK_HOGLIN(Material.PINK_GLAZED_TERRACOTTA, EntityType.HOGLIN, Enchantment.PIERCING, 2, Difficulty.NORMAL),
- WHITE_SKELETON(Material.WHITE_GLAZED_TERRACOTTA, EntityType.SKELETON, Enchantment.MULTISHOT, 2, Difficulty.NORMAL),
- LIGHT_GRAY_SILVERFISH(Material.LIGHT_GRAY_GLAZED_TERRACOTTA, EntityType.SILVERFISH, Enchantment.EFFICIENCY, 2, Difficulty.NORMAL),
- GRAY_WITHER(Material.GRAY_GLAZED_TERRACOTTA, EntityType.WITHER, Enchantment.SMITE, 2, Difficulty.HARD),
- BLACK_WITHER_SKELETON(Material.BLACK_GLAZED_TERRACOTTA, EntityType.WITHER_SKELETON, Enchantment.LOOTING, 2, Difficulty.NORMAL);
+ BROWN_HUSK(Material.BROWN_GLAZED_TERRACOTTA, EntityType.HUSK, Enchantment.FIRE_PROTECTION, 2, Difficulty.NORMAL, TextColor.color(0x8F4F2A)),
+ RED_SPIDER(Material.RED_GLAZED_TERRACOTTA, EntityType.SPIDER, Enchantment.BANE_OF_ARTHROPODS, 2, Difficulty.NORMAL, TextColor.color(0xB02E26)),
+ ORANGE_BLAZE(Material.ORANGE_GLAZED_TERRACOTTA, EntityType.BLAZE, Enchantment.FIRE_ASPECT, 2, Difficulty.NORMAL, TextColor.color(0xF9801D)),
+ YELLOW_PIGLIN(Material.YELLOW_GLAZED_TERRACOTTA, EntityType.PIGLIN, Enchantment.FORTUNE, 2, Difficulty.NORMAL, TextColor.color(0xFED83D)),
+ LIME_CREEPER(Material.LIME_GLAZED_TERRACOTTA, EntityType.CREEPER, Enchantment.BLAST_PROTECTION, 2, Difficulty.NORMAL, TextColor.color(0x80C71F)),
+ GREEN_ZOMBIE(Material.GREEN_GLAZED_TERRACOTTA, EntityType.ZOMBIE, Enchantment.FEATHER_FALLING, 2, Difficulty.NORMAL, TextColor.color(0x5E7C16)),
+ LIGHT_BLUE_STRAY(Material.LIGHT_BLUE_GLAZED_TERRACOTTA, EntityType.STRAY, Enchantment.FROST_WALKER, 2, Difficulty.NORMAL, TextColor.color(0x3AB3DA)),
+ CYAN_GUARDIAN(Material.CYAN_GLAZED_TERRACOTTA, EntityType.GUARDIAN, Enchantment.THORNS, 2, Difficulty.EASY, TextColor.color(0x169C9C)),
+ BLUE_WARDEN(Material.BLUE_GLAZED_TERRACOTTA, EntityType.WARDEN, Enchantment.SWIFT_SNEAK, 2, Difficulty.HARD, TextColor.color(0x3C44AA)),
+ PURPLE_ENDER_DRAGON(Material.PURPLE_GLAZED_TERRACOTTA, EntityType.ENDER_DRAGON, Enchantment.POWER, 2, Difficulty.HARD, TextColor.color(0x8932B8)),
+ MAGENTA_ENDERMAN(Material.MAGENTA_GLAZED_TERRACOTTA, EntityType.ENDERMAN, Enchantment.INFINITY, 2, Difficulty.EASY, TextColor.color(0xC74EBD)),
+ PINK_HOGLIN(Material.PINK_GLAZED_TERRACOTTA, EntityType.HOGLIN, Enchantment.PIERCING, 2, Difficulty.NORMAL, TextColor.color(0xF38BAA)),
+ WHITE_SKELETON(Material.WHITE_GLAZED_TERRACOTTA, EntityType.SKELETON, Enchantment.MULTISHOT, 2, Difficulty.NORMAL, TextColor.color(0xFFFFFF)),
+ LIGHT_GRAY_SILVERFISH(Material.LIGHT_GRAY_GLAZED_TERRACOTTA, EntityType.SILVERFISH, Enchantment.EFFICIENCY, 2, Difficulty.NORMAL, TextColor.color(0x9D9D97)),
+ GRAY_WITHER(Material.GRAY_GLAZED_TERRACOTTA, EntityType.WITHER, Enchantment.SMITE, 2, Difficulty.HARD, TextColor.color(0x474F52)),
+ BLACK_WITHER_SKELETON(Material.BLACK_GLAZED_TERRACOTTA, EntityType.WITHER_SKELETON, Enchantment.LOOTING, 2, Difficulty.NORMAL, TextColor.color(0x1D1D21));
public enum Difficulty {EASY, NORMAL, HARD}
@@ -34,13 +35,16 @@ public enum EggType {
private final int enchantLevel;
@Getter
private final Difficulty difficulty;
+ @Getter
+ private final TextColor color;
- EggType(Material material, EntityType entityType, Enchantment enchantment, int enchantLevel, Difficulty difficulty) {
+ EggType(Material material, EntityType entityType, Enchantment enchantment, int enchantLevel, Difficulty difficulty, TextColor color) {
this.material = material;
this.entityType = entityType;
this.enchantment = enchantment;
this.enchantLevel = enchantLevel;
this.difficulty = difficulty;
+ this.color = color;
}
public static EggType fromEntityType(EntityType entityType) {
diff --git a/src/main/java/com/alttd/easter/glow/GlowManager.java b/src/main/java/com/alttd/easter/glow/GlowManager.java
deleted file mode 100644
index 0b8f470..0000000
--- a/src/main/java/com/alttd/easter/glow/GlowManager.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.alttd.easter.glow;
-
-import com.alttd.easter.egg.EggType;
-import net.kyori.adventure.text.format.NamedTextColor;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Entity;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.scoreboard.Scoreboard;
-import org.bukkit.scoreboard.Team;
-
-public class GlowManager {
-
- private final Scoreboard scoreboard;
-
- public GlowManager(Plugin plugin) {
- this.scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
- }
-
- public void applyGlow(Entity entity, EggType type) {
- String teamName = ("easter_" + type.name()).toLowerCase();
- Team team = scoreboard.getTeam(teamName);
- if (team == null) {
- team = scoreboard.registerNewTeam(teamName);
- team.setCanSeeFriendlyInvisibles(false);
- team.setAllowFriendlyFire(true);
- team.color(colorFor(type));
- }
- String entry = entity.getUniqueId().toString();
- if (!team.hasEntry(entry)) {
- team.addEntry(entry);
- }
- }
-
- private NamedTextColor colorFor(EggType type) {
- return switch (type) {
- case BROWN_HUSK -> NamedTextColor.DARK_RED; // closest
- case RED_SPIDER -> NamedTextColor.RED;
- case ORANGE_BLAZE -> NamedTextColor.GOLD;
- case YELLOW_PIGLIN -> NamedTextColor.YELLOW;
- case LIME_CREEPER -> NamedTextColor.GREEN;
- case GREEN_ZOMBIE -> NamedTextColor.DARK_GREEN;
- case LIGHT_BLUE_STRAY -> NamedTextColor.AQUA;
- case CYAN_GUARDIAN -> NamedTextColor.DARK_AQUA;
- case BLUE_WARDEN -> NamedTextColor.BLUE;
- case PURPLE_ENDER_DRAGON -> NamedTextColor.DARK_PURPLE;
- case MAGENTA_ENDERMAN -> NamedTextColor.LIGHT_PURPLE;
- case PINK_HOGLIN -> NamedTextColor.LIGHT_PURPLE;
- case WHITE_SKELETON -> NamedTextColor.WHITE;
- case LIGHT_GRAY_SILVERFISH -> NamedTextColor.GRAY;
- case GRAY_WITHER -> NamedTextColor.DARK_GRAY;
- case BLACK_WITHER_SKELETON -> NamedTextColor.BLACK;
- default -> NamedTextColor.WHITE;
- };
- }
-}
diff --git a/src/main/java/com/alttd/easter/gui/TurnInGuiManager.java b/src/main/java/com/alttd/easter/gui/TurnInGuiManager.java
index 8a25885..259c7a1 100644
--- a/src/main/java/com/alttd/easter/gui/TurnInGuiManager.java
+++ b/src/main/java/com/alttd/easter/gui/TurnInGuiManager.java
@@ -108,7 +108,7 @@ public class TurnInGuiManager implements Listener {
// Dialog formatting for submission summary
List eggComponents = new ArrayList<>();
for (EggType type : submitted) {
- eggComponents.add(Component.text(ItemUtils.colorName(type)));
+ eggComponents.add(ItemUtils.colorNameComponent(type));
}
if (eggComponents.size() == 1) {
player.sendRichMessage(Messages.RABBIT.ONE_EGG,
diff --git a/src/main/java/com/alttd/easter/npc/RabbitNpcManager.java b/src/main/java/com/alttd/easter/npc/RabbitNpcManager.java
index ab2241e..083770c 100644
--- a/src/main/java/com/alttd/easter/npc/RabbitNpcManager.java
+++ b/src/main/java/com/alttd/easter/npc/RabbitNpcManager.java
@@ -101,11 +101,14 @@ public class RabbitNpcManager implements Listener {
List sorted = eggs.stream()
.sorted(Comparator.comparingInt(Enum::ordinal))
.toList();
- String names = sorted.stream()
- .map(e -> ItemUtils.prettify(e.name()))
- .collect(Collectors.joining(", "));
+ var components = sorted.stream()
+ .map(ItemUtils::colorNameComponent)
+ .toList();
+ var joined = net.kyori.adventure.text.Component.join(net.kyori.adventure.text.JoinConfiguration.builder()
+ .separator(net.kyori.adventure.text.Component.text(", "))
+ .build(), components);
player.sendRichMessage(Messages.RABBIT.TURNED_IN_LIST,
- Placeholder.parsed("eggs", names));
+ Placeholder.component("eggs", joined));
}
private void openTurnIn(Player player) {
diff --git a/src/main/java/com/alttd/easter/util/ItemUtils.java b/src/main/java/com/alttd/easter/util/ItemUtils.java
index 34b2390..959327a 100644
--- a/src/main/java/com/alttd/easter/util/ItemUtils.java
+++ b/src/main/java/com/alttd/easter/util/ItemUtils.java
@@ -3,6 +3,9 @@ package com.alttd.easter.util;
import com.alttd.easter.egg.EggType;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
+import net.kyori.adventure.text.format.TextColor;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@@ -13,7 +16,7 @@ import java.util.List;
public final class ItemUtils {
- public static String colorName(EggType type) {
+ private static String colorName(EggType type) {
return switch (type) {
case BROWN_HUSK -> "Brown";
case RED_SPIDER -> "Red";
@@ -34,12 +37,23 @@ public final class ItemUtils {
};
}
+ public static Component colorNameComponent(EggType type) {
+ return Component.text(colorName(type), type.getColor());
+ }
+
+ public static Component typeNameComponent(EggType type) {
+ return Component.text(prettify(type.name()), type.getColor());
+ }
+
public static ItemStack createEggItem(EggType type) {
ItemStack item = new ItemStack(type.getMaterial());
ItemMeta meta = item.getItemMeta();
meta.addEnchant(type.getEnchantment(), type.getEnchantLevel(), true);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
- meta.displayName(Component.text("Easter Egg - " + prettify(type.name()), NamedTextColor.GOLD));
+ Component name = MiniMessage.miniMessage().deserialize("Easter Egg - ",
+ Placeholder.component("type", typeNameComponent(type))
+ );
+ meta.displayName(name);
meta.getPersistentDataContainer().set(Keys.EGG_ITEM, PersistentDataType.STRING, type.name());
item.setItemMeta(meta);
return item;