From 64b77ba4706c5014f66ae954c32a657b5d0701b8 Mon Sep 17 00:00:00 2001 From: TubYoub Date: Wed, 17 Apr 2024 19:39:48 +0200 Subject: [PATCH 1/2] Version 1.3.4 [bugfix] / [changes] - The Plugin only checks for a new Version on start so the `/status info` command can instantly send and don't request every time when used if a new Version is available - if a Player doesn't have a Status `StatusManager.getStatus()` will give an empty `String` back. - changed `config` version to `2` [addition] PlaceholderAPI: - added a placeholder `%tubsstatusplugin_status%` Config: - Tablist formatter can now be disabled PS: Report any Problems Took 2 hours 47 minutes --- README.md | 16 +++++++++++-- pom.xml | 2 +- .../Listener/PlayerJoinListener.java | 12 ++++++---- .../statusplugin/Managers/ConfigManager.java | 15 ++++++++++-- .../statusplugin/Managers/StatusManager.java | 9 ++++++-- .../StatusPlaceholderExpansion.java | 6 ++++- .../de/tubyoub/statusplugin/StatusPlugin.java | 23 +++++++++++-------- .../statusplugin/commands/StatusCommand.java | 11 +++++---- .../commands => utils}/VersionChecker.java | 8 +++---- src/main/resources/config.yml | 7 ++++-- 10 files changed, 76 insertions(+), 33 deletions(-) rename src/main/java/de/tubyoub/{statusplugin/commands => utils}/VersionChecker.java (97%) diff --git a/README.md b/README.md index 3241834..dbfb1d7 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,18 @@ ![Static Badge](https://img.shields.io/badge/MC-1.18-green) ![Static Badge](https://img.shields.io/badge/MC-1.19-green) ![Static Badge](https://img.shields.io/badge/MC-1.20-green) +![Modrinth Downloads](https://img.shields.io/modrinth/dt/km0yAITg?logo=Modrinth&style=flat-square) -[![forthebadge](https://forthebadge.com/images/badges/works-on-my-machine.svg)](https://forthebadge.com) + +![forthebadge](https://forthebadge.com/images/badges/works-on-my-machine.svg) + +

+ + + +
+ Please join the Discord if you have questions! +

This is a Minecraft plugin for Spigot/Paper servers that allows players to set their own status, which is displayed in the tab list and above their heads in-game. @@ -28,7 +38,9 @@ This is a Minecraft plugin for Spigot/Paper servers that allows players to set t - 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. - - The Plugin now got a Placeholder`%tubsstatusplugin_status_playername%` (playname should be changed out for the real Playername, Duuuh.) + - The Plugin got Placeholders: + - `%tubsstatusplugin_status_playername%` (playname should be changed out for the real Playername, Duuuh.) + - `%tubsstatusplugin_status%` ## Permissions diff --git a/pom.xml b/pom.xml index b88af84..7f99871 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.tubyoub StatusPlugin - 1.3.3 + 1.3.4 jar Tub's Status Plugin diff --git a/src/main/java/de/tubyoub/statusplugin/Listener/PlayerJoinListener.java b/src/main/java/de/tubyoub/statusplugin/Listener/PlayerJoinListener.java index 060f964..5f26889 100644 --- a/src/main/java/de/tubyoub/statusplugin/Listener/PlayerJoinListener.java +++ b/src/main/java/de/tubyoub/statusplugin/Listener/PlayerJoinListener.java @@ -1,6 +1,7 @@ package de.tubyoub.statusplugin.Listener; import de.tubyoub.statusplugin.Managers.StatusManager; +import de.tubyoub.statusplugin.StatusPlugin; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -12,13 +13,14 @@ */ public class PlayerJoinListener implements Listener { private final StatusManager statusManager; - + private final StatusPlugin plugin; /** * Constructor for the PlayerJoinListener class. * @param statusManager The StatusManager instance used to manage player statuses. */ - public PlayerJoinListener(StatusManager statusManager) { + public PlayerJoinListener(StatusPlugin plugin, StatusManager statusManager) { this.statusManager = statusManager; + this.plugin = plugin; } /** @@ -28,7 +30,9 @@ public PlayerJoinListener(StatusManager statusManager) { */ @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - statusManager.updateDisplayName(player); + if (plugin.getConfigManager().isTablistFormatter()) { + Player player = event.getPlayer(); + statusManager.updateDisplayName(player); + } } } \ No newline at end of file diff --git a/src/main/java/de/tubyoub/statusplugin/Managers/ConfigManager.java b/src/main/java/de/tubyoub/statusplugin/Managers/ConfigManager.java index 631ecf0..5200cc8 100644 --- a/src/main/java/de/tubyoub/statusplugin/Managers/ConfigManager.java +++ b/src/main/java/de/tubyoub/statusplugin/Managers/ConfigManager.java @@ -16,7 +16,7 @@ public class ConfigManager { private YamlDocument config; private int maxStatusLength; private boolean chatFormatter; - private boolean changeTabListNames; + private boolean tablistFormatter; private final StatusPlugin plugin; public ConfigManager(StatusPlugin plugin) { @@ -36,6 +36,7 @@ public void loadConfig() { maxStatusLength = config.getInt("maxStatusLength", 15); chatFormatter = config.getBoolean("chatFormatter", true); + tablistFormatter = config.getBoolean("changeTablistNames", true); } catch (IOException e) { plugin.getLogger().severe("Could not load configuration: " + e.getMessage()); } @@ -48,7 +49,17 @@ public void saveConfig() { plugin.getLogger().severe("Could not save configuration: " + e.getMessage()); } } - + public boolean isTablistFormatter(){ + return tablistFormatter; + } + public void setTablistFormatter(boolean tablistFormatter){ + if (this.tablistFormatter == tablistFormatter){ + return; + }else { + this.tablistFormatter = tablistFormatter; + config.set("changeTablistNames", tablistFormatter); + } + } public boolean isChatFormatter(){ return chatFormatter; } diff --git a/src/main/java/de/tubyoub/statusplugin/Managers/StatusManager.java b/src/main/java/de/tubyoub/statusplugin/Managers/StatusManager.java index fc85e71..663d29a 100644 --- a/src/main/java/de/tubyoub/statusplugin/Managers/StatusManager.java +++ b/src/main/java/de/tubyoub/statusplugin/Managers/StatusManager.java @@ -65,7 +65,9 @@ public boolean setStatus(Player player, String status, CommandSender sender) { // Store the original status, not the translated one statusMap.put(player.getUniqueId(), status); - updateDisplayName(player); + if (configManager.isTablistFormatter()) { + updateDisplayName(player); + } saveStatuses(); return true; } @@ -76,7 +78,10 @@ public boolean setStatus(Player player, String status, CommandSender sender) { * @return The status of the player. */ public String getStatus(Player player) { - return statusMap.get(player.getUniqueId()); + if (statusMap.containsKey(player.getUniqueId())){ + return statusMap.get(player.getUniqueId()); + } + return ""; } diff --git a/src/main/java/de/tubyoub/statusplugin/StatusPlaceholderExpansion.java b/src/main/java/de/tubyoub/statusplugin/StatusPlaceholderExpansion.java index 387d57e..546e0c4 100644 --- a/src/main/java/de/tubyoub/statusplugin/StatusPlaceholderExpansion.java +++ b/src/main/java/de/tubyoub/statusplugin/StatusPlaceholderExpansion.java @@ -4,6 +4,8 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import java.util.Objects; + /** * This class extends PlaceholderExpansion from the PlaceholderAPI. * It provides a way to register and use placeholders related to the StatusPlugin. @@ -73,10 +75,12 @@ public String getVersion(){ */ @Override public String onPlaceholderRequest(Player player, String identifier){ - if(player == null){ return ""; } + if (Objects.equals(identifier, "status")){ + return plugin.getStatusManager().getStatus(player); + } // %tubsstatusplugin_status_playername% String[] parts = identifier.split("_"); diff --git a/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java b/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java index 9f3e316..6be62fd 100644 --- a/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java +++ b/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java @@ -5,7 +5,7 @@ import de.tubyoub.statusplugin.Managers.ConfigManager; import de.tubyoub.statusplugin.Managers.StatusManager; import de.tubyoub.statusplugin.commands.StatusCommand; -import de.tubyoub.statusplugin.commands.VersionChecker; +import de.tubyoub.utils.VersionChecker; import de.tubyoub.statusplugin.metrics.Metrics; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -18,12 +18,13 @@ * This class extends JavaPlugin and represents the main entry point for the plugin. */ public class StatusPlugin extends JavaPlugin { - private final String version = "1.3.3"; + private final String version = "1.3.4"; private StatusManager statusManager; private VersionChecker versionChecker; //private boolean placeholderAPIPresent; private ConfigManager configManager; private StatusPlaceholderExpansion placeholderExpansion; + private boolean newVersion; private int pluginId = 20463; /** @@ -46,13 +47,14 @@ public void onEnable() { // Initialize the StatusManager and VersionChecker this.statusManager = new StatusManager(this); this.versionChecker = new VersionChecker(); + newVersion = VersionChecker.isNewVersionAvailable(version); // Register the PlayerJoinListener and ChatListener - getServer().getPluginManager().registerEvents(new PlayerJoinListener(this.statusManager), this); + getServer().getPluginManager().registerEvents(new PlayerJoinListener(this ,this.statusManager), this); getServer().getPluginManager().registerEvents(new ChatListener(this.statusManager, configManager), this); // Set the executor and tab completer for the "status" command - StatusCommand statusCommand = new StatusCommand(statusManager,versionChecker,version); + StatusCommand statusCommand = new StatusCommand(statusManager,newVersion,version); getCommand("status").setExecutor(statusCommand); getCommand("status").setTabCompleter(new StatusTabCompleter()); @@ -69,12 +71,13 @@ public void onEnable() { } // Schedule a task to update the display name of online players every 30 seconds - Bukkit.getScheduler().runTaskTimer(this, () -> { - for (Player player : Bukkit.getOnlinePlayers()) { - statusManager.updateDisplayName(player); - } - }, 0L, 600L); // 600 ticks = 30 seconds - + if (configManager.isTablistFormatter()) { + 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"); getLogger().warning(String.valueOf(this.getConfig())); } diff --git a/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java b/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java index 3d033e9..4b46326 100644 --- a/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java +++ b/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java @@ -3,6 +3,7 @@ import de.tubyoub.statusplugin.Managers.StatusManager; import de.tubyoub.statusplugin.StatusPlugin; import de.tubyoub.utils.ColourUtils; +import de.tubyoub.utils.VersionChecker; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; @@ -21,19 +22,19 @@ public class StatusCommand implements CommandExecutor { String version; private final StatusManager statusManager; - private final VersionChecker versionChecker; + private final boolean newVersion; private StatusPlugin plugin; /** * Constructor for the StatusCommand class. * * @param statusManager The StatusManager instance used to manage player statuses. - * @param versionChecker The VersionChecker instance used to check for new versions. + * @param newVersion If the plugin has a new Version.. * @param version The current version of the plugin. */ - public StatusCommand(StatusManager statusManager, VersionChecker versionChecker, String version) { + public StatusCommand(StatusManager statusManager, boolean newVersion, String version) { this.statusManager = statusManager; - this.versionChecker = versionChecker; + this.newVersion = newVersion; this.version = version; } @@ -248,7 +249,7 @@ public void infoCommand(Player sender, StatusPlugin plugin) { sender.sendMessage(ChatColor.GREEN + "Author: TubYoub"); sender.sendMessage(ChatColor.GREEN + "Version: " + version); - if (VersionChecker.isNewVersionAvailable(version)) { + if (newVersion) { sender.sendMessage(ChatColor.YELLOW + "A new version is available! Update at: " + ChatColor.UNDERLINE + "https://modrinth.com/plugin/tubs-status-plugin/version/latest"); } else { sender.sendMessage(ChatColor.GREEN + "You are using the latest version!"); diff --git a/src/main/java/de/tubyoub/statusplugin/commands/VersionChecker.java b/src/main/java/de/tubyoub/utils/VersionChecker.java similarity index 97% rename from src/main/java/de/tubyoub/statusplugin/commands/VersionChecker.java rename to src/main/java/de/tubyoub/utils/VersionChecker.java index b058060..75b10df 100644 --- a/src/main/java/de/tubyoub/statusplugin/commands/VersionChecker.java +++ b/src/main/java/de/tubyoub/utils/VersionChecker.java @@ -1,6 +1,8 @@ -package de.tubyoub.statusplugin.commands; +package de.tubyoub.utils; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.JsonParser; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -10,8 +12,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.core.type.TypeReference; /** * Class responsible for checking if a new version of the plugin is available. diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 875e8a0..cb062bb 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -3,11 +3,14 @@ # by TubYoub # ################################ # Don't change this value, it's changed by the plugin if needed -fileversion: 1 +fileversion: 2 # maximum Character length a Status should be allowed to have. # default: 15 maxStatusLength: 15 # If the Chat formatter should be enabled (so the Plugin sends Messages with the Status in front of the Player name and formats colors). # default: true -chatFormatter: true \ No newline at end of file +chatFormatter: true +# If the Tablist name should be changed by the plugin or not. (restart your server so the changes will work correctly) +# default: true +changeTablistNames: true \ No newline at end of file From 4ffac14fd7b79dd166817cdf0f41fae6cbdbe893 Mon Sep 17 00:00:00 2001 From: TubYoub Date: Sun, 21 Apr 2024 02:30:39 +0200 Subject: [PATCH 2/2] # Version 1.3.5 ### [bugfix](stupid)
- I deleted the help command (i don't know how) ### [changes]
/ ### [addition]
/
PS: report any issues Took 16 minutes --- pom.xml | 2 +- .../de/tubyoub/statusplugin/StatusPlugin.java | 2 +- .../statusplugin/commands/StatusCommand.java | 24 +++++++++++++++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 7f99871..25ae916 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.tubyoub StatusPlugin - 1.3.4 + 1.3.5 jar Tub's Status Plugin diff --git a/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java b/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java index 6be62fd..ac3c6c4 100644 --- a/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java +++ b/src/main/java/de/tubyoub/statusplugin/StatusPlugin.java @@ -18,7 +18,7 @@ * This class extends JavaPlugin and represents the main entry point for the plugin. */ public class StatusPlugin extends JavaPlugin { - private final String version = "1.3.4"; + private final String version = "1.3.5"; private StatusManager statusManager; private VersionChecker versionChecker; //private boolean placeholderAPIPresent; diff --git a/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java b/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java index 4b46326..a44afe3 100644 --- a/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java +++ b/src/main/java/de/tubyoub/statusplugin/commands/StatusCommand.java @@ -172,9 +172,29 @@ private void helpCommand(Player sender, StatusPlugin plugin, String[] args) { } else { plugin.sendPluginMessages(sender, "title"); sender.sendMessage("Here you can see all available commands:"); - // The rest of the code is self-explanatory and does not need documentation. + plugin.sendPluginMessages(sender, "title"); + sender.sendMessage("Here you can see all available commands:"); + sender.sendMessage("/status - Set your own status."); + sender.sendMessage("/status remove - Remove your Status."); + sender.sendMessage("/status help colorcodes - Get all colorcodes to use in your status."); + if (sender.hasPermission("StatusPlugin.admin.setStatus")) { + sender.sendMessage("/status remove - Remove a player's status. (Admin)"); + sender.sendMessage("/status - Set a player's status. (Admin)"); + } + sender.sendMessage("/status help colors - Show a list of color codes."); + if (sender.hasPermission("StatusPlugin.admin.reload")) { + sender.sendMessage("/status reload - Reload all statuses. (Admin)"); + } + if (sender.hasPermission("StatusPlugin.admin.setMaxlength")) { + sender.sendMessage("/status setmaxlength - Set the max length of status. (Admin)"); + } + if (sender.hasPermission("StatusPlugin.admin.resetMaxlength")) { + sender.sendMessage("/status resetmaxlength - Reset the max length of status to default. (Admin)"); + } + sender.sendMessage("/status info - Show info about the plugin."); + plugin.sendPluginMessages(sender, "line"); + } } - } /** * Displays the available color and formatting codes to the sender.