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