Skip to content
Snippets Groups Projects
Commit b494d223 authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

Création d'une classe facilitant la communication avec la Base de donnée, et...

Création d'une classe facilitant la communication avec la Base de donnée, et modification de la stratégie de sauvegarde du temps de jeu.
parent 0c096f54
No related branches found
No related tags found
1 merge request!6Donner le joueur habitué aux joueurs.
Pipeline #55 passed
...@@ -3,6 +3,7 @@ package com.slprojects.slcraftplugin.parallelTasks; ...@@ -3,6 +3,7 @@ package com.slprojects.slcraftplugin.parallelTasks;
import com.slprojects.slcraftplugin.Main; import com.slprojects.slcraftplugin.Main;
import com.slprojects.slcraftplugin.utils.ConsoleLog; import com.slprojects.slcraftplugin.utils.ConsoleLog;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
public class PeriodicEvent { public class PeriodicEvent {
...@@ -31,6 +32,9 @@ public class PeriodicEvent { ...@@ -31,6 +32,9 @@ public class PeriodicEvent {
} }
private void periodicEvent() { private void periodicEvent() {
for (Player player : plugin.getServer().getOnlinePlayers()){
plugin.playerDataHandler.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 // S'exécute à la fin
......
...@@ -2,6 +2,7 @@ package com.slprojects.slcraftplugin.parallelTasks; ...@@ -2,6 +2,7 @@ package com.slprojects.slcraftplugin.parallelTasks;
import com.slprojects.slcraftplugin.Main; import com.slprojects.slcraftplugin.Main;
import com.slprojects.slcraftplugin.utils.ConsoleLog; import com.slprojects.slcraftplugin.utils.ConsoleLog;
import com.slprojects.slcraftplugin.utils.Database;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Statistic; import org.bukkit.Statistic;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
...@@ -21,12 +22,14 @@ public class PlayerDataHandler { ...@@ -21,12 +22,14 @@ public class PlayerDataHandler {
private Connection con; private Connection con;
// Playtime // Playtime
private final List<UUID> playTimeUsersIndexes; private final List<UUID> playTimeUsersIndexes;
private final List<LocalDateTime> playTimeUsersDate; private final List<LocalDateTime> userSessionJoinDateTime;
private final List<Long> userStoredPlayedTimeBeforeJoining;
public PlayerDataHandler(Main plugin) { public PlayerDataHandler(Main plugin) {
this.plugin = plugin; this.plugin = plugin;
playTimeUsersIndexes = new ArrayList<>(); playTimeUsersIndexes = new ArrayList<>();
playTimeUsersDate = new ArrayList<>(); userSessionJoinDateTime = new ArrayList<>();
userStoredPlayedTimeBeforeJoining = new ArrayList<>();
} }
public void joinEvent(Player player) { public void joinEvent(Player player) {
...@@ -34,14 +37,20 @@ public class PlayerDataHandler { ...@@ -34,14 +37,20 @@ public class PlayerDataHandler {
con = plugin.bddOpenConn(); con = plugin.bddOpenConn();
playTimeUsersIndexes.add(player.getUniqueId()); playTimeUsersIndexes.add(player.getUniqueId());
playTimeUsersDate.add(LocalDateTime.now()); userSessionJoinDateTime.add(LocalDateTime.now());
insertPlayerName(player); // On check si le nom du joueur est déjà enregistré boolean playerAlreadyJoinded = insertPlayerName(player); // On check si le nom du joueur est déjà enregistré
statsPlayerEntryExit(player, true); // On ajoute son entée statsPlayerEntryExit(player, true); // On ajoute son entée
checkPlayerJoinedDate(player); // On check si on dipose de sa date de rejoint checkPlayerJoinedDate(player); // On check si on dipose de sa date de rejoint
setPlayerJoinCount(player); // On set le nombre de fois qu'il a rejoint setPlayerJoinCount(player); // On set le nombre de fois qu'il a rejoint
plugin.wildCommand.setPlayerStats(player, getPlayerWildCmdStats(player)); plugin.wildCommand.setPlayerStats(player, getPlayerWildCmdStats(player));
if(playerAlreadyJoinded){
userStoredPlayedTimeBeforeJoining.add(Long.valueOf(Database.getUserSetting(player.getUniqueId().toString(), "playedTime")));
}else{
userStoredPlayedTimeBeforeJoining.add(0L);
}
// On ferme la bdd // On ferme la bdd
try { try {
con.close(); con.close();
...@@ -55,7 +64,7 @@ public class PlayerDataHandler { ...@@ -55,7 +64,7 @@ public class PlayerDataHandler {
// On ouvre la bdd // On ouvre la bdd
con = plugin.bddOpenConn(); con = plugin.bddOpenConn();
calculatePlayerPlayTime(player); // On actualise le temps de jeu du joueur savePlayedTime(player); // On actualise le temps de jeu du joueur
statsPlayerEntryExit(player, false); // On ajoute son sortie statsPlayerEntryExit(player, false); // On ajoute son sortie
savePlayerWildCmdStats(player, plugin.wildCommand.getPlayerStats(player)); savePlayerWildCmdStats(player, plugin.wildCommand.getPlayerStats(player));
...@@ -69,7 +78,8 @@ public class PlayerDataHandler { ...@@ -69,7 +78,8 @@ public class PlayerDataHandler {
} }
// Fonctions // Fonctions
private void insertPlayerName(Player player) { private boolean insertPlayerName(Player player) {
boolean returnValue = false;
try { try {
// On va d'abord regarder si on a déjà renseigné le nom du joueur // On va d'abord regarder si on a déjà renseigné le nom du joueur
PreparedStatement rechercheUtilisateur = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'playerName' AND value = ?"); PreparedStatement rechercheUtilisateur = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'playerName' AND value = ?");
...@@ -78,6 +88,7 @@ public class PlayerDataHandler { ...@@ -78,6 +88,7 @@ public class PlayerDataHandler {
ResultSet resultat = rechercheUtilisateur.executeQuery(); ResultSet resultat = rechercheUtilisateur.executeQuery();
if (resultat.next()) { if (resultat.next()) {
returnValue = true;
// On a déjà renseigné le nom du joueur on va donc vérifier s'il a besoin d'être mis à jour // On a déjà renseigné le nom du joueur on va donc vérifier s'il a besoin d'être mis à jour
if (!resultat.getString("value").equals(player.getName())) { if (!resultat.getString("value").equals(player.getName())) {
// On va mettre à jour le nom du joueur // On va mettre à jour le nom du joueur
...@@ -97,6 +108,7 @@ public class PlayerDataHandler { ...@@ -97,6 +108,7 @@ public class PlayerDataHandler {
ConsoleLog.warning("Func savePlayerData::insertPlayerName(Player player)"); ConsoleLog.warning("Func savePlayerData::insertPlayerName(Player player)");
e.printStackTrace(); e.printStackTrace();
} }
return returnValue;
} }
private void statsPlayerEntryExit(Player player, boolean isEnter) { private void statsPlayerEntryExit(Player player, boolean isEnter) {
...@@ -195,36 +207,15 @@ public class PlayerDataHandler { ...@@ -195,36 +207,15 @@ public class PlayerDataHandler {
} }
} }
private void calculatePlayerPlayTime(Player player) { public void savePlayedTime(Player player) {
// On va calculer le temps de jeu du joueur // On va calculer le temps de jeu du joueur
UUID playerUuid = player.getUniqueId();
LocalDateTime timeNow = LocalDateTime.now(); LocalDateTime timeNow = LocalDateTime.now();
Duration duration = Duration.between(timeNow, playTimeUsersDate.get(playTimeUsersIndexes.indexOf(player.getUniqueId()))); Duration duration = Duration.between(timeNow, userSessionJoinDateTime.get(playTimeUsersIndexes.indexOf(playerUuid)));
long playedTimeInSeconds = Math.abs(duration.toSeconds()); long playedTimeInSeconds = Math.abs(duration.toSeconds());
long actualPlayedTime = userStoredPlayedTimeBeforeJoining.get(playTimeUsersIndexes.indexOf(playerUuid)) + playedTimeInSeconds;
try { Database.setUserSetting(playerUuid.toString(), "playedTime", String.valueOf(actualPlayedTime));
// On va vérifier si on a déjà renseigné le temps de jeu du joueur par le passé
PreparedStatement recherchePlayTime = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'playedTime'");
recherchePlayTime.setString(1, player.getUniqueId().toString());
ResultSet resultat = recherchePlayTime.executeQuery();
if (resultat.next()) {
// On a déjà renseigné ça par le passé, on va donc faire un update
PreparedStatement updatePlayTime = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = 'playedTime'");
updatePlayTime.setString(1, String.valueOf(Long.parseLong(resultat.getString("value")) + playedTimeInSeconds));
updatePlayTime.setString(2, player.getUniqueId().toString());
updatePlayTime.executeQuery();
} else {
// On n'a pas encore renseigné le temps de jeu du joueur, on va donc faire un insert
PreparedStatement insertionPlayTime = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'playedTime',?)");
insertionPlayTime.setString(1, player.getUniqueId().toString());
insertionPlayTime.setString(2, String.valueOf(playedTimeInSeconds));
insertionPlayTime.executeQuery();
}
} catch (SQLException e) {
ConsoleLog.warning("Func savePlayerData::increasePlayerPlayTime(Player player)");
e.printStackTrace();
}
} }
private List<Object> getPlayerWildCmdStats(Player player) { private List<Object> getPlayerWildCmdStats(Player player) {
......
package com.slprojects.slcraftplugin.utils;
import com.slprojects.slcraftplugin.Main;
import org.bukkit.configuration.file.FileConfiguration;
import org.mariadb.jdbc.MariaDbPoolDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import static org.bukkit.Bukkit.getServer;
public class Database {
static final private String userSettingsTabName = "site_userSetting";
public static String getUserSetting(String uuid, String key) {
Connection con = bddOpenConn();
String returnValue = null;
try {
PreparedStatement query = con.prepareStatement("SELECT * FROM " + userSettingsTabName + " WHERE uuid = ? AND name = ?");
query.setString(1, uuid);
query.setString(2, key);
ResultSet resultat = query.executeQuery();
if(resultat.next()){
returnValue = resultat.getString("value");
}
} catch (SQLException e) {
ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e);
}
// On ferme la bdd
try {
con.close();
} catch (SQLException e) {
ConsoleLog.danger("Impossible de fermer la connexion à la bdd.");
e.printStackTrace();
}
return returnValue;
}
public static boolean setUserSetting(String uuid, String key, String value){
Connection con = bddOpenConn();
boolean isOperationASuccess = false;
boolean isEntryExists = (getUserSetting(uuid, key) != null);
try {
if(isEntryExists){
PreparedStatement updateEntry = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = ?");
updateEntry.setString(1, value);
updateEntry.setString(2, uuid);
updateEntry.setString(3, key);
updateEntry.executeUpdate();
isOperationASuccess = true;
}else{
isOperationASuccess = insertUserSettingEntry(uuid, key, value);
}
} catch (SQLException e) {
ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e);
}
// On ferme la bdd
try {
con.close();
} catch (SQLException e) {
ConsoleLog.danger("Impossible de fermer la connexion à la bdd.");
e.printStackTrace();
}
return isOperationASuccess;
}
private static boolean insertUserSettingEntry(String uuid, String key, String value){
Connection con = bddOpenConn();
boolean isOperationASuccess = false;
try {
PreparedStatement insertEntry = con.prepareStatement("INSERT INTO site_userSetting (uuid, name, value) VALUES (?, ?, ?)");
insertEntry.setString(1, uuid);
insertEntry.setString(2, key);
insertEntry.setString(3, value);
insertEntry.executeQuery();
isOperationASuccess = true;
} catch (SQLException e) {
ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e);
}
// On ferme la bdd
try {
con.close();
} catch (SQLException e) {
ConsoleLog.danger("Impossible de fermer la connexion à la bdd.");
e.printStackTrace();
}
return isOperationASuccess;
}
public static Connection bddOpenConn() {
FileConfiguration config = getServer().getPluginManager().getPlugin(Main.pluginName).getConfig();
Connection conn = null;
try {
Class.forName("org.mariadb.jdbc.MariaDbPoolDataSource");
} catch (ClassNotFoundException e) {
ConsoleLog.danger("Il manque le driver MariaDB!");
}
try {
MariaDbPoolDataSource dataSource = new MariaDbPoolDataSource("jdbc:mariadb://" + config.getString("database.host") + "/" + config.getString("database.database") + "?user=" + config.getString("database.user") + "&password=" + config.getString("database.password") + "&maxPoolSize=10");
conn = dataSource.getConnection();
//ConsoleLog.success("Connexion à la base de données réussie!");
} catch (SQLException e) {
ConsoleLog.danger("Erreur lors de la connexion à la base de données.");
}
return conn;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment