package gq.unurled.raxen.utils; import gq.unurled.raxen.Raxen; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.file.*; public class Utils { /** * convert a string with mini-message formatting to a colored Component * @param stringToComponent a string * @return a component */ public static @NotNull Component colorComp(String stringToComponent) { MiniMessage minimessage = MiniMessage.builder() .tags(TagResolver.builder() .resolver(StandardTags.color()) .resolver(StandardTags.decorations()) .resolver(StandardTags.reset()) .build() ) .build(); return minimessage.deserialize(stringToComponent); } /** * convert a string with mini-message formatting to a colored TextComponent * @param stringToComponent a string * @return a component */ public static @NotNull TextComponent colorTextComp(String stringToComponent) { MiniMessage minimessage = MiniMessage.builder() .tags(TagResolver.builder() .resolver(StandardTags.color()) .resolver(StandardTags.decorations()) .resolver(StandardTags.reset()) .build() ) .build(); return (TextComponent) minimessage.deserialize(stringToComponent); } /** * change the mini-message colorized format to the legacy format, with § * @param string a string * @return a colored string */ public static @NotNull String colorString(String string) { MiniMessage minimessage = MiniMessage.builder() .tags(TagResolver.builder() .resolver(StandardTags.color()) .resolver(StandardTags.decorations()) .resolver(StandardTags.reset()) .build() ) .build(); return LegacyComponentSerializer.legacyAmpersand().serialize(minimessage.deserialize(string)); } /** * change the mini-message colorized format to the legacy format, with § * @param string a string * @return a String */ public static String coloredString(String string) { MiniMessage minimessage = MiniMessage.builder() .tags(TagResolver.builder() .resolver(StandardTags.color()) .resolver(StandardTags.decorations()) .resolver(StandardTags.reset()) .build() ) .build(); return ChatColor.translateAlternateColorCodes('&', LegacyComponentSerializer.legacyAmpersand() .serialize(minimessage.deserialize(string))); } /** * transform a text-component to a string * @param comp a string * @return a String */ public static String textCompToString(TextComponent comp) { MiniMessage minimessage = MiniMessage.builder() .tags(TagResolver.builder() .resolver(StandardTags.color()) .resolver(StandardTags.decorations()) .resolver(StandardTags.reset()) .build() ) .build(); return ChatColor.translateAlternateColorCodes('&', LegacyComponentSerializer.legacyAmpersand() .serialize(comp)); } /** * Strips all color from a string. * @param string the string that want's to be decolored. * @return a decolored string */ public static String decolor(String string) { return MiniMessage.miniMessage().stripTags(string); } /** * debug output to console if debug is set to true in config * @param main Raxen instance * @param strings output to console */ public static void debug(Raxen main, String... strings) { FileConfiguration config = main.getConfig(); if(config.getBoolean("debug")) { for(String string : strings) { main.getLogger().info(string); } } } /** * debug output to console if debug is set to true in config * @param strings output to console */ public static void debug(String... strings) { Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); assert main != null; FileConfiguration config = main.getConfig(); if(config.getBoolean("debug")) { for(String string : strings) { main.getLogger().info(string); } } } /** * debug output to console if debug is set to true in config * @param config main file config * @param strings ouput to console */ public static void debug(FileConfiguration config, String... strings) { Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); assert main != null; if(config.getBoolean("debug")) { for(String string : strings) { main.getLogger().info(string); } } } /** * Log the strings to the console * @param main a main instance running * @param strings string that want to be outputted. */ public static void log(Raxen main, String... strings) { for(String string : strings) { main.getLogger().info(string); } } /** * Log the strings to the console * @param strings string that want to be outputted. */ public static void log(String... strings) { Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); assert main != null; for(String string : strings) { main.getLogger().info(string); } } /** * Log the TextComponent to the console * @param comp TextComponent that want to be outputted. */ public static void log(TextComponent... comp) { Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); assert main != null; for(TextComponent string : comp) { main.getServer().sendMessage(string); } } /** * Warns strings to the console using the logger * @param strings to warn message */ public static void warn(String... strings) { Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); assert main != null; for(String string : strings) { main.getLogger().warning(string); } } /** * Warns strings to the console using the logger * @param strings to warn message * @param main a running instance */ public static void warn(Raxen main, String... strings) { for(String string : strings) { main.getLogger().warning(string); } } /** * Error strings to the console using the logger * @param strings to error message */ public static void error(String... strings) { Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); assert main != null; for(String string : strings) { main.getLogger().severe(string); } } /** * Error strings to the console using the logger * @param strings to error message * @param main a main instance running */ public static void error(Raxen main, String... strings) { for(String string : strings) { main.getLogger().severe(string); } } /** * message strings to player. * @param player an online player * @param strings strings that will be sent. */ public static void msgPlayer(Player player, String... strings) { for(String string : strings) { player.sendMessage(colorComp(string)); } } /** * message textComponent to player. * @param player an online player * @param comp textComponent that will be sent. */ public static void msgPlayer(Player player, TextComponent comp) { player.sendMessage(colorComp(PlainTextComponentSerializer.plainText().serialize(comp))); } /** * message the command sender with textComponent. * @param player the command sender * @param textComponent message */ public static void msgSender(CommandSender player, TextComponent textComponent) { player.sendMessage(colorComp(PlainTextComponentSerializer.plainText().serialize(textComponent))); } /** * message the command sender with strings. * @param player the command sender * @param strings message */ public static void msgSender(CommandSender player, String... strings) { for(String string : strings) { player.sendMessage(colorComp(string)); } } /** * fill an inventory with grey glass pane. * @param inv an inventory * @return the inventory filled */ public static Inventory fillGreyPane(Inventory inv) { int in = -1; for (ItemStack it : inv) { in++; if (it == null || it.getType() == Material.AIR) { inv.setItem(in, Items.greyPane()); } } return inv; } /** * output message when player have no perms * @return a component */ public static Component noPerms() { return colorComp("You don't have the permission to use this feature."); } /** * error message output to player * @return a component */ public static Component error() { return colorComp("An Error has occurred. Please retry or contact an Admin."); } public static void errorConsoleSender(CommandSender sender) { sender.sendMessage(colorComp("Can't use this command as the console.")); } /** * Copy folder from sourceDirectoryLocation to destinationDirectoryLocation * @param sourceDirectoryLocation the source directory * @param destinationDirectoryLocation the copy location * @throws IOException exception with coping data */ public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation) throws IOException { Files.walk(Paths.get(sourceDirectoryLocation)) .forEach(source -> { Path destination = Paths.get(destinationDirectoryLocation, source.toString() .substring(sourceDirectoryLocation.length())); try { Files.copy(source, destination); } catch (IOException e) { e.printStackTrace(); } }); } /** * remove path directory * @param path removed folder * @throws IOException error with handling data */ public static void removeDirectory(Path path) throws IOException { if (Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) { try (DirectoryStream entries = Files.newDirectoryStream(path)) { for (Path entry : entries) { removeDirectory(entry); } } } Files.delete(path); } public static boolean isInt(String strNum) { if (strNum == null) { return false; } try { double d = Integer.parseInt(strNum); } catch (NumberFormatException nfe) { return false; } return true; } }