From a33be13ab2785f79f961165831a83ac7c077714f Mon Sep 17 00:00:00 2001 From: jakub Date: Sat, 19 Oct 2024 22:30:45 +0200 Subject: [PATCH] =?UTF-8?q?Automatick=C3=A9=20vyto=C5=99en=C3=AD=20sql=20t?= =?UTF-8?q?abulek=20a=20vytvo=C5=99en=C3=AD=20hr=C3=A1=C4=8Dsk=C3=A9ho=20s?= =?UTF-8?q?ql=20z=C3=A1znamu=20p=C5=99i=20p=C5=99ipojen=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 30 ++--- .../mineconomiaCoreV2/MineconomiaCoreV2.java | 20 +++- .../database/DatabaseUtil.java | 58 ++++++++++ .../database/HibernateUtil.java | 107 ------------------ .../database/PlayerDataDatabase.java | 41 ------- .../database/PlayerInit.java | 29 ----- .../mineconomiaCoreV2/events/PlayerInit.java | 54 +++++++++ .../mineconomiaCoreV2/variables/Island.java | 29 +++++ .../variables/PlayerData.java | 22 ++-- .../mineconomiaCoreV2/variables/Shop.java | 51 +++++++++ .../variables/Transaction.java | 100 ++++++++++++++++ 11 files changed, 328 insertions(+), 213 deletions(-) create mode 100644 src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java delete mode 100644 src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java delete mode 100644 src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java delete mode 100644 src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java create mode 100644 src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java create mode 100644 src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java create mode 100644 src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java create mode 100644 src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Transaction.java diff --git a/pom.xml b/pom.xml index 8d09d30..c72b3e7 100644 --- a/pom.xml +++ b/pom.xml @@ -69,37 +69,21 @@ provided - - jakarta.persistence - jakarta.persistence-api - 3.0.0 - compile + com.j256.ormlite + ormlite-core + 5.2 - - - org.hibernate - hibernate-core - 6.1.0.Final - compile + com.j256.ormlite + ormlite-jdbc + 5.2 - - - - mysql mysql-connector-java - 8.0.33 - compile + 8.0.28 - - - org.hibernate.common - hibernate-commons-annotations - 5.1.2.Final - diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java index eabb295..0fb5ab1 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java @@ -1,15 +1,15 @@ package xyz.soukup.mineconomiaCoreV2; import commands.tabCompleter; -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.database.DatabaseUtil; +import xyz.soukup.mineconomiaCoreV2.events.PlayerInit; import xyz.soukup.mineconomiaCoreV2.tractor.giveTractorCommand; import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; +import java.sql.SQLException; import java.util.HashMap; import java.util.Objects; @@ -19,7 +19,7 @@ public final class MineconomiaCoreV2 extends JavaPlugin { private static MineconomiaCoreV2 instance; - public static HashMap PlayersData = new HashMap<>(); + public static HashMap playersData = new HashMap<>(); @Override public void onEnable() { @@ -29,8 +29,16 @@ public final class MineconomiaCoreV2 extends JavaPlugin { plugin.saveDefaultConfig(); PluginManager pluginManager = getServer().getPluginManager(); - HibernateUtil.newSession(); - //pluginManager.registerEvents(new PlayerInit(), plugin); + + + + try { + DatabaseUtil.databaseInit(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + + pluginManager.registerEvents(new PlayerInit(), plugin); // Tractor registration Objects.requireNonNull(plugin.getCommand("tractor")).setExecutor(new giveTractorCommand()); diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java new file mode 100644 index 0000000..24242e7 --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java @@ -0,0 +1,58 @@ +package xyz.soukup.mineconomiaCoreV2.database; + +import com.google.protobuf.TypeRegistry; +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.dao.DaoManager; +import com.j256.ormlite.jdbc.JdbcConnectionSource; +import com.j256.ormlite.support.ConnectionSource; +import com.j256.ormlite.table.TableUtils; +import xyz.soukup.mineconomiaCoreV2.variables.Island; +import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; +import xyz.soukup.mineconomiaCoreV2.variables.Shop; +import xyz.soukup.mineconomiaCoreV2.variables.Transaction; + +import java.sql.SQLException; + +import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.config; +import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.logger; + +public class DatabaseUtil { + public static Dao playerDataDao; + public static Dao islandDao; + public static Dao shopDao; + public static Dao transactionDao; + + public static ConnectionSource getConnectionSource() throws SQLException { + String host = config.getString("database.host"); + String port = config.getString("database.port"); + String user = config.getString("database.user"); + String password = config.getString("database.password"); + String database = config.getString("database.database"); + + String url = "jdbc:mysql://" + host + ":" + port + "/" + database; + + return new JdbcConnectionSource(url, user, password); + } + + public static void createTables(ConnectionSource connectionSource) throws SQLException { + TableUtils.createTableIfNotExists(connectionSource, PlayerData.class); + TableUtils.createTableIfNotExists(connectionSource, Transaction.class); + TableUtils.createTableIfNotExists(connectionSource, Island.class); + TableUtils.createTableIfNotExists(connectionSource, Shop.class); + } + + public static void daoInit(ConnectionSource connectionSource) throws SQLException { + islandDao = DaoManager.createDao(connectionSource, Island.class); + playerDataDao = DaoManager.createDao(connectionSource, PlayerData.class); + shopDao = DaoManager.createDao(connectionSource, Shop.class); + transactionDao = DaoManager.createDao(connectionSource, Transaction.class); + } + + public static void databaseInit() throws SQLException { + ConnectionSource connectionSource = getConnectionSource(); + + createTables(connectionSource); + daoInit(connectionSource); + } + +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java deleted file mode 100644 index 3ea5a39..0000000 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java +++ /dev/null @@ -1,107 +0,0 @@ -package xyz.soukup.mineconomiaCoreV2.database; - - -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.Transaction; -import org.hibernate.boot.MetadataSources; -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.Properties; - -import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.config; -import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.logger; - -public class HibernateUtil { - private static SessionFactory sessionFactory; - - static { - - try { - - StandardServiceRegistry registry = new StandardServiceRegistryBuilder() - .applySettings(getHibernateProperties()) - .build(); - - sessionFactory = new MetadataSources(registry) - .addAnnotatedClass(PlayerData.class) - .buildMetadata() - .buildSessionFactory(); - - } catch (Exception e) { - - sharedValues.logger.warning(e.toString()); - - if (sessionFactory != null) { - sessionFactory.close(); - } - - } - } - - - private static Properties getHibernateProperties() { - - String host = config.getString("database.host"); - String port = config.getString("database.port"); - String user = config.getString("database.user"); - String password = config.getString("database.password"); - String database = config.getString("database.database"); - - String jdbcString = "jdbc:mysql://" + host + ":" + port + "/" + database; - - Properties properties = new Properties(); - properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); - properties.put("hibernate.connection.driver_class", "com.mysql.cj.jdbc.Driver"); - properties.put("hibernate.connection.url", jdbcString); - properties.put("hibernate.connection.username", user); - properties.put("hibernate.connection.password", password); - properties.put("hibernate.hbm2ddl.auto", "update"); - properties.put("hibernate.show_sql", "true"); - return properties; - } - - - public static SessionFactory getSessionFactory() { - return sessionFactory; - } - - public static Session newSession(){ - return getSessionFactory().openSession(); - } - - public static void shutdown() { - if (sessionFactory != null) { - sessionFactory.close(); - } - } - - - public static void saveToDatabase(Object object){ - - Session session = HibernateUtil.newSession(); - Transaction transaction = null; - - try { - - transaction = session.beginTransaction(); - session.persist(object); - transaction.commit(); - session.close(); - - }catch (Exception e){ - - if (transaction != null) { - transaction.rollback(); // Rollback if something goes wrong - } - - logger.warning(e.toString()); - } - } - - - -} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java deleted file mode 100644 index e97d95d..0000000 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java +++ /dev/null @@ -1,41 +0,0 @@ -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 saveToDatabase(PlayerData playerData){ - HibernateUtil.saveToDatabase(playerData); - } - - 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 deleted file mode 100644 index 9c9e35f..0000000 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java +++ /dev/null @@ -1,29 +0,0 @@ -package xyz.soukup.mineconomiaCoreV2.database; - -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/events/PlayerInit.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java new file mode 100644 index 0000000..40c1ba6 --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java @@ -0,0 +1,54 @@ +package xyz.soukup.mineconomiaCoreV2.events; + +import com.j256.ormlite.stmt.QueryBuilder; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; + +import java.sql.SQLException; + +import static xyz.soukup.mineconomiaCoreV2.MineconomiaCoreV2.playersData; +import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.logger; +import static xyz.soukup.mineconomiaCoreV2.database.DatabaseUtil.playerDataDao; + +public class PlayerInit implements Listener { + + @EventHandler + public static void onJoin(PlayerJoinEvent event) throws SQLException { + + Player player = event.getPlayer(); + String name = player.getDisplayName(); + PlayerData playerData = PlayerData.generateFromPlayer(player);; + + QueryBuilder queryBuilder = playerDataDao.queryBuilder(); + queryBuilder.where().eq("nickname", name); + + if (queryBuilder.countOf() > 0){ + playerData = queryBuilder.queryForFirst(); + }else { + playerDataDao.create(playerData); + } + + playerData.setOnline(1); + playerDataDao.update(playerData); + + playersData.put(player, playerData); + + + } + + @EventHandler + public static void onLeave(PlayerQuitEvent event) throws SQLException { + + Player player = event.getPlayer(); + PlayerData playerData = playersData.get(player); + + playerData.setOnline(0); + playerDataDao.update(playerData); + + playersData.remove(player); + } +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java new file mode 100644 index 0000000..71e70f6 --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java @@ -0,0 +1,29 @@ +package xyz.soukup.mineconomiaCoreV2.variables; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +@DatabaseTable(tableName = "islands") +public class Island { + + @DatabaseField(generatedId = true) + private int id; + + @DatabaseField + private String server; + + @DatabaseField + private String name; + + @DatabaseField + private String owner; + + @DatabaseField + private String world; + + @DatabaseField(columnName = "size_x") + private int sizeX; + + @DatabaseField(columnName = "size_y") + private int sizeY; +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java index 3c3cfa8..b890ea3 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java @@ -1,25 +1,29 @@ package xyz.soukup.mineconomiaCoreV2.variables; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +import org.bukkit.Location; import org.bukkit.entity.Player; //Definování Member classy pro databázi a další manipulace -@Entity +@DatabaseTable(tableName = "players") public class PlayerData { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) + @DatabaseField(generatedId = true) private int id; + @DatabaseField(unique = true) private String nickname; + @DatabaseField private int online; + + @DatabaseField private float money; + public int getId() { return id; } @@ -52,6 +56,10 @@ public class PlayerData { this.money = money; } + public PlayerData(){ + + } + public static PlayerData generateFromPlayer(Player p){ PlayerData playerData = new PlayerData(); diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java new file mode 100644 index 0000000..2fe8ace --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java @@ -0,0 +1,51 @@ +package xyz.soukup.mineconomiaCoreV2.variables; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +@DatabaseTable(tableName = "shops") +public class Shop { + @DatabaseField(generatedId = true) + private int id; + + @DatabaseField + private String server; + + @DatabaseField + private String owner; + + @DatabaseField(columnName = "owner_type") + private String ownerType; + + @DatabaseField + private String type; + + @DatabaseField + private float price; + + @DatabaseField + private int stock; + + @DatabaseField + private int x; + + @DatabaseField + private int y; + + @DatabaseField + private int z; + + @DatabaseField + private int world; + + @DatabaseField(columnName = "storage_x") + private int storageX; + + @DatabaseField(columnName = "storage_y") + private int storageY; + + @DatabaseField(columnName = "storage_z") + private int storageZ; + + +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Transaction.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Transaction.java new file mode 100644 index 0000000..4fa4eb4 --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Transaction.java @@ -0,0 +1,100 @@ +package xyz.soukup.mineconomiaCoreV2.variables; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +import java.util.Date; + +@DatabaseTable(tableName = "transactions") +public class Transaction { + + @DatabaseField(generatedId = true) + private int id; + + @DatabaseField + private Date date; + + @DatabaseField + private String type; + + @DatabaseField + private float amount; + + @DatabaseField + private String sender; + + @DatabaseField(columnName = "sender_type") + private String senderType; + + @DatabaseField + private String receiver; + + @DatabaseField(columnName = "receiver_type") + private String receiverType; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public float getAmount() { + return amount; + } + + public void setAmount(float amount) { + this.amount = amount; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public String getSenderType() { + return senderType; + } + + public void setSenderType(String senderType) { + this.senderType = senderType; + } + + public String getReceiver() { + return receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } + + public String getReceiverType() { + return receiverType; + } + + public void setReceiverType(String receiverType) { + this.receiverType = receiverType; + } + + +}