Hi, i've made an plugin where players can customize their player name color with mini message. but somehow the shadow of the name is like transparent, and i want it to be solid just like the star icon shadow.
Heres the code for the name :
Heres the code for the name :
Java:
package com.ironcustomize;
import me.clip.placeholderapi.PlaceholderAPI;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Display;
import org.bukkit.entity.Player;
import org.bukkit.entity.TextDisplay;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.util.Transformation;
import org.joml.AxisAngle4f;
import org.joml.Vector3f;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class NameTagManager implements Listener {
private final IronCustomize plugin;
private final Map<UUID, TextDisplay> displays = new HashMap<>();
public NameTagManager(IronCustomize plugin) {
this.plugin = plugin;
}
public void updateNameTag(Player player) {
removeNameTag(player);
String rawNameColor = player.getPersistentDataContainer().getOrDefault(plugin.KEY_NAME_COLOR, PersistentDataType.STRING, "<color:white><shadow:dark_gray>" + player.getName()); String rawBadge = player.getPersistentDataContainer().getOrDefault(plugin.KEY_BADGE, PersistentDataType.STRING, "");
String rawBadgeColor = player.getPersistentDataContainer().getOrDefault(plugin.KEY_BADGE_COLOR, PersistentDataType.STRING, "DEFAULT");
if (rawBadgeColor.equals("DEFAULT")) rawBadgeColor = plugin.getDefaultBadgeColor(rawBadge);
String badgePart = rawBadge.isEmpty() ? "" : rawBadgeColor + rawBadge + " ";
String finalFormat = badgePart + rawNameColor;
Component finalText = MiniMessage.miniMessage().deserialize(finalFormat);
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
String confPrefix = plugin.getConfigManager().getConfig().getString("settings.nametag-prefix", "");
String confSuffix = plugin.getConfigManager().getConfig().getString("settings.nametag-suffix", "");
String prefix = PlaceholderAPI.setPlaceholders(player, confPrefix);
String suffix = PlaceholderAPI.setPlaceholders(player, confSuffix);
Component prefixComp = LegacyComponentSerializer.legacySection().deserialize(prefix.replace("&", "§"));
Component suffixComp = LegacyComponentSerializer.legacySection().deserialize(suffix.replace("&", "§"));
finalText = prefixComp.append(finalText).append(suffixComp);
}
Location spawnLoc = player.getLocation().add(0, 2.5, 0);
Component finalRenderText = finalText;
TextDisplay display = player.getWorld().spawn(spawnLoc, TextDisplay.class, entity -> {
entity.text(finalRenderText);
entity.setBillboard(Display.Billboard.CENTER);
entity.setDefaultBackground(true);
entity.setSeeThrough(false);
entity.setBrightness(new Display.Brightness(15, 15));
entity.setShadowed(false);
entity.setTransformation(new Transformation(
new Vector3f(0f, 0.3f, 0f),
new AxisAngle4f(),
new Vector3f(1f, 1f, 1f),
new AxisAngle4f()
));
entity.setPersistent(false);
});
player.addPassenger(display);
player.hideEntity(plugin, display);
displays.put(player.getUniqueId(), display);
}
public void removeNameTag(Player player) {
TextDisplay display = displays.remove(player.getUniqueId());
if (display != null && display.isValid()) display.remove();
player.getPassengers().forEach(entity -> {
if (entity instanceof TextDisplay) entity.remove();
});
}
@EventHandler
public void onJoin(PlayerJoinEvent e) {
updateNameTag(e.getPlayer());
}
@EventHandler
public void onQuit(PlayerQuitEvent e) {
removeNameTag(e.getPlayer());
}
@EventHandler
public void onDeath(org.bukkit.event.entity.PlayerDeathEvent e) {
removeNameTag(e.getEntity());
}
@EventHandler
public void onRespawn(org.bukkit.event.player.PlayerRespawnEvent e) {
Bukkit.getScheduler().runTaskLater(plugin, () -> {
updateNameTag(e.getPlayer());
}, 5L);
}
}
