diff --git a/pom.xml b/pom.xml index 9cc5baf..64e4e4a 100644 --- a/pom.xml +++ b/pom.xml @@ -68,5 +68,33 @@ 1.21.1-R0.1-SNAPSHOT provided + + + + org.hibernate + hibernate-core + 6.6.1.Final + + + + + mysql + mysql-connector-java + 8.0.33 + + + + + jakarta.persistence + jakarta.persistence-api + 3.0.0 + + + + + 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 c77ff03..ad8090a 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java @@ -3,17 +3,23 @@ package xyz.soukup.mineconomiaCoreV2; import commands.tabCompleter; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.java.JavaPlugin; +import xyz.soukup.mineconomiaCoreV2.database.HibernateUtil; import xyz.soukup.mineconomiaCoreV2.tractor.giveTractorCommand; import java.util.Objects; +import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.plugin; + public final class MineconomiaCoreV2 extends JavaPlugin { - MineconomiaCoreV2 plugin = getPlugin(this.getClass()); + private static MineconomiaCoreV2 instance; + + @Override public void onEnable() { // Plugin startup logic + instance = this; getLogger().info("STARTING MINECONOMIA CORE"); - plugin.saveConfig(); + plugin.saveDefaultConfig(); // Tractor registration Objects.requireNonNull(plugin.getCommand("tractor")).setExecutor(new giveTractorCommand()); @@ -28,6 +34,10 @@ public final class MineconomiaCoreV2 extends JavaPlugin { @Override public void onDisable() { // Plugin shutdown logic + HibernateUtil.shutdown(); } + public static MineconomiaCoreV2 getInstance() { + return instance; + } } diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/core/sharedValues.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/core/sharedValues.java index 989729a..3178e29 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/core/sharedValues.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/core/sharedValues.java @@ -1,12 +1,14 @@ package xyz.soukup.mineconomiaCoreV2.core; +import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.java.JavaPlugin; import xyz.soukup.mineconomiaCoreV2.MineconomiaCoreV2; import java.util.logging.Logger; public class sharedValues { - public static MineconomiaCoreV2 plugin = MineconomiaCoreV2.getPlugin(MineconomiaCoreV2.class); + public static MineconomiaCoreV2 plugin = MineconomiaCoreV2.getInstance(); public static FileConfiguration config = plugin.getConfig(); public static Logger logger = plugin.getLogger(); } diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java new file mode 100644 index 0000000..37c531c --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java @@ -0,0 +1,113 @@ +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; +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 new file mode 100644 index 0000000..8f507f5 --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java @@ -0,0 +1,18 @@ +package xyz.soukup.mineconomiaCoreV2.database; + +import jakarta.persistence.criteria.CriteriaBuilder; +import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; + + +public class PlayerDataDatabase { + + public static void savePlayerDataToDatabase(PlayerData playerData){ + HibernateUtil.saveToDatabase(playerData); + } + + public static PlayerData getPlayerDataFromDatabase(String nickname){ + CriteriaBuilder criteriaBuilder = HibernateUtil.newSession().getCriteriaBuilder(); + return null; + } + +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java new file mode 100644 index 0000000..3232d21 --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java @@ -0,0 +1,5 @@ +package xyz.soukup.mineconomiaCoreV2.database; + +public class PlayerInit { + public static void onJoin(){} +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/core/MsgRetriever.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/LangManager.java similarity index 80% rename from src/main/java/xyz/soukup/mineconomiaCoreV2/core/MsgRetriever.java rename to src/main/java/xyz/soukup/mineconomiaCoreV2/tools/LangManager.java index b0c20f4..4375fb6 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/core/MsgRetriever.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/LangManager.java @@ -1,13 +1,14 @@ -package xyz.soukup.mineconomiaCoreV2.core; +package xyz.soukup.mineconomiaCoreV2.tools; import org.bukkit.configuration.file.YamlConfiguration; import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.config; import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.plugin; -public class MsgRetriever { +public class LangManager { + public static YamlConfiguration lang = null; - public static void loadLang(){ + public static void loadLang(){ String langPath = "lang/" + config.getString("lang"); plugin.saveResource(langPath, false); //lang = YamlConfiguration.loadConfiguration(plugin.getResource(langPath)); diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/core/PDC.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/PDC.java similarity index 83% rename from src/main/java/xyz/soukup/mineconomiaCoreV2/core/PDC.java rename to src/main/java/xyz/soukup/mineconomiaCoreV2/tools/PDC.java index bf5f637..9ba160e 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/core/PDC.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/PDC.java @@ -1,4 +1,4 @@ -package xyz.soukup.mineconomiaCoreV2.core; +package xyz.soukup.mineconomiaCoreV2.tools; import org.bukkit.NamespacedKey; import org.bukkit.block.TileState; @@ -6,42 +6,58 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +import xyz.soukup.mineconomiaCoreV2.core.sharedValues; +//funkce pro lehčí manipulaci s minecraft PDC (trvalé uchovávání dat v entitách, itemech a blocích) public class PDC { + + //Zapíše hodnotu do hráče public static void WritePlayerPDC(Player player, String key, PersistentDataType type, Object value){ NamespacedKey nKey = new NamespacedKey(sharedValues.plugin, key); PersistentDataContainer pdc = player.getPersistentDataContainer(); pdc.set(nKey, type, value); } + + //Vezme hodnotu z hráče public static Object GetPlayerPDC(Player player, String key, PersistentDataType type){ NamespacedKey nKey = new NamespacedKey(sharedValues.plugin, key); PersistentDataContainer pdc = player.getPersistentDataContainer(); return pdc.get(nKey, type); } + + //Odstraní hodnotu z hráče public static void DeletePlayerPDC(Player player, String key){ NamespacedKey nKey = new NamespacedKey(sharedValues.plugin, key); PersistentDataContainer pdc = player.getPersistentDataContainer(); pdc.remove(nKey); } + + //Zapíše hodnotu do itemu public static void WriteItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type, Object value){ NamespacedKey nKey = new NamespacedKey(sharedValues.plugin, key); PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); pdc.set(nKey, type, value); } + + //Odstraní hodnotu z itemu public static Object GetItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type){ NamespacedKey nKey = new NamespacedKey(sharedValues.plugin, key); PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); return pdc.get(nKey, type); } + + //Zapíše hodnotu do statusu bloku public static void WriteTileStatePDC(TileState tileState, String key, PersistentDataType type, Object value){ NamespacedKey nKey = new NamespacedKey(sharedValues.plugin, key); PersistentDataContainer pdc = tileState.getPersistentDataContainer(); pdc.set(nKey, type, value); } + + //Vezme hodnotu ze statusu bloku public static Object GetTileStatePDC(TileState tileState, String key, PersistentDataType type){ NamespacedKey nKey = new NamespacedKey(sharedValues.plugin, key); PersistentDataContainer pdc = tileState.getPersistentDataContainer(); diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/inventoryTools.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/inventoryTools.java new file mode 100644 index 0000000..aeee557 --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/inventoryTools.java @@ -0,0 +1,30 @@ +package xyz.soukup.mineconomiaCoreV2.tools; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class inventoryTools { + + // Funkce pro zjištění kolikrát je daný item v inventory. Vrátí int + public static int getItemCount(Inventory inventory, ItemStack itemStack) { + + int count = 0; + int invLength = inventory.getSize(); + int i = 0; + + while (i < invLength) { + + ItemStack currentItem = inventory.getItem(i); + + if (!currentItem.isSimilar(itemStack)) { + continue; + } + + count += currentItem.getAmount(); + + i++; + } + + return count; + } +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java new file mode 100644 index 0000000..5d80eb3 --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java @@ -0,0 +1,61 @@ +package xyz.soukup.mineconomiaCoreV2.variables; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +//Definování Member classy pro databázi a další manipulace + +@Entity +public class PlayerData { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + private String nickname; + private String uuid; + private int online; + private float money; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public int getOnline() { + return online; + } + + public void setOnline(int online) { + this.online = online; + } + + public float getMoney() { + return money; + } + + public void setMoney(float money) { + this.money = money; + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 46ccd95..5aa99c5 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,2 +1,8 @@ version: 1.0 -language: "czech.yml" \ No newline at end of file +language: "czech.yml" +database: + host: localhost + port: 3306 + user: mcore + password: mcore + database: mcore \ No newline at end of file