diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 22a9058dae1845023b76f38bb4b925d829ab5fe1..f6d0b4d4a5e8f2fc9869c77e44311e033706f66a 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -6,6 +6,11 @@ <option name="name" value="Central Repository" /> <option name="url" value="https://repo.maven.apache.org/maven2" /> </remote-repository> + <remote-repository> + <option name="id" value="jitpack.io" /> + <option name="name" value="jitpack.io" /> + <option name="url" value="https://jitpack.io" /> + </remote-repository> <remote-repository> <option name="id" value="sonatype" /> <option name="name" value="sonatype" /> diff --git a/pom.xml b/pom.xml index 63a2e5da1daceaafe6a26062e0205842acc81809..5e9f94563de7204256951ee8b80d17f3dc0b28a6 100644 --- a/pom.xml +++ b/pom.xml @@ -67,6 +67,10 @@ <id>placeholderapi</id> <url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url> </repository> + <repository> + <id>jitpack.io</id> + <url>https://jitpack.io</url> + </repository> </repositories> <dependencies> @@ -80,7 +84,7 @@ <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> - <version>3.0.2-rc</version> + <version>3.1.2</version> </dependency> <dependency> <groupId>me.clip</groupId> @@ -94,5 +98,11 @@ <version>5.4</version> <scope>provided</scope> </dependency> + <!-- Version du 22 Avril 2023 --> + <dependency> + <groupId>com.github.SofianeLasri</groupId> + <artifactId>bjLoquent</artifactId> + <version>6729e4b</version> + </dependency> </dependencies> </project> diff --git a/src/main/java/com/slprojects/slcraftplugin/Main.java b/src/main/java/com/slprojects/slcraftplugin/Main.java index feaaef0c9da5c8cc8c23737e77a4c7707ff1f8b4..10b7d73cd740544c27f9df1712101fb20fa4183c 100644 --- a/src/main/java/com/slprojects/slcraftplugin/Main.java +++ b/src/main/java/com/slprojects/slcraftplugin/Main.java @@ -7,6 +7,7 @@ import com.slprojects.slcraftplugin.parallelTasks.InternalWebServer; import com.slprojects.slcraftplugin.parallelTasks.events.PeriodicEvent; import com.slprojects.slcraftplugin.parallelTasks.dataHandlers.PlayerDataHandler; import com.slprojects.slcraftplugin.utils.ConsoleLog; +import com.slprojects.slcraftplugin.utils.Database; import me.clip.placeholderapi.PlaceholderAPI; import net.luckperms.api.LuckPerms; import net.luckperms.api.cacheddata.CachedMetaData; @@ -27,6 +28,7 @@ import org.bukkit.plugin.java.JavaPlugin; import org.json.simple.JSONObject; import org.mariadb.jdbc.MariaDbPoolDataSource; +import javax.xml.crypto.Data; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; @@ -52,6 +54,7 @@ public final class Main extends JavaPlugin implements Listener { public PlayerDataHandler playerDataHandler; public Wild wildCommand; public PeriodicEvent periodicEvent; + public static Connection databaseConnection = null; @Override public void onEnable() { @@ -83,6 +86,11 @@ public final class Main extends JavaPlugin implements Listener { } // Plugin startup logic + try { + databaseConnection = Database.bddOpenConn(); + } catch (SQLException e) { + throw new RuntimeException(e); + } saveDefaultConfig(); reloadConfig(); config = getConfig(); @@ -113,6 +121,12 @@ public final class Main extends JavaPlugin implements Listener { ConsoleLog.danger("Plugin désactivé, au revoir!"); getServer().getOnlinePlayers().forEach(player -> playerDataHandler.quitEvent(player)); + + try { + Database.bddCloseConn(); + } catch (SQLException e) { + throw new RuntimeException(e); + } } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/src/main/java/com/slprojects/slcraftplugin/models/UserSetting.java b/src/main/java/com/slprojects/slcraftplugin/models/UserSetting.java new file mode 100644 index 0000000000000000000000000000000000000000..9693752dedaeaa2bc53d3e04c4f90fbb4cd45845 --- /dev/null +++ b/src/main/java/com/slprojects/slcraftplugin/models/UserSetting.java @@ -0,0 +1,38 @@ +package com.slprojects.slcraftplugin.models; + +import org.bjloquent.Model; + +public class UserSetting extends Model { + private String uuid; + private String name; + private String value; + + public UserSetting() { + super.tableName = "site_userSetting"; + super.primaryKeyName = "uuid"; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/slprojects/slcraftplugin/utils/Database.java b/src/main/java/com/slprojects/slcraftplugin/utils/Database.java index ef9f6db522885fcdd3e87ca1d107b4b4534c9b32..3844aff2d3cdff03a8940a2623b9383fc21b606b 100644 --- a/src/main/java/com/slprojects/slcraftplugin/utils/Database.java +++ b/src/main/java/com/slprojects/slcraftplugin/utils/Database.java @@ -1,20 +1,20 @@ package com.slprojects.slcraftplugin.utils; -import com.slprojects.slcraftplugin.Main; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.plugin.Plugin; -import org.mariadb.jdbc.MariaDbPoolDataSource; +import com.slprojects.slcraftplugin.models.UserSetting; +import com.slprojects.slcraftplugin.utils.database.Configuration; +import org.bjloquent.Connector; +import org.bjloquent.Model; import java.sql.Connection; import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; - -import static org.bukkit.Bukkit.getServer; +import java.util.List; @SuppressWarnings("UnusedReturnValue") public class Database { static final private String userSettingsTabName = "site_userSetting"; + static Connection connection = null; + static Connector jLoquentConnector = null; /** * Récupère une valeur dans la table site_userSetting @@ -24,36 +24,18 @@ public class Database { * @return Valeur de la clé */ public static String getUserSetting(String uuid, String key) { - Connection con; - try { - con = bddOpenConn(); - } catch (SQLException e) { - ConsoleLog.danger("Impossible d'ouvrir la connexion à la bdd."); - throw new RuntimeException(e); - } - String returnValue = null; - - try { - PreparedStatement query = con.prepareStatement("SELECT * FROM " + userSettingsTabName + " WHERE uuid = ? AND name = ?"); - query.setString(1, uuid); - query.setString(2, key); - ResultSet result = query.executeQuery(); - - if (result.next()) { - returnValue = result.getString("value"); - } - } catch (SQLException e) { - ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e); + List<UserSetting> settings = Model.where( + UserSetting.class, + new String[]{"uuid", "name"}, + new String[]{"=", "="}, + new String[]{uuid, key} + ); + + if (settings.size() != 1) { + return null; } - // On ferme la bdd - try { - con.close(); - } catch (SQLException e) { - ConsoleLog.danger("Impossible de fermer la connexion à la bdd."); - e.printStackTrace(); - } - return returnValue; + return (settings.get(0)).getValue(); } /** @@ -139,37 +121,17 @@ public class Database { * @return Connection */ public static Connection bddOpenConn() throws SQLException { - Plugin plugin = getServer().getPluginManager().getPlugin(Main.pluginName); - if (plugin == null) { - throw new IllegalStateException("Le plugin " + Main.pluginName + " n'a pas été trouvé."); - } - - FileConfiguration config = plugin.getConfig(); - - String connectionString = "jdbc:mariadb://" + config.getString("database.host"); - connectionString += "/" + config.getString("database.database"); - connectionString += "?user=" + config.getString("database.user"); - connectionString += "&password=" + config.getString("database.password"); - connectionString += "&maxPoolSize=10"; - - MariaDbPoolDataSource dataSource = new MariaDbPoolDataSource(connectionString); - - try (Connection conn = dataSource.getConnection()) { - if (!conn.isValid(1000)) { - throw new SQLException("Could not establish database connection."); - } - } - - testDataSource(dataSource); - - return dataSource.getConnection(); + jLoquentConnector = Connector.getInstance(); + jLoquentConnector.setDBConfig(new Configuration()); + connection = jLoquentConnector.open(); + return connection; } - private static void testDataSource(MariaDbPoolDataSource dataSource) throws SQLException { - try (Connection conn = dataSource.getConnection()) { - if (!conn.isValid(1000)) { - throw new SQLException("Erreur lors de la connexion à la base de données."); - } - } + /** + * Ferme la connexion à la base de données + */ + public static void bddCloseConn() throws SQLException { + connection.close(); + jLoquentConnector.close(); } } diff --git a/src/main/java/com/slprojects/slcraftplugin/utils/database/Configuration.java b/src/main/java/com/slprojects/slcraftplugin/utils/database/Configuration.java new file mode 100644 index 0000000000000000000000000000000000000000..9c2fd6d436e742018d181e137929bc1adb059f5c --- /dev/null +++ b/src/main/java/com/slprojects/slcraftplugin/utils/database/Configuration.java @@ -0,0 +1,52 @@ +package com.slprojects.slcraftplugin.utils.database; + +import com.slprojects.slcraftplugin.Main; +import org.bjloquent.DBConfig; +import org.bjloquent.DatabaseType; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.Plugin; + +import static org.bukkit.Bukkit.getServer; + +public class Configuration implements DBConfig { + FileConfiguration config = null; + + public Configuration() { + Plugin plugin = getServer().getPluginManager().getPlugin(Main.pluginName); + if (plugin == null) { + throw new IllegalStateException("Le plugin " + Main.pluginName + " n'a pas été trouvé."); + } + + config = plugin.getConfig(); + } + + @Override + public DatabaseType getDatabaseType() { + return DatabaseType.MARIADB; + } + + @Override + public String getHostName() { + return config.getString("database.host"); + } + + @Override + public String getPortNumber() { + return config.getString("database.port"); + } + + @Override + public String getDatabaseName() { + return config.getString("database.database"); + } + + @Override + public String getUsername() { + return config.getString("database.user"); + } + + @Override + public String getPassword() { + return config.getString("database.password"); + } +}