From 8180ede6bee46b724db29cc6e9417d2012b098c8 Mon Sep 17 00:00:00 2001 From: DaTTV Date: Mon, 17 Feb 2025 13:35:32 +0100 Subject: [PATCH 1/4] Partielly added PlayerManager --- .../blazesmp/manager/PlayerManager.java | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java new file mode 100644 index 0000000..4586bbd --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java @@ -0,0 +1,80 @@ +package me.freezy.plugins.papermc.blazesmp.manager; + +import me.freezy.plugins.papermc.blazesmp.BlazeSMP; +import me.freezy.plugins.papermc.blazesmp.module.Clan; +import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import java.security.SecureRandom; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.UUID; + +public class PlayerManager { + private final LinkedHashMap clanChars = new LinkedHashMap<>(); + { + Clans clans = BlazeSMP.getInstance().getClans(); + LinkedList clansList = clans.getClans(); + clansList.forEach(clan -> { + int clanPlace = clansList.indexOf(clan); + char first = (char) ('a' + (clanPlace / (26 * 26)) % 26); + char second = (char) ('a' + (clanPlace / 26) % 26); + char third = (char) ('a' + clanPlace % 26); + clanChars.put(clan, ""+first+second+third); + }); + } + public void setPlayerTeam(Player player) { + Clans clans = BlazeSMP.getInstance().getClans(); + UUID playerUUID = player.getUniqueId(); + player.setScoreboard(player.getServer().getScoreboardManager().getNewScoreboard()); + Scoreboard scoreboard = player.getScoreboard(); + String teamName; + if (clans.isInClan(playerUUID)) { + teamName=clanChars.get(clans.getClanByMember(playerUUID)); + if (clans.isLeader(playerUUID)) { + teamName+="a"; + } else if (clans.isVice(playerUUID)) { + teamName+="b"; + } else { + teamName+="c"; + } + } else { + teamName="zzzm"; + } + teamName+=generateRandomString(12); + scoreboard.getTeams().clear(); + Team team = scoreboard.getTeam(teamName); + if (team == null) { + team = scoreboard.registerNewTeam(teamName); + } + Component prefix = player.isOp() ? + MiniMessage.miniMessage().deserialize( + BlazeSMP.getInstance().getConfiguration().getString("op-prefix", + "[Team] " + ) + ) + : + MiniMessage.miniMessage().deserialize( + BlazeSMP.getInstance().getConfiguration().getString("player-prefix", + "[Player] " + ) + ); + team.prefix(prefix); + } + + private String generateRandomString(int length) { + String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + SecureRandom RANDOM = new SecureRandom(); + StringBuilder sb = new StringBuilder(length); + + for (int i = 0; i < length; i++) { + sb.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length()))); + } + + return sb.toString(); + } +} From 1066d5e8acb7a4aa5fef87b6dd06c148990d040c Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Mon, 17 Feb 2025 17:48:36 +0100 Subject: [PATCH 2/4] Modified the modify command and create command to allow tags with spaces --- .../freezy/plugins/papermc/blazesmp/command/ClanCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java index bcde620..a9f68a9 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java @@ -65,7 +65,7 @@ public class ClanCommand extends SimpleCommand { return true; } String clanName = args[1]; - String clanTag = args[2]; + String clanTag = String.join(" ", Arrays.copyOfRange(args, 2, args.length)); Component tagComponent = miniMessage().deserialize(clanTag); Clan newClan = new Clan(clanName, tagComponent, playerUUID); @@ -667,7 +667,7 @@ public class ClanCommand extends SimpleCommand { return true; } String whatToModify = args[1].toLowerCase(); - String newValue = args[2]; + String newValue = String.join(" ", Arrays.copyOfRange(args, 2, args.length)); Clan currentClan = clans.getClanByMember(playerUUID); if (currentClan == null) { From 5b184a838434162fe70df9e10ce558260485762e Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Mon, 17 Feb 2025 17:48:54 +0100 Subject: [PATCH 3/4] Changed to display correctly --- src/main/resources/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 5516de0..dd8f05c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,2 +1,2 @@ -op-prefix: '[Team]' -player-prefix: '[Player]' \ No newline at end of file +op-prefix: '[Team] ' +player-prefix: '[Player] ' \ No newline at end of file From 0dad4cf59a8bd838e6348ae35bd4e59263a306fb Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Mon, 17 Feb 2025 17:51:00 +0100 Subject: [PATCH 4/4] Added a Bukkit Runnable to update the player tags! Added a PlayerManager to handle the logic behind updateing and ordering the player in tab! Added JoinListener to set playertag on join! Added debugging, registered listener...! --- .../plugins/papermc/blazesmp/BlazeSMP.java | 42 ++++++++++++++++++- .../blazesmp/listener/JoinListener.java | 15 +++++++ .../blazesmp/manager/PlayerManager.java | 9 +++- .../blazesmp/tasks/PlayerNameUpdate.java | 14 +++++++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/listener/JoinListener.java create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/PlayerNameUpdate.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index f073844..bb22480 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -2,11 +2,15 @@ package me.freezy.plugins.papermc.blazesmp; import lombok.Getter; import me.freezy.plugins.papermc.blazesmp.command.ClanCommand; +import me.freezy.plugins.papermc.blazesmp.listener.JoinListener; import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; import me.freezy.plugins.papermc.blazesmp.module.manager.Homes; import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks; +import me.freezy.plugins.papermc.blazesmp.tasks.PlayerNameUpdate; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; import org.slf4j.Logger; public final class BlazeSMP extends JavaPlugin { @@ -16,11 +20,14 @@ public final class BlazeSMP extends JavaPlugin { @Getter private Clans clans; @Getter private FileConfiguration configuration; @Getter private Logger log; + @Getter private BukkitTask nameUpdateTask; @Override public void onLoad() { this.log=getSLF4JLogger(); + this.log.info("Loading BlazeSMP..."); + this.log.info("Loading Homes..."); this.homes=new Homes(); this.homes.load(); @@ -41,19 +48,52 @@ public final class BlazeSMP extends JavaPlugin { this.configuration= getConfig(); saveConfig(); this.log.info("Loaded config!"); + + this.log.info("Loaded BlazeSMP!"); } @Override public void onEnable() { BlazeSMP.instance=this; + this.log.info("Enabling BlazeSMP..."); + this.log.info("Registering Commands..."); new ClanCommand().register(); this.log.info("Registered Commands!"); + + this.log.info("Registering EventListeners..."); + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(new JoinListener(), this); + this.log.info("Registered EventListeners!"); + + this.log.info("Starting Timer tasks..."); + this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L); + this.log.info("Started Timer tasks!"); + + this.log.info("Enabled BlazeSMP!"); } @Override public void onDisable() { - // Plugin shutdown logic + this.log.info("Disabling BlazeSMP..."); + + this.log.info("Cancelling Timer tasks..."); + this.nameUpdateTask.cancel(); + this.log.info("Cancelled Timer tasks!"); + + this.log.info("Saving Homes..."); + this.homes.save(); + this.log.info("Saved Homes!"); + + this.log.info("Saving ProtectedBlocks..."); + this.protectedBlocks.save(); + this.log.info("Saved ProtectedBlocks!"); + + this.log.info("Saving Clans..."); + this.clans.saveAllClans(); + this.log.info("Saved Clans!"); + + this.log.info("Disabling BlazeSMP!"); } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/JoinListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/JoinListener.java new file mode 100644 index 0000000..0b378dc --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/JoinListener.java @@ -0,0 +1,15 @@ +package me.freezy.plugins.papermc.blazesmp.listener; + +import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class JoinListener implements Listener { + @EventHandler + public void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + new PlayerManager().setPlayerTeam(player); + } +} diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java index 4586bbd..ac1ca01 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java @@ -46,7 +46,7 @@ public class PlayerManager { teamName="zzzm"; } teamName+=generateRandomString(12); - scoreboard.getTeams().clear(); + if (!scoreboard.getTeams().isEmpty()) scoreboard.getTeams().clear(); Team team = scoreboard.getTeam(teamName); if (team == null) { team = scoreboard.registerNewTeam(teamName); @@ -64,6 +64,13 @@ public class PlayerManager { ) ); team.prefix(prefix); + Clan clan = clans.getClanByMember(playerUUID); + if (clan != null) { + team.suffix(Component.text(" ").append(clan.getTag())); + } else { + team.suffix(Component.empty()); + } + team.addEntity(player); } private String generateRandomString(int length) { diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/PlayerNameUpdate.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/PlayerNameUpdate.java new file mode 100644 index 0000000..baad90c --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/PlayerNameUpdate.java @@ -0,0 +1,14 @@ +package me.freezy.plugins.papermc.blazesmp.tasks; + +import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager; +import org.bukkit.Bukkit; +import org.bukkit.scheduler.BukkitRunnable; + +public class PlayerNameUpdate extends BukkitRunnable { + @Override + public void run() { + Bukkit.getOnlinePlayers().forEach(player -> { + new PlayerManager().setPlayerTeam(player); + }); + } +}