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/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) { 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 new file mode 100644 index 0000000..ac1ca01 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java @@ -0,0 +1,87 @@ +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); + if (!scoreboard.getTeams().isEmpty()) 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); + 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) { + 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(); + } +} 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); + }); + } +} 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