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/commands/tabCompleter.java b/src/main/java/commands/tabCompleter.java
new file mode 100644
index 0000000..1f86e88
--- /dev/null
+++ b/src/main/java/commands/tabCompleter.java
@@ -0,0 +1,33 @@
+package commands;
+
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.command.TabCompleter;
+import org.bukkit.entity.Player;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class tabCompleter implements TabCompleter {
+
+ @Override
+ public List onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) {
+ List completions = new ArrayList<>();
+
+ if (command.getName().equalsIgnoreCase("tpw") && commandSender.isOp()) {
+ if (strings.length == 1) {
+ for (World world : Bukkit.getWorlds()) {
+ completions.add(world.getName());
+ }
+ } else if (strings.length == 2) {
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ completions.add(player.getName());
+ }
+ }
+ }
+
+ return completions;
+ }
+}
diff --git a/src/main/java/commands/teleportWorld.java b/src/main/java/commands/teleportWorld.java
new file mode 100644
index 0000000..9bb51b9
--- /dev/null
+++ b/src/main/java/commands/teleportWorld.java
@@ -0,0 +1,62 @@
+package commands;
+
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class teleportWorld implements CommandExecutor {
+
+ // Teleports player with OP to another world.
+ @Override
+ public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
+ if (commandSender instanceof Player) {
+
+ Player player = (Player) commandSender;
+
+ if (!player.isOp() || strings.length == 0) {
+ return false;
+ }
+
+ World world = Bukkit.getWorld(strings[0]);
+
+ if (world == null) {
+ player.sendMessage("This is not a valid world!");
+ return true;
+ }
+
+ if (strings.length > 1) {
+ try {
+ Player targetPlayer = Bukkit.getPlayer(strings[1]);
+ World targetPlayerWorld = targetPlayer.getWorld();
+
+ if (targetPlayerWorld.equals(world)) {
+ player.sendMessage(String.format("Player %s is already in this world!", strings[1]));
+ return true;
+ }
+
+ targetPlayer.teleport(world.getSpawnLocation());
+ targetPlayer.sendMessage(String.format("Successfully teleported %s from %s to %s.", strings[1], targetPlayerWorld.getName(), world.getName()));
+ return true;
+ } catch (Exception e) {
+ player.sendMessage("This is not a valid player!");
+ return true;
+ }
+ }
+
+ World playerWorld = player.getWorld();
+
+ if (playerWorld.equals(world)) {
+ player.sendMessage("You are already in this world!");
+ return true;
+ }
+
+ player.teleport(world.getSpawnLocation());
+ player.sendMessage(String.format("Successfully teleported from %s to %s.", playerWorld.getName(), world.getName()));
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java
index be4ffea..d295e3b 100644
--- a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java
+++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java
@@ -1,22 +1,33 @@
package xyz.soukup.mineconomiaCoreV2;
+import commands.tabCompleter;
+import commands.teleportWorld;
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());
+ // TPW registration
+ this.getCommand("tpw").setExecutor(new teleportWorld());
+ this.getCommand("tpw").setTabCompleter(new tabCompleter());
@@ -25,6 +36,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 81%
rename from src/main/java/xyz/soukup/mineconomiaCoreV2/core/MsgRetriever.java
rename to src/main/java/xyz/soukup/mineconomiaCoreV2/tools/LangManager.java
index 1f001ab..4375fb6 100644
--- a/src/main/java/xyz/soukup/mineconomiaCoreV2/core/MsgRetriever.java
+++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/LangManager.java
@@ -1,12 +1,11 @@
-package xyz.soukup.mineconomiaCoreV2.core;
+package xyz.soukup.mineconomiaCoreV2.tools;
import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.inventory.Inventory;
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(){
diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/core/PDC.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/PDC.java
similarity index 96%
rename from src/main/java/xyz/soukup/mineconomiaCoreV2/core/PDC.java
rename to src/main/java/xyz/soukup/mineconomiaCoreV2/tools/PDC.java
index 2d76800..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,6 +6,7 @@ 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 {
diff --git a/src/main/java/tools/inventoryTools.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/inventoryTools.java
similarity index 93%
rename from src/main/java/tools/inventoryTools.java
rename to src/main/java/xyz/soukup/mineconomiaCoreV2/tools/inventoryTools.java
index 5d7d431..aeee557 100644
--- a/src/main/java/tools/inventoryTools.java
+++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/tools/inventoryTools.java
@@ -1,4 +1,4 @@
-package tools;
+package xyz.soukup.mineconomiaCoreV2.tools;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
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
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index b1c2bf9..7786bc5 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -3,5 +3,8 @@ version: '1.0-SNAPSHOT'
main: xyz.soukup.mineconomiaCoreV2.MineconomiaCoreV2
api-version: '1.21'
commands:
+ tpw:
+ description: "Teleportuje tě do jiného světa"
+ usage: / [arguments]
tractor:
description: "blieat"