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 9f7cd6b2753bb32d09b2c48d847fd8923d9ec673..1d6d374b4e8d2940d55e2eb83c56b8cf1acd05c3 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java @@ -2,20 +2,21 @@ package com.slprojects.slcraftplugin.parallelTasks.dataHandlers; import com.slprojects.slcraftplugin.Main; import com.slprojects.slcraftplugin.parallelTasks.events.GeneralEvents; +import com.slprojects.slcraftplugin.utils.ConsoleLog; import com.slprojects.slcraftplugin.utils.Database; -import net.luckperms.api.model.data.DataMutateResult; import net.luckperms.api.model.group.Group; import net.luckperms.api.model.user.User; import net.luckperms.api.node.types.InheritanceNode; -import net.md_5.bungee.api.ChatMessageType; -import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.ChatColor; +import org.bukkit.Sound; import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; import java.time.Duration; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.UUID; public class PlayedTimeHandler implements dataHandler { @@ -32,7 +33,7 @@ public class PlayedTimeHandler implements dataHandler { userSessionJoinDateTime = new ArrayList<>(); userStoredPlayedTimeBeforeJoining = new ArrayList<>(); requiredPlayedTimeForUpgradingPlayersAccount = plugin.getConfig().getInt("stats.required-played-time-for-upgrading-players-account"); - playersAccountUpgradeGroup = plugin.luckPermsApi.getGroupManager().getGroup(plugin.getConfig().getString("stats.players-account-upgrade-role")); + playersAccountUpgradeGroup = Main.luckPermsApi.getGroupManager().getGroup(plugin.getConfig().getString("stats.players-account-upgrade-role")); } @Override @@ -42,6 +43,13 @@ public class PlayedTimeHandler implements dataHandler { if (plugin.playerDataHandler.playerAlreadyJoined(player)) { userStoredPlayedTimeBeforeJoining.add(Long.valueOf(Database.getUserSetting(player.getUniqueId().toString(), "playedTime"))); + // Delay sinon le joueur ne voit pas + new BukkitRunnable() { + @Override + public void run() { + checkPlayerTime(player); + } + }.runTaskLater(plugin, 20); } else { userStoredPlayedTimeBeforeJoining.add(0L); } @@ -63,23 +71,46 @@ public class PlayedTimeHandler implements dataHandler { Database.setUserSetting(playerUuid.toString(), "playedTime", String.valueOf(actualPlayedTime)); // Vérification pour avoir le rôle habitué + checkPlayerTime(player); + } + + public void checkPlayerTime(Player player) { + // On va calculer le temps de jeu du joueur + UUID playerUuid = player.getUniqueId(); + LocalDateTime timeNow = LocalDateTime.now(); + Duration duration = Duration.between(timeNow, userSessionJoinDateTime.get(usersIndexes.indexOf(playerUuid))); + long playedTimeInSeconds = Math.abs(duration.toSeconds()); + long actualPlayedTime = userStoredPlayedTimeBeforeJoining.get(usersIndexes.indexOf(playerUuid)) + playedTimeInSeconds; + if (actualPlayedTime >= requiredPlayedTimeForUpgradingPlayersAccount) { - String playerGroupName = plugin.luckPermsApi.getPlayerAdapter(Player.class).getMetaData(player).getPrimaryGroup(); - if (playerGroupName != playersAccountUpgradeGroup.getName()) { - player.sendMessage("Ton rôle: " + playerGroupName + " - Groupe visé: " + playersAccountUpgradeGroup.getName()); + String playerGroupName = Main.luckPermsApi.getPlayerAdapter(Player.class).getMetaData(player).getPrimaryGroup(); + if (!Objects.equals(playerGroupName, playersAccountUpgradeGroup.getName())) { - Group playerGroup = plugin.luckPermsApi.getGroupManager().getGroup(playerGroupName); + Group playerGroup = Main.luckPermsApi.getGroupManager().getGroup(playerGroupName); if (playerGroup.getWeight().getAsInt() < playersAccountUpgradeGroup.getWeight().getAsInt()) { - User playerLuckPerms = plugin.luckPermsApi.getUserManager().getUser(player.getUniqueId()); + 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(); - DataMutateResult result = playerLuckPerms.data().add(node); - plugin.luckPermsApi.getUserManager().saveUser(playerLuckPerms); + playerLuckPerms.data().add(node); + Main.luckPermsApi.getUserManager().saveUser(playerLuckPerms); int requiredPlayedTimeInHours = requiredPlayedTimeForUpgradingPlayersAccount / 60 / 60; - player.sendMessage(ChatColor.GREEN + "Bravo tu as passé plus de WOAW, " + ChatColor.GOLD + requiredPlayedTimeInHours + "H " + ChatColor.GREEN + "sur le serveur !!!"); - player.sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(ChatColor.GREEN + "Bravo " + ChatColor.GOLD + player.getName() + ChatColor.GREEN + ", tu est maintenant un joueur habitué!")); + 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); + } + + 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); diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java index 006d155f35960bc863de533267050df16acf26a2..ec65540fe63204d8d0e30fa2ecdcc14da491d332 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java @@ -1,7 +1,6 @@ package com.slprojects.slcraftplugin.parallelTasks.events; import com.slprojects.slcraftplugin.Main; -import com.slprojects.slcraftplugin.utils.ConsoleLog; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -34,7 +33,7 @@ public class PeriodicEvent { for (Player player : plugin.getServer().getOnlinePlayers()) { plugin.playerDataHandler.playedTimeHandler.savePlayedTime(player); } - ConsoleLog.warning("[SL-Craft] Évènement périodique éxecuté."); + //ConsoleLog.warning("[SL-Craft] Évènement périodique éxecuté."); // S'exécute à la fin doesTheEventIsCurrentlyRunning = false;