diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java index 1d6d374b4e8d2940d55e2eb83c56b8cf1acd05c3..024989bec864e8569b46870dfe7114f80a70713c 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java @@ -29,11 +29,21 @@ public class PlayedTimeHandler implements dataHandler { public PlayedTimeHandler(Main plugin) { this.plugin = plugin; - usersIndexes = new ArrayList<>(); - userSessionJoinDateTime = new ArrayList<>(); - userStoredPlayedTimeBeforeJoining = new ArrayList<>(); - requiredPlayedTimeForUpgradingPlayersAccount = plugin.getConfig().getInt("stats.required-played-time-for-upgrading-players-account"); - playersAccountUpgradeGroup = Main.luckPermsApi.getGroupManager().getGroup(plugin.getConfig().getString("stats.players-account-upgrade-role")); + String playersAccountUpgradeRole = plugin.getConfig().getString("stats.players-account-upgrade-role"); + + if (playersAccountUpgradeRole != null) { + usersIndexes = new ArrayList<>(); + userSessionJoinDateTime = new ArrayList<>(); + userStoredPlayedTimeBeforeJoining = new ArrayList<>(); + requiredPlayedTimeForUpgradingPlayersAccount = plugin.getConfig().getInt("stats.required-played-time-for-upgrading-players-account"); + playersAccountUpgradeGroup = Main.luckPermsApi.getGroupManager().getGroup(playersAccountUpgradeRole); + + if (playersAccountUpgradeGroup == null) { + throw new RuntimeException("Le groupe " + playersAccountUpgradeRole + " n'existe pas !"); + } + } else { + throw new RuntimeException("La configuration stats.required-played-time-for-upgrading-players-account n'existe pas !"); + } } @Override @@ -84,36 +94,47 @@ public class PlayedTimeHandler implements dataHandler { if (actualPlayedTime >= requiredPlayedTimeForUpgradingPlayersAccount) { String playerGroupName = Main.luckPermsApi.getPlayerAdapter(Player.class).getMetaData(player).getPrimaryGroup(); - if (!Objects.equals(playerGroupName, playersAccountUpgradeGroup.getName())) { + if (playerGroupName != null && !Objects.equals(playerGroupName, playersAccountUpgradeGroup.getName())) { Group playerGroup = Main.luckPermsApi.getGroupManager().getGroup(playerGroupName); - if (playerGroup.getWeight().getAsInt() < playersAccountUpgradeGroup.getWeight().getAsInt()) { - ConsoleLog.info(ChatColor.GREEN + player.getName() + ChatColor.LIGHT_PURPLE + " a débloqué le rôle des joueurs " + ChatColor.GOLD + "habitués" + ChatColor.LIGHT_PURPLE + "!"); - User playerLuckPerms = Main.luckPermsApi.getUserManager().getUser(player.getUniqueId()); - - // https://www.spigotmc.org/threads/how-can-i-set-a-players-group-with-luckperms-api.489404/#post-4084060 - InheritanceNode node = InheritanceNode.builder(playersAccountUpgradeGroup).value(true).build(); - playerLuckPerms.data().add(node); - Main.luckPermsApi.getUserManager().saveUser(playerLuckPerms); - - int requiredPlayedTimeInHours = requiredPlayedTimeForUpgradingPlayersAccount / 60 / 60; - player.sendMessage(ChatColor.GREEN + "Bravo et un grand merci à toi " + ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "!"); - player.sendMessage(ChatColor.GREEN + "Tu as joué pendant plus de" + ChatColor.GOLD + requiredPlayedTimeInHours + "H " + ChatColor.GREEN + "sur le serveur !!!"); - player.sendMessage("Pour te récompenser, nous te donnons le rôle des joueurs " + ChatColor.GOLD + "habitués" + ChatColor.RESET + "!"); - player.sendMessage(ChatColor.GREEN + "Ce rôle te donne accès à un plus grand nombre de homes et à une plus grande surface utilisable pour protéger tes constructions avec RedProtect."); - - for (Player connectedPlayer : plugin.getServer().getOnlinePlayers()) { - if (connectedPlayer != player) { - connectedPlayer.sendMessage(ChatColor.GREEN + player.getName() + ChatColor.LIGHT_PURPLE + " a débloqué le rôle des joueurs " + ChatColor.GOLD + "habitués" + ChatColor.LIGHT_PURPLE + "!"); + if (playerGroup == null) { + throw new RuntimeException("Le groupe " + playerGroupName + " n'existe pas !"); + } + + if (playerGroup.getWeight().isPresent() && playersAccountUpgradeGroup.getWeight().isPresent()) { + if (playerGroup.getWeight().getAsInt() < playersAccountUpgradeGroup.getWeight().getAsInt()) { + ConsoleLog.info(ChatColor.GREEN + player.getName() + ChatColor.LIGHT_PURPLE + " a débloqué le rôle des joueurs " + ChatColor.GOLD + "habitués" + ChatColor.LIGHT_PURPLE + "!"); + User playerLuckPerms = Main.luckPermsApi.getUserManager().getUser(player.getUniqueId()); + if (playerLuckPerms == null) { + throw new RuntimeException("LuckPerms ne semble pas disposer de donnée sur le joueur " + player.getName() + " UUID:" + player.getUniqueId()); } - player.playSound(player.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 100, 2); - } - plugin.sendMessageToDiscord("**" + player.getName() + "** a débloqué le rôle des joueurs **habitués**! \uD83E\uDD73"); - plugin.sendMessageToDiscord("Un grand merci à toi qui a passé plus de 20H de jeu sur le serveur! â¤"); + // https://www.spigotmc.org/threads/how-can-i-set-a-players-group-with-luckperms-api.489404/#post-4084060 + InheritanceNode node = InheritanceNode.builder(playersAccountUpgradeGroup).value(true).build(); + playerLuckPerms.data().add(node); + Main.luckPermsApi.getUserManager().saveUser(playerLuckPerms); + + int requiredPlayedTimeInHours = requiredPlayedTimeForUpgradingPlayersAccount / 60 / 60; + player.sendMessage(ChatColor.GREEN + "Bravo et un grand merci à toi " + ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "!"); + player.sendMessage(ChatColor.GREEN + "Tu as joué pendant plus de" + ChatColor.GOLD + requiredPlayedTimeInHours + "H " + ChatColor.GREEN + "sur le serveur !!!"); + player.sendMessage("Pour te récompenser, nous te donnons le rôle des joueurs " + ChatColor.GOLD + "habitués" + ChatColor.RESET + "!"); + player.sendMessage(ChatColor.GREEN + "Ce rôle te donne accès à un plus grand nombre de homes et à une plus grande surface utilisable pour protéger tes constructions avec RedProtect."); + + for (Player connectedPlayer : plugin.getServer().getOnlinePlayers()) { + if (connectedPlayer != player) { + connectedPlayer.sendMessage(ChatColor.GREEN + player.getName() + ChatColor.LIGHT_PURPLE + " a débloqué le rôle des joueurs " + ChatColor.GOLD + "habitués" + ChatColor.LIGHT_PURPLE + "!"); + } + player.playSound(player.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 100, 2); + } - // Feux d'artifices - GeneralEvents.fireworkSoundEffect(player, plugin); + plugin.sendMessageToDiscord("**" + player.getName() + "** a débloqué le rôle des joueurs **habitués**! \uD83E\uDD73"); + plugin.sendMessageToDiscord("Un grand merci à toi qui a passé plus de 20H de jeu sur le serveur! â¤"); + + // Feux d'artifices + GeneralEvents.fireworkSoundEffect(player, plugin); + } + } else { + ConsoleLog.danger("Impossible de vérifier la priorité du ou des rôles suivants : " + playerGroupName + " & " + playersAccountUpgradeGroup.getName()); } } }