From f758ae03077d01009d00c72c3b6a2b6765b31867 Mon Sep 17 00:00:00 2001 From: TubYoub Date: Tue, 2 Apr 2024 01:38:36 +0200 Subject: [PATCH] Version 1.3.2 [bugfix] / [changes] - Changed the Package from StatusManager.java to Managers.StatusManager. - Every Status gets reloaded every 30 Seconds - Player statuses will be saved untranslated to accemendate the the Placeholders [addition] - Placeholder v2.11.5 is now supported PS: Report any Problems PPS: Thanks Rob for the Feature request --- README.md | 4 +- pom.xml | 37 ++++++++++--- .../statusplugin/Listener/ChatListener.java | 2 +- .../Listener/PlayerJoinListener.java | 2 +- .../{ => Managers}/StatusManager.java | 46 +++++++++------- .../de/tubyoub/statusplugin/StatusPlugin.java | 33 +++++++++++- .../statusplugin/commands/StatusCommand.java | 53 ++++++++++--------- .../statusplugin/commands/VersionChecker.java | 3 +- src/main/resources/plugin.yml | 4 ++ 9 files changed, 127 insertions(+), 57 deletions(-) rename src/main/java/de/tubyoub/statusplugin/{ => Managers}/StatusManager.java (73%) diff --git a/README.md b/README.md index d0657f0..3c915f9 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,8 @@ This is a Minecraft plugin for Spigot/Paper servers that allows players to set t - Reset the maximum length of statuses to default (`15`) with `/status resetmaxlength` (requires StatusPlugin.admin.resetMaxlength permission) (Color codes in statuses are not counted towards the character limit) - The status of every player is saved to a file, so they will keep their status when they rejoin the server. +- The Plugin supports `PlaceholderAPI v2.11.5` + - The Plugin reloads statuses every 600 Game Ticks (30seconds) so the Placeholders can update themselves. ## Permissions @@ -57,6 +59,6 @@ I currently have no plans to get co-contributer's on this project, but if you ha ## License -This project is licensed under the [Unlicense](LICENSE). +This project is licensed under the [MIT License](LICENSE). [![forthebadge](https://forthebadge.com/images/badges/powered-by-black-magic.svg)](https://forthebadge.com) diff --git a/pom.xml b/pom.xml index f229360..3e3fce4 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.tubyoub StatusPlugin - 1.3.1 + 1.3.2 jar Tub's Status Plugin @@ -30,24 +30,37 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 + + + + *:* + + META-INF/*.MF + + + + true + D:\papermc\plugins\TubsStatusPlugin-v${project.version}.jar + target\TubsStatusPlugin-v${project.version}.jar + package shade - - false - D:\papermc\plugins\TubsStatusPlugin-v${project.version}.jar - - src/main/resources + ${project.basedir}/src/main/resources + true + + + ${project.basedir}/src/main/java true @@ -62,6 +75,10 @@ sonatype https://oss.sonatype.org/content/groups/public/ + + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ + @@ -76,5 +93,11 @@ jackson-databind 2.16.0 + + me.clip + placeholderapi + 2.11.5 + provided + diff --git a/src/main/java/de/tubyoub/statusplugin/Listener/ChatListener.java b/src/main/java/de/tubyoub/statusplugin/Listener/ChatListener.java index 842a638..a4aba77 100644 --- a/src/main/java/de/tubyoub/statusplugin/Listener/ChatListener.java +++ b/src/main/java/de/tubyoub/statusplugin/Listener/ChatListener.java @@ -1,6 +1,6 @@ package de.tubyoub.statusplugin.Listener; -import de.tubyoub.statusplugin.StatusManager; +import de.tubyoub.statusplugin.Managers.StatusManager; import de.tubyoub.utils.ColourUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; diff --git a/src/main/java/de/tubyoub/statusplugin/Listener/PlayerJoinListener.java b/src/main/java/de/tubyoub/statusplugin/Listener/PlayerJoinListener.java index 1f63275..6da55c6 100644 --- a/src/main/java/de/tubyoub/statusplugin/Listener/PlayerJoinListener.java +++ b/src/main/java/de/tubyoub/statusplugin/Listener/PlayerJoinListener.java @@ -1,6 +1,6 @@ package de.tubyoub.statusplugin.Listener; -import de.tubyoub.statusplugin.StatusManager; +import de.tubyoub.statusplugin.Managers.StatusManager; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/de/tubyoub/statusplugin/StatusManager.java b/src/main/java/de/tubyoub/statusplugin/Managers/StatusManager.java similarity index 73% rename from src/main/java/de/tubyoub/statusplugin/StatusManager.java rename to src/main/java/de/tubyoub/statusplugin/Managers/StatusManager.java index b24cf2c..fc7d875 100644 --- a/src/main/java/de/tubyoub/statusplugin/StatusManager.java +++ b/src/main/java/de/tubyoub/statusplugin/Managers/StatusManager.java @@ -1,5 +1,8 @@ -package de.tubyoub.statusplugin; +package de.tubyoub.statusplugin.Managers; +import de.tubyoub.statusplugin.StatusPlugin; +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.YamlConfiguration; @@ -25,9 +28,11 @@ public class StatusManager { private int maxStatusLength = DEFAULT_MAX_LENGTH; private final StatusPlugin plugin; private ColourUtils chatColour; + private final boolean placeholderAPIPresent; public StatusManager(StatusPlugin plugin) { this.plugin = plugin; + this.placeholderAPIPresent = Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null; this.maxStatusLength = plugin.getConfig().getInt("maxStatusLength", DEFAULT_MAX_LENGTH); this.statusFile = new File(plugin.getDataFolder(), "statuses.yml"); loadStatuses(); @@ -39,30 +44,35 @@ public boolean setStatus(Player player, String status, CommandSender sender) { sender.sendMessage(ChatColor.RED + "Status is too long. Max length is " + maxStatusLength + " characters."); return false; } - statusMap.put(player.getUniqueId(), translatedStatus); + + // Store the original status, not the translated one + statusMap.put(player.getUniqueId(), status); updateDisplayName(player); saveStatuses(); return true; } - public String getStatus(Player player) { return statusMap.get(player.getUniqueId()); } public void updateDisplayName(Player player) { - String status = getStatus(player); - if (status != null) { - String displayName = "[" + status + ChatColor.RESET + "] " + ChatColor.WHITE + player.getName(); - displayName = ColourUtils.format(displayName); // Assign the result back to displayName - getConsoleSender().sendMessage(displayName); - player.setDisplayName(displayName); - player.setPlayerListName(displayName); - } else { - player.setDisplayName(player.getName()); - player.setPlayerListName(player.getName()); + String status = getStatus(player); + if (status != null) { + // Translate the status here + String translatedStatus = translateColorsAndFormatting(status, player); + if (placeholderAPIPresent && player.hasPermission("StatusPlugin.placeholders")) { + translatedStatus = PlaceholderAPI.setPlaceholders(player, translatedStatus); + } + String displayName = "[" + translatedStatus + ChatColor.RESET + "] " + ChatColor.WHITE + player.getName(); + displayName = ColourUtils.format(displayName); // Assign the result back to displayName + player.setDisplayName(displayName); + player.setPlayerListName(displayName); + } else { + player.setDisplayName(player.getName()); + player.setPlayerListName(player.getName()); + } } -} public int getMaxStatusLength() { return maxStatusLength; } @@ -132,11 +142,11 @@ public void removeStatus(Player player) { player.setPlayerListName(player.getName()); saveStatuses(); } - public int calculateEffectiveLength(String text) { - Pattern pattern = Pattern.compile("&[0-9a-fk-or]"); + public int calculateEffectiveLength(String text) { + Pattern pattern = Pattern.compile("&[0-9a-fk-or]|%[^%]+%"); Matcher matcher = pattern.matcher(text); - String withoutColorCodes = matcher.replaceAll(""); - return withoutColorCodes.length(); + String withoutColorCodesAndPlaceholders = matcher.replaceAll(""); + return withoutColorCodesAndPlaceholders.length(); } public void reloadStatuses() { statusMap.clear(); diff --git a/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java b/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java index 56e0f06..43ecdcb 100644 --- a/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java +++ b/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java @@ -2,32 +2,61 @@ import de.tubyoub.statusplugin.Listener.ChatListener; import de.tubyoub.statusplugin.Listener.PlayerJoinListener; +import de.tubyoub.statusplugin.Managers.StatusManager; import de.tubyoub.statusplugin.commands.StatusCommand; import de.tubyoub.statusplugin.commands.VersionChecker; import de.tubyoub.statusplugin.metrics.Metrics; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Color; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; public class StatusPlugin extends JavaPlugin { + private final String version = "1.3.2"; private StatusManager statusManager; private VersionChecker versionChecker; + //private boolean placeholderAPIPresent; private int pluginId = 20463; @Override public void onEnable() { + getLogger().info( "______________________________"); + getLogger().info("\\__ ___/ _____/\\______ \\"); + getLogger().info( " | | \\_____ \\ | ___/"); + getLogger().info( " | | / \\ | |"); + getLogger().info( " |____| /_______ / |____|" + " TubsStatusPlugin v"+ version); + getLogger().info( " \\/ "+ " Running on " + Bukkit.getServer().getName() + " using Blackmagic"); this.statusManager = new StatusManager(this); this.saveDefaultConfig(); this.versionChecker = new VersionChecker(); getServer().getPluginManager().registerEvents(new PlayerJoinListener(this.statusManager), this); getServer().getPluginManager().registerEvents(new ChatListener(this.statusManager), this); - StatusCommand statusCommand = new StatusCommand(statusManager,versionChecker); - getCommand("status").setExecutor(new StatusCommand(this.statusManager,versionChecker)); + StatusCommand statusCommand = new StatusCommand(statusManager,versionChecker,version); + //getCommand("status").setExecutor(new StatusCommand(this.statusManager,versionChecker)); getCommand("status").setExecutor(statusCommand); getCommand("status").setTabCompleter(new StatusTabCompleter()); Metrics metrics = new Metrics(this, pluginId); + + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + // new StatusPlaceholderExpansion(this).register(); + //this.placeholderAPIPresent = Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null; + getLogger().info("Tub's StatusPlugin will now use PlaceholderAPI"); + } else { + getLogger().warning("Could not find PlaceholderAPI! Tub's StatusPlugin will run without it.."); + } + + + Bukkit.getScheduler().runTaskTimer(this, () -> { + for (Player player : Bukkit.getOnlinePlayers()) { + statusManager.updateDisplayName(player); + } + }, 0L, 600L); // 600 ticks = 30 seconds + getLogger().info("Tub's StatusPlugin successfully loaded"); } + public void sendPluginMessages(CommandSender sender, String type) { if ("title".equals(type)) { sender.sendMessage(ChatColor.GOLD + "◢◤" + ChatColor.YELLOW + "Tu" + ChatColor.DARK_GREEN + "b's" + ChatColor.DARK_AQUA + " Status" + ChatColor.GOLD + " Plugin" + ChatColor.YELLOW + "◥◣"); diff --git a/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java b/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java index 120e0fa..ddcdea1 100644 --- a/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java +++ b/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java @@ -1,6 +1,6 @@ package de.tubyoub.statusplugin.commands; -import de.tubyoub.statusplugin.StatusManager; +import de.tubyoub.statusplugin.Managers.StatusManager; import de.tubyoub.statusplugin.StatusPlugin; import de.tubyoub.utils.ColourUtils; import net.md_5.bungee.api.chat.ClickEvent; @@ -17,39 +17,40 @@ -public class StatusCommand implements CommandExecutor { - String version = "1.3.1"; - private final StatusManager statusManager; + public class StatusCommand implements CommandExecutor { + String version; + private final StatusManager statusManager; - private final VersionChecker versionChecker; - private StatusPlugin plugin; + private final VersionChecker versionChecker; + private StatusPlugin plugin; - public StatusCommand(StatusManager statusManager, VersionChecker versionChecker) { - this.statusManager = statusManager; - this.versionChecker = versionChecker; - } + public StatusCommand(StatusManager statusManager, VersionChecker versionChecker, String version) { + this.statusManager = statusManager; + this.versionChecker = versionChecker; + this.version = version; + } @Override -public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - this.plugin = (StatusPlugin) Bukkit.getPluginManager().getPlugin("TubsStatusPlugin"); - - if (!(sender instanceof Player)) { - // Handle console commands here - if (args.length > 0 && "reload".equals(args[0])) { - statusManager.reloadStatuses(); - sender.sendMessage("Statuses have been reloaded."); + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + this.plugin = (StatusPlugin) Bukkit.getPluginManager().getPlugin("TubsStatusPlugin"); + + if (!(sender instanceof Player)) { + // Handle console commands here + if (args.length > 0 && "reload".equals(args[0])) { + statusManager.reloadStatuses(); + sender.sendMessage("Statuses have been reloaded."); + return true; + } + sender.sendMessage("This command can only be run by a player."); return true; } - sender.sendMessage("This command can only be run by a player."); - return true; - } - Player player = (Player) sender; + Player player = (Player) sender; - if (args.length == 0) { - player.sendMessage("Try using /status help"); - return true; - } + if (args.length == 0) { + player.sendMessage("Try using /status help"); + return true; + } switch (args[0].toLowerCase()) { case "reload": diff --git a/src/main/java/de/tubyoub/statusplugin/commands/VersionChecker.java b/src/main/java/de/tubyoub/statusplugin/commands/VersionChecker.java index 5494844..23da43d 100644 --- a/src/main/java/de/tubyoub/statusplugin/commands/VersionChecker.java +++ b/src/main/java/de/tubyoub/statusplugin/commands/VersionChecker.java @@ -15,10 +15,11 @@ import com.fasterxml.jackson.core.type.TypeReference; public class VersionChecker { + private static final String project = "km0yAITg"; public static boolean isNewVersionAvailable(String version) { try { - URL url = new URL("https://api.modrinth.com/v2/project/km0yAITg/version"); + URL url = new URL("https://api.modrinth.com/v2/project/" + project + "/version"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 053b8ef..d90a93a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,6 +3,7 @@ version: '${project.version}' main: de.tubyoub.statusplugin.StatusPlugin api-version: 1.13 author: TubYoub +softdepend: [PlaceholderAPI] commands: status: description: Set a player's status, get info, get help, reload the plugin, set/reset max length @@ -39,4 +40,7 @@ permissions: default: op StatusPlugin.formatting.italic: description: Allows to use italic formatting in statuses + default: op + StatusPlugin.placeholders: + description: Allows players to use Placeholders from PlaceholderAPI default: op \ No newline at end of file