diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java b/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java index 194d11904..da2f7320c 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java @@ -30,7 +30,6 @@ import java.util.ArrayList; import java.util.UUID; -import net.md_5.bungee.api.ChatMessageType; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.GameMode; diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditorManager.java b/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditorManager.java index 69d39a92f..25c965abb 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditorManager.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditorManager.java @@ -54,6 +54,8 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataType; import org.bukkit.util.Vector; +import static net.kyori.adventure.text.Component.text; +import static net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacy; import static net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer.plainText; //Manages PlayerEditors and Player Events related to editing armorstands @@ -115,35 +117,35 @@ void onArmorStandInteract(PlayerInteractAtEntityEvent event) { //Attempt rename if (player.getInventory().getItemInMainHand().getType() == Material.NAME_TAG && player.hasPermission("asedit.rename")) { ItemStack nameTag = player.getInventory().getItemInMainHand(); - final String name; + Component displayName; if (nameTag.getItemMeta() != null && nameTag.getItemMeta().hasDisplayName()) { + String name = plainText().serialize(nameTag.getItemMeta().displayName()); + if (name != null && player.hasPermission("asedit.rename.color")) { + displayName = legacy('&').deserialize(name); + } else { + displayName = Component.text(name); + } name = nameTag.getItemMeta().getDisplayName().replace('&', ChatColor.COLOR_CHAR); } else { - name = null; + displayName = null; } - if (name == null) { - as.setCustomName(null); + if (displayName == null) { + as.customName(null); as.setCustomNameVisible(false); event.setCancelled(true); - } else if (!name.equals("")) { // nametag is not blank + } else { event.setCancelled(true); - if ((player.getGameMode() != GameMode.CREATIVE)) { - if (nameTag.getAmount() > 1) { - nameTag.setAmount(nameTag.getAmount() - 1); - } else { - nameTag = new ItemStack(Material.AIR); - } - player.getInventory().setItemInMainHand(nameTag); + nameTag.subtract(1); } - //minecraft will set the name after this event even if the event is cancelled. //change it 1 tick later to apply formatting without it being overwritten - Bukkit.getScheduler().runTaskLater(plugin, () -> { - as.setCustomName(name); - as.setCustomNameVisible(true); - }, 1); + final Component finalDisplayName = displayName; + Bukkit.getScheduler().runTask(plugin, () -> { + as.customName(finalDisplayName); + as.setCustomNameVisible(true); + }); } } } diff --git a/src/main/java/io/github/rypofalem/armorstandeditor/menu/Menu.java b/src/main/java/io/github/rypofalem/armorstandeditor/menu/Menu.java index b64c2519a..eefa938a4 100644 --- a/src/main/java/io/github/rypofalem/armorstandeditor/menu/Menu.java +++ b/src/main/java/io/github/rypofalem/armorstandeditor/menu/Menu.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextColor; +import static net.kyori.adventure.text.format.TextColor.color; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -213,7 +214,7 @@ private ItemStack createIcon(ItemStack icon, String path, String command) { private ItemStack createIcon(ItemStack icon, String path, String command, String option) { ItemMeta meta = icon.getItemMeta(); meta.getPersistentDataContainer().set(ArmorStandEditorPlugin.instance().getIconKey(), PersistentDataType.STRING, "ase " + command); - meta.displayName(text(getIconName(path, option))); + meta.displayName(text(getIconName(path, option)).color(TextColor.color(0xFFFFFF))); ArrayList < Component > loreList = new ArrayList < > (); loreList.add(text(getIconDescription(path, option))); meta.lore(loreList);