Compare commits

...

3 Commits

Author SHA1 Message Date
jakub 8f8d7b576b Merge pull request 'transakce' (#17) from transakce into master 1 year ago
jakub db73025bfb TRANSAKCE 1 year ago
jakub 886a17621e TRANSAKCE 1 year ago
  1. 2
      src/main/java/xyz/soukup/mineconomiaCoreV2/MineconomiaCoreV2.java
  2. 89
      src/main/java/xyz/soukup/mineconomiaCoreV2/commands/admin.java
  3. 21
      src/main/java/xyz/soukup/mineconomiaCoreV2/commands/money.java
  4. 11
      src/main/java/xyz/soukup/mineconomiaCoreV2/database/DatabaseUtil.java
  5. 3
      src/main/java/xyz/soukup/mineconomiaCoreV2/events/PlayerInit.java
  6. 66
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Group.java
  7. 41
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/GroupMembership.java
  8. 8
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Island.java
  9. 48
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/PlayerData.java
  10. 29
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Shop.java
  11. 150
      src/main/java/xyz/soukup/mineconomiaCoreV2/variables/Transaction.java
  12. 4
      src/main/resources/lang/czech.yml
  13. 12
      src/main/resources/plugin.yml

@ -24,8 +24,6 @@ public final class MineconomiaCoreV2 extends JavaPlugin {
private static MineconomiaCoreV2 instance; private static MineconomiaCoreV2 instance;
public static HashMap<Player, PlayerData> playersData = new HashMap<>();
@Override @Override
public void onEnable() { public void onEnable() {
// Plugin startup logic // Plugin startup logic

@ -1,5 +1,6 @@
package xyz.soukup.mineconomiaCoreV2.commands; package xyz.soukup.mineconomiaCoreV2.commands;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -12,8 +13,10 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import xyz.soukup.mineconomiaCoreV2.tools.LangManager; import xyz.soukup.mineconomiaCoreV2.tools.LangManager;
import xyz.soukup.mineconomiaCoreV2.tools.PDC; import xyz.soukup.mineconomiaCoreV2.tools.PDC;
import xyz.soukup.mineconomiaCoreV2.variables.Transaction;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException;
import java.util.List; import java.util.List;
import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.config; import static xyz.soukup.mineconomiaCoreV2.core.sharedValues.config;
@ -22,42 +25,31 @@ public class admin implements TabExecutor {
@Override @Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) { public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
if (commandSender instanceof Player) {
Player player = (Player) commandSender;
if (!player.isOp() || strings.length == 0) { if (!commandSender.isOp()) {
LangManager.message(commandSender, "error.command.no-permissions");
LangManager.message(commandSender, "error.command.admin.setruleritem.no-permissions"); return false;
return true;
} }
if (strings[0].equalsIgnoreCase("setRulerItem")) { if (strings.length == 0){
LangManager.message(commandSender, "error.command.not-enough-arguments");
ItemStack playerHand = player.getInventory().getItemInMainHand(); }
if (playerHand.getType() == Material.AIR) {
LangManager.message(commandSender, "error.command.admin.setruleritem.invalid-item"); switch (strings[0].toLowerCase()){
case "setruleritem":
setRulerItem(commandSender);
return true;
case "givemoney":
try {
giveMoney(commandSender, strings);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return true; return true;
}
ItemMeta meta = playerHand.getItemMeta();
PDC.WriteItemMetaPDC(meta, "ruler", PersistentDataType.INTEGER, 1);
playerHand.setItemMeta(meta);
config.set("special-items.ruler", playerHand);
try {
config.save("config.yml");
} catch (IOException e) {
throw new RuntimeException(e);
}
LangManager.message(commandSender, "success.command.admin.setruleritem");
return true;
} }
}
return false; return false;
} }
@ -65,9 +57,48 @@ public class admin implements TabExecutor {
public @Nullable List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) { public @Nullable List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
if (strings.length == 1 && commandSender.isOp()) { if (strings.length == 1 && commandSender.isOp()) {
return List.of("setRulerItem"); return List.of("setRulerItem", "giveMoney");
} }
return List.of(); return List.of();
} }
private void giveMoney(CommandSender commandSender, String[] strings) throws SQLException {
if (strings.length < 3){
LangManager.message(commandSender, "error.command.not-enough-arguments");
return;
}
Float amount = Float.valueOf(strings[2]);
Transaction.prepareTransaction("server", "server", strings[1], "player", amount, "admin").process();
LangManager.message(commandSender, "success.command.admin.give-money");
}
private void setRulerItem(CommandSender commandSender){
Player player = (Player) commandSender;
ItemStack playerHand = player.getInventory().getItemInMainHand();
if (playerHand.getType() == Material.AIR) {
LangManager.message(commandSender, "error.command.admin.setruleritem.invalid-item");
return;
}
ItemMeta meta = playerHand.getItemMeta();
assert meta != null;
PDC.WriteItemMetaPDC(meta, "ruler", PersistentDataType.INTEGER, 1);
playerHand.setItemMeta(meta);
config.set("special-items.ruler", playerHand);
try {
config.save("config.yml");
} catch (IOException e) {
throw new RuntimeException(e);
}
LangManager.message(commandSender, "success.command.admin.setruleritem");
}
} }

@ -0,0 +1,21 @@
package xyz.soukup.mineconomiaCoreV2.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class money implements TabExecutor {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
return false;
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
return List.of();
}
}

@ -6,10 +6,7 @@ import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.jdbc.JdbcConnectionSource; import com.j256.ormlite.jdbc.JdbcConnectionSource;
import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils; import com.j256.ormlite.table.TableUtils;
import xyz.soukup.mineconomiaCoreV2.variables.Island; import xyz.soukup.mineconomiaCoreV2.variables.*;
import xyz.soukup.mineconomiaCoreV2.variables.PlayerData;
import xyz.soukup.mineconomiaCoreV2.variables.Shop;
import xyz.soukup.mineconomiaCoreV2.variables.Transaction;
import java.sql.SQLException; import java.sql.SQLException;
@ -21,6 +18,8 @@ public class DatabaseUtil {
public static Dao<Island, Integer> islandDao; public static Dao<Island, Integer> islandDao;
public static Dao<Shop, Integer> shopDao; public static Dao<Shop, Integer> shopDao;
public static Dao<Transaction, Integer> transactionDao; public static Dao<Transaction, Integer> transactionDao;
public static Dao<Group, Integer> groupDao;
public static Dao<GroupMembership, Integer> groupMembershipDao;
public static ConnectionSource getConnectionSource() throws SQLException { public static ConnectionSource getConnectionSource() throws SQLException {
String host = config.getString("database.host"); String host = config.getString("database.host");
@ -39,6 +38,8 @@ public class DatabaseUtil {
TableUtils.createTableIfNotExists(connectionSource, Transaction.class); TableUtils.createTableIfNotExists(connectionSource, Transaction.class);
TableUtils.createTableIfNotExists(connectionSource, Island.class); TableUtils.createTableIfNotExists(connectionSource, Island.class);
TableUtils.createTableIfNotExists(connectionSource, Shop.class); TableUtils.createTableIfNotExists(connectionSource, Shop.class);
TableUtils.createTableIfNotExists(connectionSource, Group.class);
TableUtils.createTableIfNotExists(connectionSource, GroupMembership.class);
} }
public static void daoInit(ConnectionSource connectionSource) throws SQLException { public static void daoInit(ConnectionSource connectionSource) throws SQLException {
@ -46,6 +47,8 @@ public class DatabaseUtil {
playerDataDao = DaoManager.createDao(connectionSource, PlayerData.class); playerDataDao = DaoManager.createDao(connectionSource, PlayerData.class);
shopDao = DaoManager.createDao(connectionSource, Shop.class); shopDao = DaoManager.createDao(connectionSource, Shop.class);
transactionDao = DaoManager.createDao(connectionSource, Transaction.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 { public static void databaseInit() throws SQLException {

@ -10,9 +10,8 @@ import xyz.soukup.mineconomiaCoreV2.variables.PlayerData;
import java.sql.SQLException; 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.database.DatabaseUtil.playerDataDao;
import static xyz.soukup.mineconomiaCoreV2.variables.PlayerData.playersData;
public class PlayerInit implements Listener { public class PlayerInit implements Listener {

@ -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<Group, Integer> queryBuilder = groupDao.queryBuilder();
return queryBuilder.where().eq("name", name).queryForFirst();
}
public void save() throws SQLException {
groupDao.update(this);
}
}

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

@ -9,16 +9,16 @@ public class Island {
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@DatabaseField @DatabaseField(canBeNull = false)
private String server; private String server;
@DatabaseField @DatabaseField(canBeNull = false)
private String name; private String name;
@DatabaseField @DatabaseField(canBeNull = false)
private String owner; private String owner;
@DatabaseField @DatabaseField(canBeNull = false)
private String world; private String world;
@DatabaseField(columnName = "size_x") @DatabaseField(columnName = "size_x")

@ -3,26 +3,37 @@ package xyz.soukup.mineconomiaCoreV2.variables;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; 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 //Definování Member classy pro databázi a další manipulace
@DatabaseTable(tableName = "players") @DatabaseTable(tableName = "players")
public class PlayerData { public class PlayerData {
public static HashMap<Player, PlayerData> playersData = new HashMap<>();
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@DatabaseField(unique = true) @DatabaseField(unique = true, canBeNull = false)
private String nickname; private String nickname;
@DatabaseField @DatabaseField
private int online; private int online;
@DatabaseField @DatabaseField(canBeNull = false)
private float money; private float money;
@DatabaseField
private String discord;
public int getId() { public int getId() {
return id; return id;
@ -56,7 +67,38 @@ public class PlayerData {
this.money = money; 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);
} }

@ -8,43 +8,46 @@ public class Shop {
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@DatabaseField @DatabaseField(canBeNull = false)
private String server; private String server;
@DatabaseField @DatabaseField(canBeNull = false)
private String owner; private String owner;
@DatabaseField(columnName = "owner_type") @DatabaseField(columnName = "owner_type", canBeNull = false)
private String ownerType; private String ownerType;
@DatabaseField @DatabaseField(columnName = "price_sell", canBeNull = false)
private String type; private String priceSell;
@DatabaseField @DatabaseField(columnName = "price_buy", canBeNull = false)
private float price; private float priceBuy;
@DatabaseField @DatabaseField
private int stock; private int stock;
@DatabaseField @DatabaseField
private int space;
@DatabaseField(canBeNull = false)
private int x; private int x;
@DatabaseField @DatabaseField(canBeNull = false)
private int y; private int y;
@DatabaseField @DatabaseField(canBeNull = false)
private int z; private int z;
@DatabaseField @DatabaseField(canBeNull = false)
private int world; private int world;
@DatabaseField(columnName = "storage_x") @DatabaseField(columnName = "storage_x", canBeNull = false)
private int storageX; private int storageX;
@DatabaseField(columnName = "storage_y") @DatabaseField(columnName = "storage_y", canBeNull = false)
private int storageY; private int storageY;
@DatabaseField(columnName = "storage_z") @DatabaseField(columnName = "storage_z", canBeNull = false)
private int storageZ; private int storageZ;

@ -2,36 +2,46 @@ package xyz.soukup.mineconomiaCoreV2.variables;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.entity.Player;
import java.sql.SQLException;
import java.util.Date; import java.util.Date;
import static xyz.soukup.mineconomiaCoreV2.database.DatabaseUtil.transactionDao;
@DatabaseTable(tableName = "transactions") @DatabaseTable(tableName = "transactions")
public class Transaction { public class Transaction {
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@DatabaseField @DatabaseField(canBeNull = false)
private Date date; private Date date;
@DatabaseField @DatabaseField(canBeNull = false)
private String type; private String type;
@DatabaseField @DatabaseField(canBeNull = false)
private float amount; private float amount;
@DatabaseField @DatabaseField(canBeNull = false)
private String sender; private String sender;
@DatabaseField(columnName = "sender_type") @DatabaseField(columnName = "sender_type", canBeNull = false)
private String senderType; private String senderType;
@DatabaseField @DatabaseField(canBeNull = false)
private String receiver; private String receiver;
@DatabaseField(columnName = "receiver_type") @DatabaseField(columnName = "receiver_type", canBeNull = false)
private String receiverType; private String receiverType;
@DatabaseField
private String s1;
@DatabaseField
private String s2;
public int getId() { public int getId() {
return id; return id;
} }
@ -96,5 +106,131 @@ public class Transaction {
this.receiverType = receiverType; 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;
}
public static Transaction prepareTransaction(Player senderPlayer, Player receiverPlayer, Float amount){
String sender = senderPlayer.getDisplayName();
String receiver = receiverPlayer.getDisplayName();
return prepareTransaction(sender, "player", receiver, "player", amount, "playertoplayer");
}
} }

@ -5,6 +5,8 @@ error:
wrong-argument-count: "&cNesprávný počet parametrů!" wrong-argument-count: "&cNesprávný počet parametrů!"
no-permissions: "&cNemáš oprávnění!" no-permissions: "&cNemáš oprávnění!"
invalid-player: "&cTento hráč neexistuje!" invalid-player: "&cTento hráč neexistuje!"
invalid-arguments: "&cChybně zadané parametry!"
not-enough-arguments: "&cNedostatek parametrů!"
tpw: tpw:
invalid-world: "&cTento svět neexistuje!" invalid-world: "&cTento svět neexistuje!"
already-in-world-self: "&cJiž jsi v tomto světě" already-in-world-self: "&cJiž jsi v tomto světě"
@ -12,7 +14,7 @@ error:
admin: admin:
setruleritem: setruleritem:
invalid-item: "&cNedržíš nic v ruce!" invalid-item: "&cNedržíš nic v ruce!"
no-permissions: "&cNemáš oprávnění!"
success: success:
command: command:
tpw: tpw:

@ -5,9 +5,17 @@ api-version: '1.21'
commands: commands:
tpw: tpw:
description: "Teleportuje tě do jiného světa" description: "Teleportuje tě do jiného světa"
usage: /<command> [arguments] usage: /tpw <world> [player]
tractor: tractor:
description: "blieat" description: "blieat"
admin: admin:
description: "Utility command pro adminy" description: "Utility command pro adminy"
usage: /<command> [arguments] usage: /admin <util>
money:
description: "check current money balance"
usage: /money [player]
aliases: [penize, peníze, balance]
pay:
description: "let go of your money :D"
usage: /pay <player name/group> [group name] <amount>
aliases: [zaplatit, platit]

Loading…
Cancel
Save