From d1b691cbf08db8c9e2633e8920e4a31ef4d48df1 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 9 Jun 2025 22:12:37 +0200 Subject: [PATCH] PDC Upgrade --- .../xyz/soukup/ecoCraftCore/EcoCraftCore.java | 2 + .../ecoCraftCore/commands/MoneyCommand.java | 137 ++++++++++++++++++ .../ecoCraftCore/objects/Transaction.java | 27 +++- 3 files changed, 159 insertions(+), 7 deletions(-) create mode 100644 src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java diff --git a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java index 073d520..34f86dc 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java @@ -9,6 +9,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; +import xyz.soukup.ecoCraftCore.commands.MoneyCommand; import xyz.soukup.ecoCraftCore.commands.RulerCommand; import xyz.soukup.ecoCraftCore.commands.ShopCommand; import xyz.soukup.ecoCraftCore.commands.TransactionCommand; @@ -80,6 +81,7 @@ public final class EcoCraftCore extends JavaPlugin { lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(TransactionCommand.createCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(ShopCommand.createCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(RulerCommand.createCommand().build())); + lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MoneyCommand.createCommand().build())); } private void registerEvents(){ diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java new file mode 100644 index 0000000..f94154c --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java @@ -0,0 +1,137 @@ +package xyz.soukup.ecoCraftCore.commands; + +import com.mojang.brigadier.arguments.FloatArgumentType; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import io.papermc.paper.command.brigadier.CommandSourceStack; +import io.papermc.paper.command.brigadier.Commands; +import io.papermc.paper.command.brigadier.argument.ArgumentTypes; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import xyz.soukup.ecoCraftCore.objects.Account; +import xyz.soukup.ecoCraftCore.objects.Transaction; + +public class MoneyCommand { + public static LiteralArgumentBuilder createCommand() { + return Commands.literal("money") + .then(Commands.literal("send") + .requires(source -> source.getSender() instanceof Player) + .then(Commands.argument("player", ArgumentTypes.player()) + .then(Commands.argument("amount", FloatArgumentType.floatArg(0.1F)) + .executes(MoneyCommand::sendMoney)))) + .then(Commands.literal("give") + .requires(source -> source.getExecutor().hasPermission("ecc.money.give")) + .then(Commands.argument("amount", FloatArgumentType.floatArg(0.1F)) + .requires(source -> source.getSender() instanceof Player) + .executes(MoneyCommand::giveMoneySelf)) + .then(Commands.argument("player", ArgumentTypes.player()) + .then(Commands.argument("amount", FloatArgumentType.floatArg(0.1F)) + .executes(MoneyCommand::giveMoneyPlayer))) + .then(Commands.argument("type", StringArgumentType.word()) + .then(Commands.argument("owner", StringArgumentType.word()) + .then(Commands.argument("amount", FloatArgumentType.floatArg(0.1F)) + .executes(MoneyCommand::giveMoneyOther))))) + .then(Commands.literal("remove") + .requires(source -> source.getExecutor().hasPermission("ecc.money.remove")) + .then(Commands.argument("amount", FloatArgumentType.floatArg(0.1F)) + .requires(source -> source.getSender() instanceof Player) + .executes(MoneyCommand::removeMoneySelf)) + .then(Commands.argument("player", ArgumentTypes.player()) + .then(Commands.argument("amount", FloatArgumentType.floatArg(0.1F)) + .executes(MoneyCommand::removeMoneyPlayer))) + .then(Commands.argument("type", StringArgumentType.word()) + .then(Commands.argument("owner", StringArgumentType.word()) + .then(Commands.argument("amount", FloatArgumentType.floatArg(0.1F)) + .executes(MoneyCommand::removeMoneyOther))))) + .executes(MoneyCommand::getBalance); + + } + + private static int getBalance(CommandContext context){ + if (!(context.getSource().getSender() instanceof Player player)){ + return 0; + } + Account account = Account.getOrCreate(player); + player.sendPlainMessage(String.format("Tvuj balanc: %.2f", account.getBalance())); + return 1; + + } + + + private static int sendMoney(CommandContext context){ + Player sender = (Player) context.getSource().getSender(); + Player receiver = context.getArgument("player", Player.class); + Float amount = context.getArgument("amount", Float.class); + + Account senderAccount = Account.getOrCreate(sender); + + if (amount > senderAccount.getBalance()){ + sender.sendPlainMessage("nemáš mony!"); + return 0; + } + + Transaction transaction = new Transaction(amount,"player", sender.getName(), "player", receiver.getName(), "player"); + transaction.process(); + + return 1; + } + + private static int giveMoneyPlayer(CommandContext context){ + CommandSender commandSender = context.getSource().getSender(); + Player receiver = context.getArgument("player", Player.class); + Float amount = context.getArgument("amount", Float.class); + + Transaction transaction = new Transaction(amount,"admin", commandSender.getName(), "player", receiver.getName(), "admin"); + transaction.process(); + + return 1; + } + + private static int giveMoneySelf(CommandContext context){ + Player player = (Player) context.getSource().getSender(); + Float amount = context.getArgument("amount", Float.class); + + Transaction transaction = new Transaction(amount,"admin", player.getName(), "player", player.getName(), "admin"); + transaction.process(); + return 1; + } + + private static int giveMoneyOther(CommandContext context){ + CommandSender commandSender = context.getSource().getSender(); + Float amount = context.getArgument("amount", Float.class); + String owner = context.getArgument("owner", String.class); + String type = context.getArgument("type", String.class); + + Transaction transaction = new Transaction(amount,"admin", commandSender.getName(), type, owner, "admin"); + transaction.process(); + return 1; + } + private static int removeMoneyPlayer(CommandContext context){ + CommandSender commandSender = context.getSource().getSender(); + Player sender = context.getArgument("player", Player.class); + Float amount = context.getArgument("amount", Float.class); + + Transaction transaction = new Transaction(amount, "player", sender.getName(),"admin", commandSender.getName(), "admin"); + transaction.process(); + return 1; + } + private static int removeMoneySelf(CommandContext context){ + Player player = (Player) context.getSource().getSender(); + Float amount = context.getArgument("amount", Float.class); + + Transaction transaction = new Transaction(amount,"player", player.getName(),"admin", player.getName(), "admin"); + transaction.process(); + return 1; + } + private static int removeMoneyOther(CommandContext context){ + CommandSender commandSender = context.getSource().getSender(); + Float amount = context.getArgument("amount", Float.class); + String owner = context.getArgument("owner", String.class); + String type = context.getArgument("type", String.class); + + Transaction transaction = new Transaction(amount, type, owner,"admin", commandSender.getName(), "admin"); + transaction.process(); + return 1; + } +} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/Transaction.java b/src/main/java/xyz/soukup/ecoCraftCore/objects/Transaction.java index 3db2425..3ce8e39 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/objects/Transaction.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/objects/Transaction.java @@ -7,6 +7,7 @@ import xyz.soukup.ecoCraftCore.utilities.DaoRegistry; import java.sql.SQLException; import java.sql.Timestamp; +import java.util.Objects; @DatabaseTable(tableName = "transactions") public class Transaction { @@ -39,7 +40,9 @@ public class Transaction { private String secondaryInfo; @DatabaseField(canBeNull = false) - private Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + private final Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + + private Boolean processed = false; public Transaction() { @@ -55,14 +58,24 @@ public class Transaction { } public void process(){ - Account senderAccount = Account.getOrCreate(this.senderType, this.sender); - Account receiverAccount = Account.getOrCreate(this.receiverType, this.receiver); - senderAccount.withdraw(this.amount); - receiverAccount.deposit(this.amount); + if (processed){ + return; + } + + this.processed = true; - senderAccount.save(); - receiverAccount.save(); + if(!Objects.equals(this.senderType, "admin")){ + Account senderAccount = Account.getOrCreate(this.senderType, this.sender); + senderAccount.withdraw(this.amount); + senderAccount.save(); + } + + if (!Objects.equals(this.receiverType, "admin")){ + Account receiverAccount = Account.getOrCreate(this.receiverType, this.receiver); + receiverAccount.deposit(this.amount); + receiverAccount.save(); + } save(); }