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

1.5.1

parent 87df9c6e
Branches
Tags
No related merge requests found
......@@ -6,7 +6,7 @@
<groupId>com.slprojects</groupId>
<artifactId>SLCraftPlugin</artifactId>
<version>1.5</version>
<version>1.5.1</version>
<packaging>jar</packaging>
<name>SLCraftPlugin</name>
......
......@@ -4,11 +4,11 @@ package com.slprojects.slcraftplugin;
import com.slprojects.slcraftplugin.commandes.linkCodeCommand;
import com.slprojects.slcraftplugin.commandes.wildCommand;
import com.slprojects.slcraftplugin.tachesParalleles.savePlayerData;
import com.slprojects.slcraftplugin.tachesParalleles.waitForDiscordMsg;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.ChatColor;
import org.bukkit.Sound;
import org.bukkit.Statistic;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
......@@ -29,24 +29,17 @@ import java.net.URL;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import static java.lang.Integer.parseInt;
public final class Main extends JavaPlugin implements Listener {
// Variables
private List<UUID> wildCommandActiveUsers;
private List<UUID> playTimeUsersIndexes;
private List<LocalDateTime> playTimeUsersDate;
private static FileConfiguration config;
private com.slprojects.slcraftplugin.tachesParalleles.savePlayerData savePlayerData;
// Fonctions appelées à des évènements clés
@Override
......@@ -65,13 +58,12 @@ public final class Main extends JavaPlugin implements Listener {
saveDefaultConfig();
reloadConfig();
config = getConfig();
savePlayerData = new savePlayerData(this);
// On initialise la base de donnée
initDatabase();
wildCommandActiveUsers = new ArrayList<>();
playTimeUsersIndexes = new ArrayList<>();
playTimeUsersDate = new ArrayList<>();
wildCommand wildCommand = new wildCommand(this);
getCommand("wild").setExecutor(wildCommand);
......@@ -88,13 +80,14 @@ public final class Main extends JavaPlugin implements Listener {
// Plugin shutdown logic
getLogger().info(ChatColor.RED+"SL-Craft | Plugin éteint");
getServer().getOnlinePlayers().forEach(this::savePlayer);
getServer().getOnlinePlayers().forEach(player -> {
savePlayerData.saveOnQuit(player);
});
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(PlayerJoinEvent e) {
playTimeUsersIndexes.add(e.getPlayer().getUniqueId());
playTimeUsersDate.add(LocalDateTime.now());
savePlayerData.saveOnJoin(e.getPlayer());
// On affiche le message de bienvenue
String welcomeMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), getConfig().getString("player-join-message"));
......@@ -110,7 +103,7 @@ public final class Main extends JavaPlugin implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerQuit(PlayerQuitEvent e) {
savePlayer(e.getPlayer());
savePlayerData.saveOnQuit(e.getPlayer());
String quitMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), getConfig().getString("player-quit-message"));
for(Player p : getServer().getOnlinePlayers()){
p.sendMessage(quitMessage);
......@@ -118,7 +111,7 @@ public final class Main extends JavaPlugin implements Listener {
}
// On renvoie chaque message des joueurs sur le canal de chat du serveur discord
@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "deprecation"})
@EventHandler(priority = EventPriority.LOWEST)
void AsyncChatEvent(AsyncPlayerChatEvent e) throws UnsupportedEncodingException {
// On va appeler l'api du bot discord
......@@ -127,7 +120,6 @@ public final class Main extends JavaPlugin implements Listener {
json.put("username", e.getPlayer().getName());
String urlString = "http://node.sl-projects.com:27001/mc/chat/" + URLEncoder.encode(json.toJSONString(), "UTF-8").replace("+", "%20");
getLogger().info(urlString);
// Processus long et chiant
try {
URL url = new URL(urlString);
......@@ -157,162 +149,6 @@ public final class Main extends JavaPlugin implements Listener {
}
}
// Propre au compteur de temps de jeu
@SuppressWarnings("unchecked")
public void savePlayer(Player player) {
JSONObject target = new JSONObject();
// On ajoute l'uuid et son nom
target.put("uuid", player.getUniqueId().toString());
target.put("name", player.getName());
// La date de join (locale, au cas où CoreProtect ne l'a pas)
target.put("joinedDate", playTimeUsersDate.get(playTimeUsersIndexes.indexOf(player.getUniqueId())).toString());
// On calcule le temps de jeu
LocalDateTime timeNow = LocalDateTime.now();
Duration duration = Duration.between(timeNow, playTimeUsersDate.get(playTimeUsersIndexes.indexOf(player.getUniqueId())));
long playedTimeInSeconds = Math.abs(duration.toSeconds());
// On ajoute le temps de jeu au joueur
target.put("playedTime", playedTimeInSeconds);
playTimeUsersDate.remove(playTimeUsersIndexes.indexOf(player.getUniqueId()));
playTimeUsersIndexes.remove(player.getUniqueId());
target.put("joins", player.getStatistic(Statistic.LEAVE_GAME) + 1);
target.put("hasPlayedBefore", player.hasPlayedBefore());
writePlayer(target);
}
private void writePlayer(JSONObject target) {
// On ouvre la bdd
Connection con = bddOpenConn();
try {
// On va regarder si Le joueur existe
PreparedStatement rechercheUtilisateur = con.prepareStatement("SELECT COUNT(*) FROM site_userSetting WHERE uuid = ?");
rechercheUtilisateur.setString(1, target.get("uuid").toString());
ResultSet resultat = rechercheUtilisateur.executeQuery();
if(resultat.next()) {
int playerExist = resultat.getInt(1);
if(playerExist==0){
// On insère la dernière date de join
PreparedStatement insertionLastJoin = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'playedTime',?)");
insertionLastJoin.setString(1, target.get("uuid").toString());
insertionLastJoin.setString(2, target.get("playedTime").toString());
insertionLastJoin.executeQuery();
// On insère le nombre de connexions
PreparedStatement insertionNbJoins = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joins',?)");
insertionNbJoins.setString(1, target.get("uuid").toString());
insertionNbJoins.setString(2, target.get("joins").toString());
insertionNbJoins.executeQuery();
// On va regarder si Le joueur a déjà joué avant (vu qu'on avait pas de données sur ce joueur)
if(target.get("hasPlayedBefore").toString().equals("true")){
// On va piocher la date d'inscription chez CoreProtect (si elle existe)
// On la prend chez CoreProtect car le plugin a été installé dans les premières semaines du serveur. Il a donc bcp plus de données que nous concernant les anciens joueurs.
PreparedStatement rechercheDateInscription = con.prepareStatement("SELECT time FROM co_user WHERE uuid = ?");
rechercheDateInscription.setString(1, target.get("uuid").toString());
resultat = rechercheDateInscription.executeQuery();
if(resultat.next()){
// On insère la date d'inscription
PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)");
insertionDateInscription.setString(1, target.get("uuid").toString());
insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(LocalDateTime.ofEpochSecond(Long.parseLong(resultat.getString("time")), 0, ZoneOffset.UTC)).toString()); // Il faut convertir le timestamp (epoch second) en date
insertionDateInscription.executeQuery();
// On va précisier que la date d'inscription a été trouvée chez CoreProtect
getLogger().info("Le joueur "+ChatColor.GOLD+target.get("name").toString()+ChatColor.RESET+" n'avait pas de données sur sa date d'inscription dans dans la table des paramètres utilisateurs. On lui a donc attribué comme date de création du compte, celle que détenait CoreProtect.");
} else {
// On insère la date d'inscription (du coup on considère que Le joueur n'a pas joué avant, malgré la condition)
PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)");
insertionDateInscription.setString(1, target.get("uuid").toString());
insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(target.get("joinedDate").toString()).toString());
insertionDateInscription.executeQuery();
// On va préciser que la date d'inscription n'a pas été trouvée chez CoreProtect
PreparedStatement insertionInaccurrateJoinedDate = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'inaccurrateJoinedDate',?)");
insertionInaccurrateJoinedDate.setString(1, target.get("uuid").toString());
insertionInaccurrateJoinedDate.setString(2, "true");
insertionInaccurrateJoinedDate.executeQuery();
getLogger().info("Le joueur "+ChatColor.GOLD+target.get("name").toString()+ChatColor.RESET+" n'avait pas de données sur sa date d'inscription dans dans la table des paramètres utilisateurs, ni dans la table des utilisateurs de CoreProtect. On lui a donc attribué comme date de création du compte, la date du début de sa partie.");
}
}else{
// C'est un nouvel utilisateur, on peut lui attribuer la date d'inscription précédement calculée
PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)");
insertionDateInscription.setString(1, target.get("uuid").toString());
insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(target.get("joinedDate").toString()).toString());
insertionDateInscription.executeQuery();
}
}else{
PreparedStatement tempsJeuJoueur = con.prepareStatement("SELECT value FROM site_userSetting WHERE uuid = ? AND name = 'playedTime'");
tempsJeuJoueur.setString(1, target.get("uuid").toString());
resultat = tempsJeuJoueur.executeQuery();
if(resultat.next()) {
int totalPlayedTime = parseInt(resultat.getString(1)) + parseInt(target.get("playedTime").toString());
PreparedStatement modifyPlayedTime = con.prepareStatement("UPDATE `site_userSetting` SET `value`=? WHERE `uuid`=? AND `name`='playedTime'");
modifyPlayedTime.setInt(1, totalPlayedTime);
modifyPlayedTime.setString(2, target.get("uuid").toString());
modifyPlayedTime.executeQuery();
PreparedStatement modifyNbJoins = con.prepareStatement("UPDATE `site_userSetting` SET `value`=? WHERE `uuid`=? AND `name`='joins'");
modifyNbJoins.setString(1, target.get("joins").toString());
modifyNbJoins.setString(2, target.get("uuid").toString());
modifyNbJoins.executeQuery();
// On va regarder s'il a sa date d'inscription de renseignée
PreparedStatement rechercheDateInscription = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'joinedDate'");
rechercheDateInscription.setString(1, target.get("uuid").toString());
resultat = rechercheDateInscription.executeQuery();
if(!resultat.next()){
// On va regarder si l'on dispose de sa date d'inscription chez CoreProtect
rechercheDateInscription = con.prepareStatement("SELECT time FROM co_user WHERE uuid = ?");
rechercheDateInscription.setString(1, target.get("uuid").toString());
resultat = rechercheDateInscription.executeQuery();
if(resultat.next()){
// On insère la date d'inscription
PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)");
insertionDateInscription.setString(1, target.get("uuid").toString());
insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(LocalDateTime.ofEpochSecond(Long.parseLong(resultat.getString("time")), 0, ZoneOffset.UTC)).toString()); // Il faut convertir le timestamp (epoch second) en date
insertionDateInscription.executeQuery();
// On va précisier que la date d'inscription a été trouvée chez CoreProtect
getLogger().info("Le joueur "+ChatColor.GOLD+target.get("name").toString()+ChatColor.RESET+" n'avait pas de données sur sa date d'inscription dans dans la table des paramètres utilisateurs. On lui a donc attribué comme date de création du compte, celle que détenait CoreProtect.");
} else {
// On insère la date d'inscription (du coup, comme précédement, on prend la date d'inscription locale)
PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)");
insertionDateInscription.setString(1, target.get("uuid").toString());
insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(target.get("joinedDate").toString()).toString());
insertionDateInscription.executeQuery();
// On va préciser que la date d'inscription n'a pas été trouvée chez CoreProtect
PreparedStatement insertionInaccurrateJoinedDate = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'inaccurrateJoinedDate',?)");
insertionInaccurrateJoinedDate.setString(1, target.get("uuid").toString());
insertionInaccurrateJoinedDate.setString(2, "true");
insertionInaccurrateJoinedDate.executeQuery();
getLogger().info("Le joueur "+ChatColor.GOLD+target.get("name").toString()+ChatColor.RESET+" n'avait pas de données sur sa date d'inscription dans dans la table des paramètres utilisateurs, ni dans la table des utilisateurs de CoreProtect. On lui a donc attribué comme date de création du compte, la date du début de sa partie.");
}
}
}else{
getLogger().warning(ChatColor.RED+"Erreur, nous n'avons pas de resultats pour la requête: SELECT value FROM site_userSetting WHERE uuid = '"+target.get("uuid")+"' AND name = playedTime");
}
}
}else{
getLogger().warning(ChatColor.RED+"Erreur, nous n'avons pas de resultats pour la requête: SELECT COUNT(*) FROM site_userSetting WHERE uuid = '"+target.get("uuid").toString()+"' AND rownum = 1");
}
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// Propre à la commande wild: évite les spams de la commande
public boolean checkActiveUserForWildCommand(UUID playerUuid){
if(wildCommandActiveUsers.contains(playerUuid)){
......
package com.slprojects.slcraftplugin.tachesParalleles;
import com.slprojects.slcraftplugin.Main;
import org.bukkit.ChatColor;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class savePlayerData {
private final Main plugin;
private Connection con;
// Playtime
private final List<UUID> playTimeUsersIndexes;
private final List<LocalDateTime> playTimeUsersDate;
public savePlayerData(Main plugin){
this.plugin = plugin;
playTimeUsersIndexes = new ArrayList<>();
playTimeUsersDate = new ArrayList<>();
}
public void saveOnJoin(Player player) {
// On ouvre la bdd
con = plugin.bddOpenConn();
playTimeUsersIndexes.add(player.getUniqueId());
playTimeUsersDate.add(LocalDateTime.now());
insertPlayerName(player); // On check si le nom du joueur est déjà enregistré
playerAddPlayerEntryOrExit(player, true); // On ajoute son entée
checkJoinedDate(player); // On check si on dipose de sa date de rejoint
setPlayerJoinCount(player); // On set le nombre de fois qu'il a rejoint
// On ferme la bdd
try {
con.close();
} catch (SQLException e) {
plugin.getLogger().warning(ChatColor.RED + "Impossible de fermer la connexion à la bdd. Func savePlayerData::saveOnJoin(Player player)");
e.printStackTrace();
}
}
public void saveOnQuit(Player player) {
// On ouvre la bdd
con = plugin.bddOpenConn();
calculatePlayerPlayTime(player); // On actualise le temps de jeu du joueur
playerAddPlayerEntryOrExit(player, false); // On ajoute son sortie
// On ferme la bdd
try {
con.close();
} catch (SQLException e) {
plugin.getLogger().warning(ChatColor.RED + "Impossible de fermer la connexion à la bdd. Func savePlayerData::saveOnQuit(Player player)");
e.printStackTrace();
}
}
// Fonctions
private void insertPlayerName(Player player){
try {
// 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 = ?");
rechercheUtilisateur.setString(1, player.getUniqueId().toString());
rechercheUtilisateur.setString(2, player.getName());
ResultSet resultat = rechercheUtilisateur.executeQuery();
if(resultat.next()){
// 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())){
// On va mettre à jour le nom du joueur
PreparedStatement updateUtilisateur = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = 'playerName'");
updateUtilisateur.setString(1, player.getName());
updateUtilisateur.setString(2, player.getUniqueId().toString());
updateUtilisateur.executeUpdate();
}
}else{
// On peut insérer le nom du joueur
PreparedStatement insertUtilisateur = con.prepareStatement("INSERT INTO site_userSetting (uuid, name, value) VALUES (?, 'playerName', ?)");
insertUtilisateur.setString(1, player.getUniqueId().toString());
insertUtilisateur.setString(2, player.getName());
insertUtilisateur.executeQuery();
}
} catch (SQLException e) {
plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::insertPlayerName(Player player)");
e.printStackTrace();
}
}
private void playerAddPlayerEntryOrExit(Player player, boolean isEnter){
try {
PreparedStatement insertPlayerEntryOrExit = con.prepareStatement("INSERT INTO site_playerEntries (uuid, isJoin, date) VALUES (?, ?, ?)");
insertPlayerEntryOrExit.setString(1, player.getUniqueId().toString());
insertPlayerEntryOrExit.setBoolean(2, isEnter);
insertPlayerEntryOrExit.setString(3, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()).toString());
insertPlayerEntryOrExit.executeQuery();
} catch (SQLException e) {
plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::playerAddPlayerEntryOrExit(Player player, boolean isEnter)");
e.printStackTrace();
}
}
private void checkJoinedDate(Player player){
try {
// On va vérifier si on l'a déjà renseigné par le passé
PreparedStatement rechercheUtilisateur = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'joinedDate'");
rechercheUtilisateur.setString(1, player.getUniqueId().toString());
ResultSet resultat = rechercheUtilisateur.executeQuery();
if(!resultat.next()){
// On n'a pas renseigné la date de création du joueur
if(player.hasPlayedBefore()){
// On va piocher la date d'inscription chez CoreProtect (si elle existe)
// On la prend chez CoreProtect car le plugin a été installé dans les premières semaines du serveur. Il a donc bcp plus de données que nous concernant les anciens joueurs.
PreparedStatement rechercheDateInscription = con.prepareStatement("SELECT time FROM co_user WHERE uuid = ?");
rechercheDateInscription.setString(1, player.getUniqueId().toString());
resultat = rechercheDateInscription.executeQuery();
if(resultat.next()){
// On insère la date d'inscription
PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)");
insertionDateInscription.setString(1, player.getUniqueId().toString());
insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(LocalDateTime.ofEpochSecond(Long.parseLong(resultat.getString("time")), 0, ZoneOffset.UTC)).toString()); // Il faut convertir le timestamp (epoch second) en date
insertionDateInscription.executeQuery();
// On va précisier que la date d'inscription a été trouvée chez CoreProtect
plugin.getLogger().info("Le joueur "+ ChatColor.GOLD+player.getName()+ChatColor.RESET+" n'avait pas de données sur sa date d'inscription dans dans la table des paramètres utilisateurs. On lui a donc attribué comme date de création du compte, celle que détenait CoreProtect.");
} else {
// On insère la date d'inscription (du coup on considère que Le joueur n'a pas joué avant, malgré la condition)
PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)");
insertionDateInscription.setString(1, player.getUniqueId().toString());
insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()).toString());
insertionDateInscription.executeQuery();
// On va préciser que la date d'inscription n'a pas été trouvée chez CoreProtect
PreparedStatement insertionInaccurrateJoinedDate = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'inaccurrateJoinedDate',?)");
insertionInaccurrateJoinedDate.setString(1, player.getUniqueId().toString());
insertionInaccurrateJoinedDate.setString(2, "true");
insertionInaccurrateJoinedDate.executeQuery();
// On est daccord que ceci n'est pas censé arriver, cela ne concerne que mes potes n'étant venus que durant les premières semaines du serveur.
plugin.getLogger().info("Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" n'avait pas de données sur sa date d'inscription dans dans la table des paramètres utilisateurs, ni dans la table des utilisateurs de CoreProtect. On lui a donc attribué comme date de création du compte, la date du début de sa partie.");
}
}else{
// Le joueur est nouveau, on insère la date d'inscription
PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)");
insertionDateInscription.setString(1, player.getUniqueId().toString());
insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()).toString());
insertionDateInscription.executeQuery();
}
}
} catch (SQLException e) {
plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::checkJoinedDate(Player player)");
e.printStackTrace();
}
}
void setPlayerJoinCount(Player player){
try{
// On va vérifier si on a déjà renseigné le nombre de fois que le joueur a rejoint le serveur par le passé
PreparedStatement rechercheJoinCount = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'joins'");
rechercheJoinCount.setString(1, player.getUniqueId().toString());
ResultSet resultat = rechercheJoinCount.executeQuery();
if(resultat.next()){
// On a déjà renseigné ça par le passé, on va donc faire un update
PreparedStatement updateJoinCount = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = 'joins'");
updateJoinCount.setString(1, String.valueOf(player.getStatistic(Statistic.LEAVE_GAME) + 1));
updateJoinCount.setString(2, player.getUniqueId().toString());
updateJoinCount.executeQuery();
}else{
// On n'a pas encore renseigné le nombre de fois que le joueur a rejoint le serveur, on va donc faire un insert
PreparedStatement insertionJoinCount = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joins',?)");
insertionJoinCount.setString(1, player.getUniqueId().toString());
insertionJoinCount.setString(2, String.valueOf(player.getStatistic(Statistic.LEAVE_GAME) + 1));
insertionJoinCount.executeQuery();
}
} catch (SQLException e) {
plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::setPlayerJoinCount(Player player)");
e.printStackTrace();
}
}
private void calculatePlayerPlayTime(Player player){
// On va calculer le temps de jeu du joueur
LocalDateTime timeNow = LocalDateTime.now();
Duration duration = Duration.between(timeNow, playTimeUsersDate.get(playTimeUsersIndexes.indexOf(player.getUniqueId())));
long playedTimeInSeconds = Math.abs(duration.toSeconds());
try{
// 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) {
plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::increasePlayerPlayTime(Player player)");
e.printStackTrace();
}
}
}
......@@ -74,8 +74,9 @@ public class waitForDiscordMsg {
// On envoie le message aux joueurs
for(Player p : plugin.getServer().getOnlinePlayers()){
p.sendMessage(ChatColor.DARK_PURPLE + playerName + " : " + ChatColor.WHITE + message);
p.sendMessage(ChatColor.DARK_PURPLE + playerName + ChatColor.WHITE + ": " + message);
}
plugin.getLogger().info(ChatColor.DARK_PURPLE + playerName + ": " + message);
out.print("Message envoyé !");
break;
default:
......
......@@ -28,4 +28,4 @@ player-join-message: "&a%player_name% &fa rejoint le serveur :D"
player-quit-message: "&a%player_name% &fvient de quitter le serveur :'("
# Serveur messagerie
msg-server-port: 25566
\ No newline at end of file
msg-server-port: 25575
\ No newline at end of file
No preview for this file type
......@@ -28,4 +28,4 @@ player-join-message: "&a%player_name% &fa rejoint le serveur :D"
player-quit-message: "&a%player_name% &fvient de quitter le serveur :'("
# Serveur messagerie
msg-server-port: 25566
\ No newline at end of file
msg-server-port: 25575
\ No newline at end of file
name: SLCraftPlugin
version: '1.5'
version: '1.5.1'
main: com.slprojects.slcraftplugin.Main
depend: [PlaceholderAPI]
api-version: 1.18
......
#Generated by Maven
#Sun Mar 06 22:53:05 CET 2022
#Mon Mar 07 20:27:25 CET 2022
groupId=com.slprojects
artifactId=SLCraftPlugin
version=1.5
version=1.5.1
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment