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