From 5f28885b1a00904a3b3a5a324ab010c32786b887 Mon Sep 17 00:00:00 2001 From: jakub Date: Sat, 19 Oct 2024 09:29:06 +0200 Subject: [PATCH] =?UTF-8?q?Dal=C5=A1=C3=AD=20v=C3=BDvoj=20Hibernate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 21 ++++++++----- .../mineconomiaCoreV2/MineconomiaCoreV2.java | 14 ++++++++- .../database/HibernateUtil.java | 8 +---- .../database/PlayerDataDatabase.java | 31 ++++++++++++++++--- .../database/PlayerInit.java | 28 +++++++++++++++-- .../variables/PlayerData.java | 23 ++++++++------ src/main/resources/config.yml | 2 +- 7 files changed, 94 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index 64e4e4a..8d09d30 100644 --- a/pom.xml +++ b/pom.xml @@ -69,25 +69,30 @@ provided + + + jakarta.persistence + jakarta.persistence-api + 3.0.0 + compile + + org.hibernate hibernate-core - 6.6.1.Final + 6.1.0.Final + compile + + mysql mysql-connector-java 8.0.33 - - - - - jakarta.persistence - jakarta.persistence-api - 3.0.0 + compile diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java index 3b42113..fb1917a 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java @@ -1,17 +1,25 @@ package xyz.soukup.mineconomiaCoreV2; +import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import xyz.soukup.mineconomiaCoreV2.database.HibernateUtil; +import xyz.soukup.mineconomiaCoreV2.database.PlayerInit; import xyz.soukup.mineconomiaCoreV2.tractor.giveTractorCommand; +import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; +import java.util.HashMap; import java.util.Objects; import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.plugin; public final class MineconomiaCoreV2 extends JavaPlugin { + private static MineconomiaCoreV2 instance; + public static HashMap PlayersData = new HashMap<>(); @Override public void onEnable() { @@ -20,6 +28,10 @@ public final class MineconomiaCoreV2 extends JavaPlugin { getLogger().info("STARTING MINECONOMIA CORE"); plugin.saveDefaultConfig(); + PluginManager pluginManager = getServer().getPluginManager(); + HibernateUtil.newSession(); + //pluginManager.registerEvents(new PlayerInit(), plugin); + // Tractor registration Objects.requireNonNull(plugin.getCommand("tractor")).setExecutor(new giveTractorCommand()); @@ -31,7 +43,7 @@ public final class MineconomiaCoreV2 extends JavaPlugin { @Override public void onDisable() { // Plugin shutdown logic - HibernateUtil.shutdown(); + plugin.saveConfig(); } public static MineconomiaCoreV2 getInstance() { diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java index 37c531c..3ea5a39 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java @@ -1,21 +1,15 @@ package xyz.soukup.mineconomiaCoreV2.database; -import jakarta.persistence.Query; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import org.bukkit.scoreboard.Criteria; + import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.MetadataSources; -import org.hibernate.boot.model.internal.QueryBinder; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import xyz.soukup.mineconomiaCoreV2.core.sharedValues; import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; -import java.util.List; -import java.util.Objects; import java.util.Properties; import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.config; diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java index 8f507f5..e97d95d 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java @@ -1,18 +1,41 @@ package xyz.soukup.mineconomiaCoreV2.database; +import jakarta.persistence.TypedQuery; import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; +import org.hibernate.Session; import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; +import java.util.List; + public class PlayerDataDatabase { - public static void savePlayerDataToDatabase(PlayerData playerData){ + public static void saveToDatabase(PlayerData playerData){ HibernateUtil.saveToDatabase(playerData); } - public static PlayerData getPlayerDataFromDatabase(String nickname){ - CriteriaBuilder criteriaBuilder = HibernateUtil.newSession().getCriteriaBuilder(); - return null; + public static PlayerData getFromDatabase(String nickname){ + + Session session = HibernateUtil.newSession(); + CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(PlayerData.class); + Root root = criteriaQuery.from(PlayerData.class); + Predicate predicate = criteriaBuilder.equal(root.get("PlayerData"), nickname); + + criteriaQuery.where(predicate); + TypedQuery query = session.createQuery(criteriaQuery); + List results = query.getResultList(); + + session.close(); + + if (results.isEmpty()){ + return null; + } + + return results.getFirst(); } } diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java index 3232d21..9c9e35f 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java @@ -1,5 +1,29 @@ package xyz.soukup.mineconomiaCoreV2.database; -public class PlayerInit { - public static void onJoin(){} +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; + +import static xyz.soukup.mineconomiaCoreV2.MineconomiaCoreV2.PlayersData; + +public class PlayerInit implements Listener { + + @EventHandler + public static void onJoin(PlayerJoinEvent event){ + Player player = event.getPlayer(); + String name = player.getDisplayName(); + + PlayerData playerData = PlayerDataDatabase.getFromDatabase(name); + + if (playerData == null){ + playerData = PlayerData.generateFromPlayer(player); + + PlayerDataDatabase.saveToDatabase(playerData); + } + + PlayersData.put(player, playerData); + + } } diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java index 5d80eb3..3c3cfa8 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java @@ -4,6 +4,7 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import org.bukkit.entity.Player; //Definování Member classy pro databázi a další manipulace @@ -11,11 +12,11 @@ import jakarta.persistence.Id; public class PlayerData { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String nickname; - private String uuid; + private int online; private float money; @@ -35,14 +36,6 @@ public class PlayerData { this.nickname = nickname; } - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - public int getOnline() { return online; } @@ -58,4 +51,14 @@ public class PlayerData { public void setMoney(float money) { this.money = money; } + + public static PlayerData generateFromPlayer(Player p){ + PlayerData playerData = new PlayerData(); + + playerData.setMoney(0); + playerData.setOnline(1); + playerData.setNickname(p.getDisplayName()); + + return playerData; + } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 5aa99c5..b1eef74 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,7 +1,7 @@ version: 1.0 language: "czech.yml" database: - host: localhost + host: uceni.soukup.xyz port: 3306 user: mcore password: mcore