Automatické vytoření sql tabulek a vytvoření hráčského sql záznamu při připojení

napojeni-database
jakub 1 year ago
parent b7745c4a90
commit a33be13ab2
  1. 30
      pom.xml
  2. 20
      src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java
  3. 58
      src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java
  4. 107
      src/main/java/xyz/soukup/mineconomiaCoreV2/database/HibernateUtil.java
  5. 41
      src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerDataDatabase.java
  6. 29
      src/main/java/xyz/soukup/mineconomiaCoreV2/database/PlayerInit.java
  7. 54
      src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java
  8. 29
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java
  9. 22
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java
  10. 51
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java
  11. 100
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Transaction.java

@ -69,37 +69,21 @@
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- JPA API -->
<dependency> <dependency>
<groupId>jakarta.persistence</groupId> <groupId>com.j256.ormlite</groupId>
<artifactId>jakarta.persistence-api</artifactId> <artifactId>ormlite-core</artifactId>
<version>3.0.0</version> <version>5.2</version> <!-- Check for the latest version -->
<scope>compile</scope>
</dependency> </dependency>
<!-- Hibernate Core -->
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>com.j256.ormlite</groupId>
<artifactId>hibernate-core</artifactId> <artifactId>ormlite-jdbc</artifactId>
<version>6.1.0.Final</version> <version>5.2</version> <!-- Check for the latest version -->
<scope>compile</scope>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core-jakarta -->
<!-- MySQL JDBC Driver -->
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version> <version>8.0.28</version> <!-- Check for the latest version -->
<scope>compile</scope>
</dependency> </dependency>
<!-- Hibernate Annotations -->
<dependency>
<groupId>org.hibernate.common</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>5.1.2.Final</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -1,15 +1,15 @@
package xyz.soukup.mineconomiaCoreV2; package xyz.soukup.mineconomiaCoreV2;
import commands.tabCompleter; import commands.tabCompleter;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import xyz.soukup.mineconomiaCoreV2.database.HibernateUtil; import xyz.soukup.mineconomiaCoreV2.database.DatabaseUtil;
import xyz.soukup.mineconomiaCoreV2.database.PlayerInit; import xyz.soukup.mineconomiaCoreV2.events.PlayerInit;
import xyz.soukup.mineconomiaCoreV2.tractor.giveTractorCommand; import xyz.soukup.mineconomiaCoreV2.tractor.giveTractorCommand;
import xyz.soukup.mineconomiaCoreV2.variables.PlayerData; import xyz.soukup.mineconomiaCoreV2.variables.PlayerData;
import java.sql.SQLException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Objects; import java.util.Objects;
@ -19,7 +19,7 @@ public final class MineconomiaCoreV2 extends JavaPlugin {
private static MineconomiaCoreV2 instance; private static MineconomiaCoreV2 instance;
public static HashMap<Player, PlayerData> PlayersData = new HashMap<>(); public static HashMap<Player, PlayerData> playersData = new HashMap<>();
@Override @Override
public void onEnable() { public void onEnable() {
@ -29,8 +29,16 @@ public final class MineconomiaCoreV2 extends JavaPlugin {
plugin.saveDefaultConfig(); plugin.saveDefaultConfig();
PluginManager pluginManager = getServer().getPluginManager(); 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 // Tractor registration
Objects.requireNonNull(plugin.getCommand("tractor")).setExecutor(new giveTractorCommand()); Objects.requireNonNull(plugin.getCommand("tractor")).setExecutor(new giveTractorCommand());

@ -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<PlayerData, Integer> playerDataDao;
public static Dao<Island, Integer> islandDao;
public static Dao<Shop, Integer> shopDao;
public static Dao<Transaction, Integer> 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);
}
}

@ -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());
}
}
}

@ -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<PlayerData> criteriaQuery = criteriaBuilder.createQuery(PlayerData.class);
Root<PlayerData> root = criteriaQuery.from(PlayerData.class);
Predicate predicate = criteriaBuilder.equal(root.get("PlayerData"), nickname);
criteriaQuery.where(predicate);
TypedQuery<PlayerData> query = session.createQuery(criteriaQuery);
List<PlayerData> results = query.getResultList();
session.close();
if (results.isEmpty()){
return null;
}
return results.getFirst();
}
}

@ -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);
}
}

@ -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<PlayerData, Integer> 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);
}
}

@ -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;
}

@ -1,25 +1,29 @@
package xyz.soukup.mineconomiaCoreV2.variables; package xyz.soukup.mineconomiaCoreV2.variables;
import jakarta.persistence.Entity; import com.j256.ormlite.field.DatabaseField;
import jakarta.persistence.GeneratedValue; import com.j256.ormlite.table.DatabaseTable;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
//Definování Member classy pro databázi a další manipulace //Definování Member classy pro databázi a další manipulace
@Entity @DatabaseTable(tableName = "players")
public class PlayerData { public class PlayerData {
@Id @DatabaseField(generatedId = true)
@GeneratedValue(strategy = GenerationType.AUTO)
private int id; private int id;
@DatabaseField(unique = true)
private String nickname; private String nickname;
@DatabaseField
private int online; private int online;
@DatabaseField
private float money; private float money;
public int getId() { public int getId() {
return id; return id;
} }
@ -52,6 +56,10 @@ public class PlayerData {
this.money = money; this.money = money;
} }
public PlayerData(){
}
public static PlayerData generateFromPlayer(Player p){ public static PlayerData generateFromPlayer(Player p){
PlayerData playerData = new PlayerData(); PlayerData playerData = new PlayerData();

@ -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;
}

@ -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;
}
}
Loading…
Cancel
Save