From d6975b3f54ddc848407a890aeb8d1bb282902c0f Mon Sep 17 00:00:00 2001
From: SofianeLasri <alasri250@gmail.com>
Date: Sat, 10 Sep 2022 23:03:50 +0200
Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20du=20code=20permettant=20de=20d?=
 =?UTF-8?q?=C3=A9tecter=20si=20le=20joueur=20est=20=C3=A9ligible=20au=20r?=
 =?UTF-8?q?=C3=B4le=20de=20joueur=20habitu=C3=A9,=20et=20cr=C3=A9ation=20d?=
 =?UTF-8?q?'une=20fonction=20simulant=20un=20bruitage=20de=20feux=20d'arti?=
 =?UTF-8?q?fice.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../com/slprojects/slcraftplugin/Main.java    |  2 +-
 .../dataHandlers/PlayedTimeHandler.java       | 35 +++++++++++++++++++
 .../parallelTasks/events/GeneralEvents.java   | 29 +++++++++++++++
 src/main/resources/config.yml                 |  7 +++-
 4 files changed, 71 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/slprojects/slcraftplugin/Main.java b/src/main/java/com/slprojects/slcraftplugin/Main.java
index 9e18ac2..93d7608 100644
--- a/src/main/java/com/slprojects/slcraftplugin/Main.java
+++ b/src/main/java/com/slprojects/slcraftplugin/Main.java
@@ -45,7 +45,7 @@ import java.util.regex.Pattern;
 public final class Main extends JavaPlugin implements Listener {
     // Variables
     private static FileConfiguration config;
-    private static LuckPerms luckPermsApi;
+    public static LuckPerms luckPermsApi;
     public static String pluginName;
 
     // Publiques car on les appelle ailleurs
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 ccabc51..6cddeb5 100644
--- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java
+++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java
@@ -1,8 +1,16 @@
 package com.slprojects.slcraftplugin.parallelTasks.dataHandlers;
 
 import com.slprojects.slcraftplugin.Main;
+import com.slprojects.slcraftplugin.parallelTasks.events.GeneralEvents;
 import com.slprojects.slcraftplugin.utils.Database;
+import net.luckperms.api.model.group.Group;
+import net.luckperms.api.model.user.User;
+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;
@@ -15,12 +23,16 @@ public class PlayedTimeHandler implements dataHandler {
     private final List<UUID> usersIndexes;
     private final List<LocalDateTime> userSessionJoinDateTime;
     private final List<Long> userStoredPlayedTimeBeforeJoining;
+    private final int requiredPlayedTimeForUpgradingPlayersAccount;
+    private final Group playersAccountUpgradeGroup;
 
     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 = plugin.luckPermsApi.getGroupManager().getGroup(plugin.getConfig().getString("stats.players-account-upgrade-role"));
     }
 
     @Override
@@ -49,5 +61,28 @@ public class PlayedTimeHandler implements dataHandler {
         long actualPlayedTime = userStoredPlayedTimeBeforeJoining.get(usersIndexes.indexOf(playerUuid)) + playedTimeInSeconds;
 
         Database.setUserSetting(playerUuid.toString(), "playedTime", String.valueOf(actualPlayedTime));
+
+        // Vérification pour avoir le rôle habitué
+        // TODO: Ne sauvegarde pas. :/
+        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());
+
+                Group playerGroup = plugin.luckPermsApi.getGroupManager().getGroup(playerGroupName);
+                if(playerGroup.getWeight().getAsInt() < playersAccountUpgradeGroup.getWeight().getAsInt()){
+                    User playerLuckPerms = plugin.luckPermsApi.getUserManager().getUser(player.getUniqueId());
+                    playerLuckPerms.setPrimaryGroup(playersAccountUpgradeGroup.getName());
+                    plugin.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é!"));
+
+                    // Feux d'artifices
+                    GeneralEvents.fireworkSoundEffect(player, plugin);
+                }
+            }
+        }
     }
 }
diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java
index a8c77f9..9056b07 100644
--- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java
+++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java
@@ -1,4 +1,33 @@
 package com.slprojects.slcraftplugin.parallelTasks.events;
 
+import com.slprojects.slcraftplugin.Main;
+import org.bukkit.Sound;
+import org.bukkit.entity.Player;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import java.util.Random;
+
 public class GeneralEvents {
+    public static void fireworkSoundEffect(Player player, Main plugin){
+        int min = 1;
+        int max = 25;
+        Random random = new Random();
+
+        for(int i = 0; i < 6; i++){
+            int delay = random.nextInt(max - min + 1) + min;
+            new BukkitRunnable() {
+                @Override
+                public void run() {
+                    player.playSound(player.getLocation(), Sound.ENTITY_FIREWORK_ROCKET_LAUNCH, 100, 2);
+                }
+            }.runTaskLater(plugin, delay);
+
+            new BukkitRunnable() {
+                @Override
+                public void run() {
+                    player.playSound(player.getLocation(), Sound.ENTITY_FIREWORK_ROCKET_TWINKLE, 100, 2);
+                }
+            }.runTaskLater(plugin, delay + 40);
+        }
+    }
 }
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index a7683f7..29e2f14 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -42,4 +42,9 @@ server-type: prod # prod/dev
 
 # Periodic events
 periodic-event-call-time: 60 # En sencondes
-ticks-per-seconds: 20
\ No newline at end of file
+ticks-per-seconds: 20
+
+# Statistiques des joueurs
+stats:
+  required-played-time-for-upgrading-players-account: 72000 # En sencondes
+  players-account-upgrade-role: "habitué"
\ No newline at end of file
-- 
GitLab