diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java index 466a06e..1511ecc 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java @@ -24,8 +24,6 @@ public final class MineconomiaCoreV2 extends JavaPlugin { private static MineconomiaCoreV2 instance; - public static HashMap playersData = new HashMap<>(); - @Override public void onEnable() { // Plugin startup logic diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java index 24242e7..2f17b26 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java @@ -6,10 +6,7 @@ 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 xyz.soukup.mineconomiaCoreV2.variables.*; import java.sql.SQLException; @@ -21,6 +18,8 @@ public class DatabaseUtil { public static Dao islandDao; public static Dao shopDao; public static Dao transactionDao; + public static Dao groupDao; + public static Dao groupMembershipDao; public static ConnectionSource getConnectionSource() throws SQLException { String host = config.getString("database.host"); @@ -39,6 +38,8 @@ public class DatabaseUtil { TableUtils.createTableIfNotExists(connectionSource, Transaction.class); TableUtils.createTableIfNotExists(connectionSource, Island.class); TableUtils.createTableIfNotExists(connectionSource, Shop.class); + TableUtils.createTableIfNotExists(connectionSource, Group.class); + TableUtils.createTableIfNotExists(connectionSource, GroupMembership.class); } public static void daoInit(ConnectionSource connectionSource) throws SQLException { @@ -46,6 +47,8 @@ public class DatabaseUtil { playerDataDao = DaoManager.createDao(connectionSource, PlayerData.class); shopDao = DaoManager.createDao(connectionSource, Shop.class); transactionDao = DaoManager.createDao(connectionSource, Transaction.class); + groupDao = DaoManager.createDao(connectionSource, Group.class); + groupMembershipDao = DaoManager.createDao(connectionSource, GroupMembership.class); } public static void databaseInit() throws SQLException { diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java index 40c1ba6..b2e470f 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java @@ -10,9 +10,8 @@ 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; +import static xyz.soukup.mineconomiaCoreV2.variables.PlayerData.playersData; public class PlayerInit implements Listener { diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Group.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Group.java new file mode 100644 index 0000000..7f3708c --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Group.java @@ -0,0 +1,66 @@ +package xyz.soukup.mineconomiaCoreV2.variables; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.stmt.QueryBuilder; +import com.j256.ormlite.table.DatabaseTable; + +import java.sql.SQLException; + +import static xyz.soukup.mineconomiaCoreV2.database.DatabaseUtil.groupDao; + +@DatabaseTable(tableName = "groups") +public class Group { + + @DatabaseField(generatedId = true) + private int id; + + @DatabaseField(unique = true) + private String name; + + @DatabaseField(canBeNull = false) + private String owner; + + @DatabaseField(canBeNull = false) + private float money; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public float getMoney() { + return money; + } + + public void setMoney(float money) { + this.money = money; + } + + public static Group getGroup(String name) throws SQLException { + QueryBuilder queryBuilder = groupDao.queryBuilder(); + return queryBuilder.where().eq("name", name).queryForFirst(); + } + + public void save() throws SQLException { + groupDao.update(this); + } +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/GroupMembership.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/GroupMembership.java new file mode 100644 index 0000000..d05884d --- /dev/null +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/GroupMembership.java @@ -0,0 +1,41 @@ +package xyz.soukup.mineconomiaCoreV2.variables; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +@DatabaseTable(tableName = "group_memberships") +public class GroupMembership { + + @DatabaseField(generatedId = true) + private int id; + + @DatabaseField(canBeNull = false) + private String group; + + @DatabaseField(canBeNull = false) + private String member; + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + + public String getMember() { + return member; + } + + public void setMember(String member) { + this.member = member; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java index 71e70f6..eb43dad 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java @@ -9,16 +9,16 @@ public class Island { @DatabaseField(generatedId = true) private int id; - @DatabaseField + @DatabaseField(canBeNull = false) private String server; - @DatabaseField + @DatabaseField(canBeNull = false) private String name; - @DatabaseField + @DatabaseField(canBeNull = false) private String owner; - @DatabaseField + @DatabaseField(canBeNull = false) private String world; @DatabaseField(columnName = "size_x") diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java index b890ea3..06b8484 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java @@ -3,26 +3,37 @@ package xyz.soukup.mineconomiaCoreV2.variables; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; +import java.sql.SQLException; +import java.util.HashMap; + +import static xyz.soukup.mineconomiaCoreV2.database.DatabaseUtil.playerDataDao; + //Definování Member classy pro databázi a další manipulace @DatabaseTable(tableName = "players") public class PlayerData { + public static HashMap playersData = new HashMap<>(); + @DatabaseField(generatedId = true) private int id; - @DatabaseField(unique = true) + @DatabaseField(unique = true, canBeNull = false) private String nickname; @DatabaseField private int online; - @DatabaseField + @DatabaseField(canBeNull = false) private float money; + @DatabaseField + private String discord; + public int getId() { return id; @@ -56,7 +67,38 @@ public class PlayerData { this.money = money; } - public PlayerData(){ + public String getDiscord() { + return discord; + } + + public void setDiscord(String discord) { + this.discord = discord; + } + + public static PlayerData getPlayerData(String nickname) throws SQLException { + PlayerData playerData = null; + Player player = Bukkit.getPlayer(nickname); + + if (player != null){ + playerData = playersData.get(player); + } + + if (playerData == null){ + playerData = playerDataDao.queryBuilder().where().eq("nickname", nickname).queryForFirst(); + } + + return playerData; + } + + public void save() throws SQLException { + Player player = Bukkit.getPlayer(this.getNickname()); + + if (player != null){ + playersData.put(player, this); + return; + } + + playerDataDao.update(this); } diff --git a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java index 2fe8ace..a7bd5fb 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java @@ -8,43 +8,46 @@ public class Shop { @DatabaseField(generatedId = true) private int id; - @DatabaseField + @DatabaseField(canBeNull = false) private String server; - @DatabaseField + @DatabaseField(canBeNull = false) private String owner; - @DatabaseField(columnName = "owner_type") + @DatabaseField(columnName = "owner_type", canBeNull = false) private String ownerType; - @DatabaseField - private String type; + @DatabaseField(columnName = "price_sell", canBeNull = false) + private String priceSell; - @DatabaseField - private float price; + @DatabaseField(columnName = "price_buy", canBeNull = false) + private float priceBuy; @DatabaseField private int stock; @DatabaseField + private int space; + + @DatabaseField(canBeNull = false) private int x; - @DatabaseField + @DatabaseField(canBeNull = false) private int y; - @DatabaseField + @DatabaseField(canBeNull = false) private int z; - @DatabaseField + @DatabaseField(canBeNull = false) private int world; - @DatabaseField(columnName = "storage_x") + @DatabaseField(columnName = "storage_x", canBeNull = false) private int storageX; - @DatabaseField(columnName = "storage_y") + @DatabaseField(columnName = "storage_y", canBeNull = false) private int storageY; - @DatabaseField(columnName = "storage_z") + @DatabaseField(columnName = "storage_z", canBeNull = false) 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 index 4fa4eb4..9ec89b6 100644 --- a/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Transaction.java +++ b/src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Transaction.java @@ -2,36 +2,46 @@ package xyz.soukup.mineconomiaCoreV2.variables; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; +import org.bukkit.entity.Player; +import java.sql.SQLException; import java.util.Date; +import static xyz.soukup.mineconomiaCoreV2.database.DatabaseUtil.transactionDao; + @DatabaseTable(tableName = "transactions") public class Transaction { @DatabaseField(generatedId = true) private int id; - @DatabaseField + @DatabaseField(canBeNull = false) private Date date; - @DatabaseField + @DatabaseField(canBeNull = false) private String type; - @DatabaseField + @DatabaseField(canBeNull = false) private float amount; - @DatabaseField + @DatabaseField(canBeNull = false) private String sender; - @DatabaseField(columnName = "sender_type") + @DatabaseField(columnName = "sender_type", canBeNull = false) private String senderType; - @DatabaseField + @DatabaseField(canBeNull = false) private String receiver; - @DatabaseField(columnName = "receiver_type") + @DatabaseField(columnName = "receiver_type", canBeNull = false) private String receiverType; + @DatabaseField + private String s1; + + @DatabaseField + private String s2; + public int getId() { return id; } @@ -96,5 +106,123 @@ public class Transaction { this.receiverType = receiverType; } + public String getS1(){ + return s1; + } + + public void setS1(String s1){ + this.s1 = s1; + } + + public String getS2(){ + return s2; + } + + public void setS2(String s2){ + this.s2 = s2; + } + + public Boolean senderHasEnough() throws SQLException { + switch (this.senderType){ + case "server": + return true; + case "group": + Group group = Group.getGroup(this.sender); + + if (group == null){ + return false; + } + + return group.getMoney() >= this.amount; + + case "player": + PlayerData playerData = PlayerData.getPlayerData(this.sender); + + if (playerData == null){ + return false; + } + + return playerData.getMoney() >= this.amount; + + default: + return false; + + + } + } + + public void process() throws SQLException { + + float money; + + switch (this.senderType){ + case "server": + break; + case "player": + PlayerData playerData = PlayerData.getPlayerData(this.sender); + money = playerData.getMoney(); + playerData.setMoney(money - amount); + playerData.save(); + break; + case "group": + Group group = Group.getGroup(this.sender); + money = group.getMoney(); + group.setMoney(money - amount); + group.save(); + } + + switch (this.receiverType){ + case "server": + break; + case "player": + PlayerData playerData = PlayerData.getPlayerData(this.receiver); + money = playerData.getMoney(); + playerData.setMoney(money + amount); + playerData.save(); + break; + case "group": + Group group = Group.getGroup(this.receiver); + money = group.getMoney(); + group.setMoney(money + amount); + group.save(); + } + + this.setDate(new Date()); + + transactionDao.create(this); + } + + public Boolean processIfSenderHasEnough() throws SQLException { + if (this.senderHasEnough()){ + this.process(); + return true; + } + return false; + }; + + public static Transaction prepareTransaction(String sender, String senderType, String receiver, String receiverType, Float amount, String type){ + Transaction transaction = new Transaction(); + + transaction.setSender(sender); + transaction.setSenderType(senderType); + transaction.setReceiver(receiver); + transaction.setReceiverType(receiverType); + transaction.setAmount(amount); + transaction.setType(type); + + return transaction; + } + + public static Transaction prepareTransaction(String sender, String senderType, String receiver, String receiverType, Float amount, String type, String s1){ + Transaction transaction = prepareTransaction(sender, senderType, receiver, receiverType, amount, type); + transaction.setS1(s1); + return transaction; + } + public static Transaction prepareTransaction(String sender, String senderType, String receiver, String receiverType, Float amount, String type, String s1, String s2){ + Transaction transaction = prepareTransaction(sender, senderType, receiver, receiverType, amount, type, s1); + transaction.setS2(s2); + return transaction; + } + }