diff --git a/src/main/java/jesse/keeblarcraft/BankMgr/BankManager.java b/src/main/java/jesse/keeblarcraft/BankMgr/BankManager.java index ccf6a31..e73077e 100644 --- a/src/main/java/jesse/keeblarcraft/BankMgr/BankManager.java +++ b/src/main/java/jesse/keeblarcraft/BankMgr/BankManager.java @@ -13,7 +13,7 @@ import net.minecraft.server.PlayerManager; import net.minecraft.server.network.ServerPlayerEntity; public class BankManager { - BankManagerFile bankInfo = new BankManagerFile(); // not sure why we make another one but i guess so we + BankManagerFile bankInfo = new BankManagerFile(); ConfigManager config = new ConfigManager(); // for read and write privs CommonServerUtils commonServerUtils = new CommonServerUtils(); @@ -97,153 +97,110 @@ public class BankManager { } return ret; } - //https://maven.fabricmc.net/docs/fabric-api-0.34.8+1.17/net/fabricmc/fabric/api/networking/v1/PlayerLookup.html maybe this for getting the players im still not sure - public void SetBalance(Integer newBalance, String reason, String otherParty) { - Integer transactionNumber = bankInfo.bank.size(); - bankInfo.bank.put(transactionNumber.toString(), - new BankManagerMetaData(newBalance, reason, newBalance, otherParty, 0)); - FlashConfig(PlayerListNameChecker(otherParty)); + public void SetBalance(long payment, String reason, ServerPlayerEntity otherParty) { + bankInfo.uuid = otherParty.getUuidAsString(); + bankInfo.bank.put(bankInfo.uuid, new BankManagerMetaData(payment, reason, payment, "SERVER", 0)); + FlashConfig(bankInfo.uuid); } - public void AddMoney(String reason, long payment, String otherParty) { + public void AddMoney(ServerPlayerEntity otherParty, long payment, ServerPlayerEntity player, String reason) { + bankInfo.uuid = otherParty.getUuidAsString(); + bankInfo.bank = DoesBankAccountExist(otherParty); if (bankInfo.bank.size() > 0) { for (Entry entry : bankInfo.bank.entrySet()) { entry.getValue().balance += payment; entry.getValue().reason = "SERVER: " + reason; entry.getValue().payment = payment; - entry.getValue().otherParty = otherParty; + entry.getValue().otherParty = "SERVER"; entry.getValue().time = 0; } } else { - bankInfo.bank.put(bankInfo.uuid, new BankManagerMetaData(payment, reason, payment, otherParty, 0)); + bankInfo.bank.put(bankInfo.uuid, new BankManagerMetaData(payment, reason, payment, "SERVER", 0)); } - FlashConfig(PlayerListNameChecker(otherParty)); + FlashConfig(otherParty.getUuidAsString()); } - public void SubtractBalance(String reason, long payment, String otherParty) { - if (bankInfo.bank.size() > 0) { + public void SubtractBalance(String reason, long payment, ServerPlayerEntity otherParty) { + bankInfo.uuid = otherParty.getUuidAsString(); + bankInfo.bank = DoesBankAccountExist(otherParty); for (Entry entry : bankInfo.bank.entrySet()) { entry.getValue().balance -= payment;//not working? entry.getValue().reason = "SERVER: " + reason; entry.getValue().payment = payment; - entry.getValue().otherParty = otherParty; + entry.getValue().otherParty = "SERVER"; entry.getValue().time = 0; } - } else { - bankInfo.bank.put(bankInfo.uuid, new BankManagerMetaData(0, reason, payment, otherParty, 0)); - } - - FlashConfig(PlayerListNameChecker(otherParty)); + FlashConfig(bankInfo.uuid); } - public void Wire(String reason, long payment, String otherParty) { - if (bankInfo.bank.size() > 0) { - for (Entry entry : bankInfo.bank.entrySet()) { + public void Wire(ServerPlayerEntity otherParty, long payment, String reason, ServerPlayerEntity sender) { + + BankManagerFile sendersBankInfo = new BankManagerFile(); + BankManagerFile otherPartyBankInfo = new BankManagerFile(); + sendersBankInfo.uuid = sender.getUuidAsString(); + otherPartyBankInfo.uuid = otherParty.getUuidAsString(); + sendersBankInfo.bank = DoesBankAccountExist(sender); + otherPartyBankInfo.bank = DoesBankAccountExist(otherParty); + + + //check to make sure they can afford to send the money + for (Entry entry : sendersBankInfo.bank.entrySet()) { + if (entry.getValue().balance > payment) { entry.getValue().balance -= payment; entry.getValue().reason = reason; entry.getValue().payment = payment; - entry.getValue().otherParty = otherParty; + entry.getValue().otherParty = otherParty.getUuidAsString(); entry.getValue().time = 0; - - if (payment <= 0) { - // add a error for the PLAYER not the server - return; - } - } - // make a server instance - MinecraftServer server = CommonServerUtils.GetServerInstance(); - String[] playerList = server.getPlayerNames(); - //NOT SURE IF THIS FOR LOOP IS ONE OFF COULD POSSIBLEY BE SO IF NO ONE IS GETTING MONEY DOUBLE CHECK FOR LOOP - for (int i = 0; i < playerList.length; i++) { - System.out.println(ChatUtil.ColoredString("PLAYERS: " + playerList, CONSOLE_COLOR.YELLOW)); - if (playerList[i] == otherParty) { - System.out.println(ChatUtil.ColoredString("Found Player: " + otherParty, CONSOLE_COLOR.GREEN)); - // we will use getuuidbyname then set the other VALID players bank BE SURE TO - // MAKE THEM A BANK FIRST IF THEY DONT HAVE ONE fortnite forever - if (config.GetFile("bank/" + GetUuidByName(server, otherParty) + ".json").size() < 1) { - BankManagerFile newBankInfo = new BankManagerFile(); - BankManagerMetaData newBank = new BankManagerMetaData(0, "Account Created", 0, "Server", 0); - newBankInfo.bank.put(GetUuidByName(server, otherParty).toString(), newBank); - try { - config.WriteToJsonFile("bank/" + newBankInfo.uuid + ".json", newBankInfo); - } catch (FILE_WRITE_EXCEPTION e) { - System.out.println(ChatUtil.ColoredString("Could not flash notes configuration file", CONSOLE_COLOR.RED)); - return; - } - } - - //since the other player has a account now and we have access to it we can start fucking around - BankManagerFile newBankInfo = new BankManagerFile(); - newBankInfo = config.GetJsonObjectFromFile("bank/" + GetUuidByName(server, otherParty) + ".json", BankManagerFile.class); - // for now we will only use adding valance and not subtracting since that dosent make any sense - for (Entry entry : newBankInfo.bank.entrySet()) { - entry.getValue().balance += payment; - entry.getValue().reason = reason; - entry.getValue().payment = payment; - entry.getValue().otherParty = otherParty; - entry.getValue().time = 0; - } - //cannot use regular flash config since the hard coded values need to add agurment for the uuid - //needs to be inside the player check - FlashConfig(newBankInfo.uuid); - try { - config.WriteToJsonFile("bank/" + newBankInfo.uuid + ".json", bankInfo); - } catch (FILE_WRITE_EXCEPTION e) { - System.out.println(ChatUtil.ColoredString("Could not flash notes configuration file", CONSOLE_COLOR.RED)); - } - - } else { - System.out.println(ChatUtil.ColoredString("Player Not Found: " + otherParty, CONSOLE_COLOR.RED)); - return; - } - } - } else { - System.out.println(ChatUtil.ColoredString("You need to finance better", CONSOLE_COLOR.RED)); + } else { + System.out.println(ChatUtil.ColoredString("You ain't the goverment: " + otherParty, CONSOLE_COLOR.RED)); return; - } - } - - String GetUuidByName(MinecraftServer server, String playerName) { - PlayerManager playerManager = server.getPlayerManager(); - ServerPlayerEntity player = playerManager.getPlayer(playerName); - if (player.getUuid() != null) { - return player.getUuidAsString(); - } else { - return ""; - } - } - - String PlayerListNameChecker(String otherParty) { - MinecraftServer server = CommonServerUtils.GetServerInstance(); - String[] playerList = server.getPlayerNames(); - - for (int i = 0; i < playerList.length; i++) { - System.out.println(ChatUtil.ColoredString("PLAYERS: " + playerList, CONSOLE_COLOR.YELLOW)); - if (playerList[i] == otherParty) { - System.out.println(ChatUtil.ColoredString("Found Player: " + otherParty, CONSOLE_COLOR.GREEN)); - // we will use getuuidbyname then set the other VALID players bank BE SURE TO - // MAKE THEM A BANK FIRST IF THEY DONT HAVE ONE fortnite forever - if (config.GetFile("bank/" + GetUuidByName(server, otherParty) + ".json").size() < 1) { - BankManagerFile newBankInfo = new BankManagerFile(); - BankManagerMetaData newBank = new BankManagerMetaData(0, "Account Created", 0, "Server", 0); - newBankInfo.bank.put(GetUuidByName(server, otherParty).toString(), newBank); - try { - config.WriteToJsonFile("bank/" + newBankInfo.uuid + ".json", newBankInfo); - } catch (FILE_WRITE_EXCEPTION e) { - System.out.println(ChatUtil.ColoredString("Could not flash notes configuration file", CONSOLE_COLOR.RED)); - return ""; - } - } - else { - System.out.println(ChatUtil.ColoredString("Bank Account Found", CONSOLE_COLOR.GREEN)); - } - return GetUuidByName(server, otherParty); } } - System.out.println(ChatUtil.ColoredString("For Loop condition bypassed Null Playerlist or Null Server instance", CONSOLE_COLOR.RED)); - return ""; + for (Entry entry : otherPartyBankInfo.bank.entrySet()) { + entry.getValue().balance += payment; + entry.getValue().reason = reason; + entry.getValue().payment = payment; + entry.getValue().otherParty = otherParty.getUuidAsString(); + entry.getValue().time = 0; + } + //needs to be inside the player check flash config has a write check + FlashConfig(otherPartyBankInfo.uuid); + FlashConfig(sendersBankInfo.uuid); + } + + public HashMap DoesBankAccountExist(ServerPlayerEntity otherParty) { + Boolean existingFile = false; + try { + bankInfo.uuid = otherParty.getUuidAsString(); + bankInfo = config.GetJsonObjectFromFile("bank/" + otherParty.getUuidAsString() + ".json", BankManagerFile.class); + existingFile = true; + } catch (Exception e) { + // Do nothing. This means the file does not exist + } + if (!existingFile) { + System.out.println("Procced no account exisiting"); + BankManagerFile newBankInfo = new BankManagerFile(); + BankManagerMetaData newBank = new BankManagerMetaData(0, "Account Created", 0, "Server", 0); + newBankInfo.uuid = otherParty.getUuidAsString(); + newBankInfo.bank.put(newBankInfo.uuid, newBank); + try { + config.WriteToJsonFile("bank/" + newBankInfo.uuid + ".json", newBankInfo); + } catch (FILE_WRITE_EXCEPTION e) { + System.out.println(ChatUtil.ColoredString("Could not flash notes configuration file", CONSOLE_COLOR.RED)); + return newBankInfo.bank; + } + return newBankInfo.bank; + } else { + try { + bankInfo = config.GetJsonObjectFromFile("bank/" + bankInfo.uuid + ".json", BankManagerFile.class); + } catch (Exception e) { + // Do nothing. This means the file does not exist + System.out.println("How did this fail Function: DoesBankAccountExist try catch statement -first if failed incorrectly"); + } + return bankInfo.bank; + } } public void FlashConfig(String uuid) { diff --git a/src/main/java/jesse/keeblarcraft/Commands/BankCommands.java b/src/main/java/jesse/keeblarcraft/Commands/BankCommands.java index 9030c5f..52079b8 100644 --- a/src/main/java/jesse/keeblarcraft/Commands/BankCommands.java +++ b/src/main/java/jesse/keeblarcraft/Commands/BankCommands.java @@ -7,6 +7,7 @@ import com.mojang.brigadier.context.CommandContext; import jesse.keeblarcraft.BankMgr.BankManager; import jesse.keeblarcraft.ConfigMgr.ConfigManager; +import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; @@ -17,68 +18,94 @@ public class BankCommands { ConfigManager config = new ConfigManager(); public void RegisterCommands(){ - // Command: "/getbalance" + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { - dispatcher.register(CommandManager.literal("getbalance") - .executes(context -> GetBalance(context))); - }); + var rootBank = CommandManager.literal("bank").build(); - // Command: "/setbalance || rootSetBalance" - CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { - final var rootSetBalance = dispatcher.register(CommandManager.literal("setbalance") - .then(CommandManager.argument("newBalance", IntegerArgumentType.integer()) - .then(CommandManager.argument("reason", StringArgumentType.string()) - .then(CommandManager.argument("otherParty", StringArgumentType.string()) - .executes(context -> SetBalance( - IntegerArgumentType.getInteger(context, "newBalance"), - StringArgumentType.getString(context, "reason"), - StringArgumentType.getString(context, "otherParty"), - context)))))); + //second layer of tree + var balance = CommandManager.literal("balance").build(); + var wire = CommandManager.literal("wire").build(); - dispatcher.register(CommandManager.literal("setbalance").redirect(rootSetBalance)); - }); + //third layer of tree + var setBalance = CommandManager.literal("setBalance").build(); + var getBalance = CommandManager.literal("getBalance").build(); + var addMoney = CommandManager.literal("addMoney").build(); + var subtractBalance = CommandManager.literal("subtractBalance").build(); - // Command: "/AddMoney" - CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { - dispatcher.register(CommandManager.literal("AddMoney") - .then(CommandManager.argument("reason", StringArgumentType.string()) - .then(CommandManager.argument("payment", LongArgumentType.longArg()) - .then(CommandManager.argument("otherParty", StringArgumentType.string()) - .executes(context -> AddMoney( - StringArgumentType.getString(context, "reason"), - LongArgumentType.getLong(context, "payment"), - StringArgumentType.getString(context, "otherParty"), - context)))))); - }); + var playerArgAdd = CommandManager.argument("otherParty", EntityArgumentType.player()).build(); + var paymentArg = CommandManager.argument("payment", LongArgumentType.longArg()).build(); - // Command: "/subtractbalance || /SubtractBalance" - CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { - final var SubtractBalance = dispatcher.register(CommandManager.literal("subtractbalance") - .then(CommandManager.argument("reason", StringArgumentType.string()) - .then(CommandManager.argument("payment", LongArgumentType.longArg()) - .then(CommandManager.argument("otherParty", StringArgumentType.string()) - .executes(context -> SubtractBalance( - StringArgumentType.getString(context, "reason"), - LongArgumentType.getLong(context, "payment"), - StringArgumentType.getString(context, "otherParty"), - context)))))); + var wireFunction = CommandManager.argument("reason", StringArgumentType.greedyString()) + .executes(context -> Wire + ( + EntityArgumentType.getPlayer(context, "otherParty"), + LongArgumentType.getLong(context, "payment"), + StringArgumentType.getString(context, "reason"), + context) + ) + .build(); - dispatcher.register(CommandManager.literal("subtractbalance").redirect(SubtractBalance)); - }); + var setBalanceFunction = CommandManager.argument("reason", StringArgumentType.greedyString()) + .executes(context -> SetBalance + ( + EntityArgumentType.getPlayer(context, "otherParty"), + LongArgumentType.getLong(context, "payment"), + StringArgumentType.getString(context, "reason"), + context) + ) + .build(); + + var addMoneyFunction = CommandManager.argument("reason", StringArgumentType.greedyString()) + .executes(context -> AddMoney + ( + EntityArgumentType.getPlayer(context, "otherParty"), + LongArgumentType.getLong(context, "payment"), + StringArgumentType.getString(context, "reason"), + context) + ) + .build(); - // Command: "/wire || /sendmoney" - CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { - final var sendmoney = dispatcher.register(CommandManager.literal("wire") - .then(CommandManager.argument("reason", StringArgumentType.string()) - .then(CommandManager.argument("payment", LongArgumentType.longArg()) - .then(CommandManager.argument("otherParty", StringArgumentType.string()) - .executes(context -> Wire( - StringArgumentType.getString(context, "reason"), - LongArgumentType.getLong(context, "payment"), - StringArgumentType.getString(context, "otherParty"), - context)))))); + var subtractMoneyFunction = CommandManager.argument("reason", StringArgumentType.greedyString()) + .executes(context -> SubtractBalance + ( + EntityArgumentType.getPlayer(context, "otherParty"), + LongArgumentType.getLong(context, "payment"), + StringArgumentType.getString(context, "reason"), + context) + ) + .build(); - dispatcher.register(CommandManager.literal("wire").redirect(sendmoney)); + + // Build out the argument tree here + dispatcher.getRoot().addChild(rootBank); + rootBank.addChild(wire); + rootBank.addChild(balance); + + // Subcommands of balance node "/getbalance", [ADMIN->] "/setbalance", "/subtractbalance", "/addmoney" + balance.addChild(getBalance); + balance.addChild(setBalance); + balance.addChild(subtractBalance); + balance.addChild(addMoney); + + //subcommands of wire node "/playernamehere" + wire.addChild(playerArgAdd); + playerArgAdd.addChild(paymentArg); + paymentArg.addChild(wireFunction); + + //subcommands of setBalance + setBalance.addChild(playerArgAdd); + playerArgAdd.addChild(paymentArg); + paymentArg.addChild(setBalanceFunction); + + //subcommands of addMoney + addMoney.addChild(playerArgAdd); + playerArgAdd.addChild(paymentArg); + paymentArg.addChild(addMoneyFunction); + + //subcommands for subtractbalance + subtractBalance.addChild(playerArgAdd); + playerArgAdd.addChild(paymentArg); + paymentArg.addChild(subtractMoneyFunction); }); } @@ -96,28 +123,27 @@ public class BankCommands { } //SetBalance will be a ServerCommand only Perm level Op - public Integer SetBalance(Integer newBalance, String reason, String otherParty, CommandContext context) { + public Integer SetBalance(ServerPlayerEntity otherParty, long payment, String reason, CommandContext context) { Integer ret = -1; if (context.getSource().hasPermissionLevel(1)) { - ServerPlayerEntity player = context.getSource().getPlayer(); - BankManager playerBank = new BankManager(player.getUuidAsString()); - playerBank.SetBalance(newBalance, reason, otherParty); - player.sendMessage(Text.literal(String.valueOf(playerBank.GetBalance()))); + BankManager playerBank = new BankManager(otherParty.getUuidAsString()); + System.out.println("UUID TEST IN COMMANDS " + otherParty.getUuidAsString()); + playerBank.SetBalance(payment, reason, otherParty); + ret = 0; } - return ret; } //AddMoney will be a ServerCommand Only Perm level Op - public Integer AddMoney(String reason, long payment, String otherParty, CommandContext context) { + public Integer AddMoney(ServerPlayerEntity otherParty, long payment, String reason, CommandContext context) { Integer ret = -1; if (context.getSource().hasPermissionLevel(1)) { ret = 0; ServerPlayerEntity player = context.getSource().getPlayer(); BankManager playerBank = new BankManager(player.getUuidAsString()); - playerBank.AddMoney(reason, payment, otherParty); + playerBank.AddMoney(otherParty, payment, player, reason); player.sendMessage(Text.literal(String.valueOf(playerBank.GetBalance()))); } @@ -125,31 +151,34 @@ public class BankCommands { } //SubtractBalance will be a ServerCommand Perm leve Op - public Integer SubtractBalance(String reason, long payment, String otherParty, CommandContext context) { + public Integer SubtractBalance(ServerPlayerEntity otherParty, long payment, String reason, CommandContext context) { Integer ret = -1; if (context.getSource().hasPermissionLevel(1)) { - ret = 0; - ServerPlayerEntity player = context.getSource().getPlayer(); - BankManager playerBank = new BankManager(player.getUuidAsString()); + BankManager playerBank = new BankManager(otherParty.getUuidAsString()); playerBank.SubtractBalance(reason, payment, otherParty); - player.sendMessage(Text.literal(String.valueOf(playerBank.GetBalance()))); + otherParty.sendMessage(Text.literal(String.valueOf(playerBank.GetBalance()))); + ret = 0; } - return ret; } - - public Integer Wire(String reason, long payment, String otherParty, CommandContext context) { + + public Integer Wire(ServerPlayerEntity otherParty, long payment, String reason, CommandContext context) { Integer ret = -1; if (context.getSource().isExecutedByPlayer()) { + ServerPlayerEntity sender = context.getSource().getPlayer(); + BankManager playerBank = new BankManager(sender.getUuidAsString()); + if (sender.getUuidAsString() == otherParty.getUuidAsString()) { + sender.sendMessage(Text.of("you aint congress")); + return -1; + } + playerBank.Wire(otherParty, payment, reason, sender); + sender.sendMessage(Text.literal(String.valueOf(playerBank.GetBalance()))); ret = 0; - ServerPlayerEntity player = context.getSource().getPlayer(); - BankManager playerBank = new BankManager(player.getUuidAsString()); - playerBank.Wire(reason, payment, otherParty); - player.sendMessage(Text.literal(String.valueOf(playerBank.GetBalance()))); } return ret; } + }