New Bank GUI

This commit is contained in:
Fabrizio La Rosa 2020-06-20 21:38:11 +02:00
parent 5526fbc3c5
commit 6800bc6b47
10 changed files with 443 additions and 437 deletions

View File

@ -1,9 +1,14 @@
package com.songoda.skyblock.bank;
import com.songoda.core.compatibility.CompatibleSound;
import com.songoda.core.hooks.EconomyManager;
import com.songoda.skyblock.SkyBlock;
import com.songoda.skyblock.config.FileManager;
import com.songoda.skyblock.island.Island;
import com.songoda.skyblock.island.IslandManager;
import com.songoda.skyblock.message.MessageManager;
import com.songoda.skyblock.sound.SoundManager;
import com.songoda.skyblock.utils.NumberUtil;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@ -11,17 +16,14 @@ import org.bukkit.entity.Player;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import java.util.*;
public class BankManager {
private static BankManager instance;
public static BankManager getInstance() {return instance == null ? instance = new BankManager() : instance;}
private HashMap<UUID, List<Transaction>> log;
private final HashMap<UUID, List<Transaction>> log;
public FileConfiguration lang;
@ -101,4 +103,83 @@ public class BankManager {
public List<Transaction> getTransactionList(UUID uuid) {
return log.get(uuid);
}
public BankResponse deposit(Player player, Island island, double amt, boolean admin) {
SkyBlock skyblock = SkyBlock.getInstance();
FileManager fileManager = skyblock.getFileManager();
// Make sure the amount is positive
if (amt <= 0) {
return BankResponse.NEGATIVE_AMOUNT;
}
// If decimals aren't allowed, check for them
if (!fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Bank.AllowDecimals")) {
int intAmt = (int) amt;
if (intAmt != amt) {
return BankResponse.DECIMALS_NOT_ALLOWED;
}
}
if(!admin) {
if (!EconomyManager.hasBalance(player, amt)) {
return BankResponse.NOT_ENOUGH_MONEY;
}
EconomyManager.withdrawBalance(player, amt);
}
island.addToBank(amt);
Transaction t = new Transaction();
t.player = player;
t.amount = (float) amt;
t.timestamp = Calendar.getInstance().getTime();
t.action = Transaction.Type.DEPOSIT;
t.visibility = admin ? Transaction.Visibility.ADMIN : Transaction.Visibility.USER;
this.addTransaction(player, t);
return BankResponse.SUCCESS;
}
public BankResponse withdraw(Player player, Island island, double amt, boolean admin) {
SkyBlock skyblock = SkyBlock.getInstance();
FileManager fileManager = skyblock.getFileManager();
// Make sure the amount is positive
if (amt <= 0) {
return BankResponse.NEGATIVE_AMOUNT;
}
// If decimals aren't allowed, check for them
if (!fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Bank.AllowDecimals")) {
int intAmt = (int) amt;
if (intAmt != amt) {
return BankResponse.DECIMALS_NOT_ALLOWED;
}
}
if(!admin){
if (amt > island.getBankBalance()) {
return BankResponse.NOT_ENOUGH_MONEY;
}
EconomyManager.deposit(player, amt);
}
island.removeFromBank(amt);
Transaction t = new Transaction();
t.player = player;
t.amount = (float) amt;
t.timestamp = Calendar.getInstance().getTime();
t.action = Transaction.Type.WITHDRAW;
t.visibility = admin ? Transaction.Visibility.ADMIN : Transaction.Visibility.USER;
this.addTransaction(player, t);
return BankResponse.SUCCESS;
}
public enum BankResponse{
NOT_ENOUGH_MONEY,
DECIMALS_NOT_ALLOWED,
NEGATIVE_AMOUNT,
SUCCESS
}
}

View File

@ -1,5 +1,6 @@
package com.songoda.skyblock.bank;
import com.songoda.skyblock.menus.Ownership;
import org.bukkit.OfflinePlayer;
import java.util.Date;
@ -7,7 +8,18 @@ import java.util.Date;
public class Transaction {
public OfflinePlayer player;
public float ammount;
public float amount;
public Date timestamp;
public Type action;
public Visibility visibility;
public enum Type {
WITHDRAW,
DEPOSIT
}
public enum Visibility {
ADMIN,
USER
}
}

View File

@ -1,6 +0,0 @@
package com.songoda.skyblock.bank;
public enum Type {
WITHDRAW,
DEPOSIT
}

View File

@ -4,10 +4,13 @@ import com.songoda.core.compatibility.CompatibleSound;
import com.songoda.core.hooks.EconomyManager;
import com.songoda.skyblock.command.SubCommand;
import com.songoda.skyblock.config.FileManager;
import com.songoda.skyblock.gui.bank.GuiBank;
import com.songoda.skyblock.island.Island;
import com.songoda.skyblock.island.IslandManager;
import com.songoda.skyblock.message.MessageManager;
import com.songoda.skyblock.playerdata.PlayerDataManager;
import com.songoda.skyblock.sound.SoundManager;
import com.songoda.skyblock.utils.player.OfflinePlayer;
import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.configuration.file.FileConfiguration;
@ -15,15 +18,16 @@ import org.bukkit.entity.Player;
import java.io.File;
import java.util.Objects;
import java.util.UUID;
public class AdminBank extends SubCommand {
@Override
public void onCommandByPlayer(Player player, String[] args) {
PlayerDataManager playerDataManager = skyblock.getPlayerDataManager();
MessageManager messageManager = skyblock.getMessageManager();
IslandManager islandManager = skyblock.getIslandManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
FileManager.Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
@ -33,28 +37,21 @@ public class AdminBank extends SubCommand {
if (!fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Bank.Enable")) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Disabled.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
CompatibleSound.BLOCK_ANVIL_LAND.play(player);
return;
}
if (args.length < 1) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.admin.Bank.Short01.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
skyblock.getGuiManager().showGUI(player, new GuiBank(skyblock, island, null, true));
return;
}
if (island == null && args.length <2) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.admin.Bank.NullIsland.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
return;
}
switch (args[0]) {
switch (args[0].toLowerCase()) {
case "balance":
if (args.length <2) {
messageManager.sendMessage(player, Objects.requireNonNull(configLoad.getString("Command.Island.Admin.Bank.Balance.Message")).replace("%player%", args[1]).replace("%bal%", "" + EconomyManager.formatEconomy(EconomyManager.getBalance(Bukkit.getOfflinePlayer(args[1])))));
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Bank.Balance.Message").replace("%player%", args[1]).replace("%bal%", "" + EconomyManager.formatEconomy(EconomyManager.getBalance(Bukkit.getOfflinePlayer(args[1])))));
}else {
messageManager.sendMessage(player, Objects.requireNonNull(configLoad.getString("Command.Island.Admin.Bank.Balance.Message")).replace("%player%", args[1]).replace("%bal%", "" + EconomyManager.formatEconomy(EconomyManager.getBalance(Bukkit.getOfflinePlayer(island.getOwnerUUID())))));
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Bank.Balance.Message").replace("%player%", args[1]).replace("%bal%", "" + EconomyManager.formatEconomy(EconomyManager.getBalance(Bukkit.getOfflinePlayer(island.getOwnerUUID())))));
}
return;
case "deposit":
@ -62,7 +59,7 @@ public class AdminBank extends SubCommand {
islandManager.getIslandByPlayer(Bukkit.getOfflinePlayer(Objects.requireNonNull(Bukkit.getPlayer(args[1])).getUniqueId())).addToBank(Double.parseDouble(args[2]));
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Bank.SuccesDeposit.Message").replace("%player%",args[1]).replace("%ammount%",EconomyManager.formatEconomy(Double.parseDouble(args[2]))));
}else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.admin.Bank.ByConsole.Message"));
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Bank.ByConsole.Message"));
}
return;
case "withdraw":
@ -70,12 +67,33 @@ public class AdminBank extends SubCommand {
islandManager.getIslandByPlayer(Bukkit.getOfflinePlayer(Bukkit.getPlayer(args[1]).getUniqueId())).removeFromBank(Double.parseDouble(args[2]));
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Bank.SuccesWithdraw.Message").replace("%player%",args[1]).replace("%ammount%",EconomyManager.formatEconomy(Double.parseDouble(args[2]))));
}else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.admin.Bank.ByConsole.Message"));
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Bank.ByConsole.Message"));
}
return;
case "open":
if(args.length == 2){
Player targetPlayer = Bukkit.getServer().getPlayer(args[1]);
UUID islandOwnerUUID;
if (targetPlayer == null) {
OfflinePlayer targetPlayerOffline = new OfflinePlayer(args[1]);
islandOwnerUUID = targetPlayerOffline.getOwner();
} else {
islandOwnerUUID = playerDataManager.getPlayerData(targetPlayer).getOwner();
}
island = islandManager.getIsland(Bukkit.getOfflinePlayer(islandOwnerUUID));
}
if (island != null){
skyblock.getGuiManager().showGUI(player, new GuiBank(skyblock, island, null, true));
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Bank.NullIsland.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(player);
}
break;
default:
configLoad.getString("Command.Island.admin.Bank.Unexpected.Message");
return;
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Bank.Unexpected.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(player);
}
}
@ -101,7 +119,7 @@ public class AdminBank extends SubCommand {
islandManager.getIslandByPlayer(Bukkit.getOfflinePlayer(Bukkit.getPlayer(args[1]).getUniqueId())).addToBank(Double.parseDouble(args[2]));
messageManager.sendMessage(sender, configLoad.getString("Command.Island.Admin.Bank.SuccesDeposit.Message").replace("%player%",args[1]).replace("%ammount%",EconomyManager.formatEconomy(Double.parseDouble(args[2]))));
}else {
messageManager.sendMessage(sender, configLoad.getString("Command.Island.admin.Bank.ByConsole.Message"));
messageManager.sendMessage(sender, configLoad.getString("Command.Island.Admin.Bank.ByConsole.Message"));
}
return;
case "withdraw":
@ -109,12 +127,11 @@ public class AdminBank extends SubCommand {
islandManager.getIslandByPlayer(Bukkit.getOfflinePlayer(Bukkit.getPlayer(args[1]).getUniqueId())).removeFromBank(Double.parseDouble(args[2]));
messageManager.sendMessage(sender, configLoad.getString("Command.Island.Admin.Bank.SuccesWithdraw.Message").replace("%player%",args[1]).replace("%ammount%",EconomyManager.formatEconomy(Double.parseDouble(args[2]))));
}else {
messageManager.sendMessage(sender, configLoad.getString("Command.Island.admin.Bank.ByConsole.Message"));
messageManager.sendMessage(sender, configLoad.getString("Command.Island.Admin.Bank.ByConsole.Message"));
}
return;
default:
configLoad.getString("Command.Island.admin.Bank.Unexpected.Message");
return;
messageManager.sendMessage(sender, configLoad.getString("Command.Island.Admin.Bank.Unexpected.Message"));
}
}

View File

@ -1,17 +1,14 @@
package com.songoda.skyblock.command.commands.island;
import com.songoda.core.compatibility.CompatibleSound;
import com.songoda.core.hooks.EconomyManager;
import com.songoda.skyblock.command.SubCommand;
import com.songoda.skyblock.config.FileManager;
import com.songoda.skyblock.config.FileManager.Config;
import com.songoda.skyblock.gui.bank.GuiBank;
import com.songoda.skyblock.island.Island;
import com.songoda.skyblock.island.IslandManager;
import com.songoda.skyblock.island.IslandRole;
import com.songoda.skyblock.menus.Bank;
import com.songoda.skyblock.message.MessageManager;
import com.songoda.skyblock.sound.SoundManager;
import com.songoda.skyblock.utils.NumberUtil;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@ -23,8 +20,8 @@ public class BankCommand extends SubCommand {
@Override
public void onCommandByPlayer(Player player, String[] args) {
MessageManager messageManager = skyblock.getMessageManager();
IslandManager islandManager = skyblock.getIslandManager();
SoundManager soundManager = skyblock.getSoundManager();
IslandManager islandManager = skyblock.getIslandManager();
FileManager fileManager = skyblock.getFileManager();
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
@ -36,7 +33,16 @@ public class BankCommand extends SubCommand {
return;
}
Bank.getInstance().open(player);
Island island;
island = islandManager.getIsland(player);
if (island == null) {
skyblock.getSoundManager().playSound(player, CompatibleSound.BLOCK_GLASS_BREAK.getSound(), 1.0F, 1.0F);
skyblock.getMessageManager().sendMessage(player, configLoad.getString("Command.Bank.Unknown"));
return;
}
skyblock.getGuiManager().showGUI(player, new GuiBank(skyblock, island, null, false));
}
@Override

View File

@ -2,77 +2,205 @@ package com.songoda.skyblock.gui.bank;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.CompatibleSound;
import com.songoda.core.gui.AnvilGui;
import com.songoda.core.gui.Gui;
import com.songoda.core.gui.GuiManager;
import com.songoda.core.gui.GuiUtils;
import com.songoda.core.utils.TextUtils;
import com.songoda.skyblock.SkyBlock;
import com.songoda.skyblock.bank.BankManager;
import com.songoda.skyblock.config.FileManager;
import com.songoda.skyblock.gui.GuiSignatureEditor;
import com.songoda.skyblock.gui.GuiWelcomeEditor;
import com.songoda.skyblock.island.Island;
import com.songoda.skyblock.island.IslandMessage;
import com.songoda.skyblock.island.IslandPermission;
import com.songoda.skyblock.island.IslandRole;
import com.songoda.skyblock.message.MessageManager;
import com.songoda.skyblock.permission.BasicPermission;
import com.songoda.skyblock.permission.PermissionManager;
import com.songoda.skyblock.sound.SoundManager;
import com.songoda.skyblock.utils.NumberUtil;
import com.songoda.skyblock.visit.Visit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class GuiBank extends Gui {
private final SkyBlock plugin;
private final BankManager bankManager;
private final PermissionManager permissionManager;
private final Island island;
private final FileConfiguration languageLoad;
private final FileManager.Config config;
private final FileConfiguration config;
private final Gui returnGui;
private final boolean admin;
public GuiBank(SkyBlock plugin, Island island, Gui returnGui) {
super(6, returnGui);
this.plugin = plugin;
public GuiBank(SkyBlock plugin, Island island, Gui returnGui, boolean admin) {
super(2, returnGui);
this.plugin = plugin;;
this.bankManager = plugin.getBankManager();
this.permissionManager = plugin.getPermissionManager();
this.island = island;
this.returnGui = returnGui;
this.admin = admin;
this.languageLoad = plugin.getFileManager()
.getConfig(new File(plugin.getDataFolder(), "language.yml")).getFileConfiguration();
this.config = plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "config.yml"));
setTitle(TextUtils.formatText(languageLoad.getString("Menu.Settings.Title"))); // TODO Title
setDefaultItem(null);
this.config = plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "config.yml")).getFileConfiguration();
setDefaultItem(CompatibleMaterial.BLACK_STAINED_GLASS_PANE.getItem());
setTitle(TextUtils.formatText("Bank"));
paint();
}
@Override
public void onOpen(GuiManager manager, Player player) {
updateItem(13, // Balance
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Balance.Displayname")),
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Balance.Lore")
.replace("%balance", String.valueOf(island.getBankBalance()))));
super.onOpen(manager, player);
}
public void paint() {
if (inventory != null)
inventory.clear();
setDefaultItem(CompatibleMaterial.BLACK_STAINED_GLASS_PANE.getItem());
setActionForRange(0, 0, 1, 8, null);
setButton(0, GuiUtils.createButtonItem(CompatibleMaterial.OAK_FENCE_GATE, // Exit
TextUtils.formatText(languageLoad.getString("Menu.Settings.Categories.Item.Exit.Displayname"))), (event) -> {
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Exit.Displayname"))), (event) -> {
CompatibleSound.BLOCK_CHEST_CLOSE.play(event.player);
guiManager.showGUI(event.player, returnGui);
event.player.closeInventory();
});
setButton(8, GuiUtils.createButtonItem(CompatibleMaterial.OAK_FENCE_GATE, // Exit
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Exit.Displayname"))), (event) -> {
CompatibleSound.BLOCK_CHEST_CLOSE.play(event.player);
event.player.closeInventory();
});
setButton(4, GuiUtils.createButtonItem(CompatibleMaterial.BOOK, // Transaction log
TextUtils.formatText(languageLoad.getString("Menu.Settings.Categories.Item.Exit.Displayname"))), (event) -> {
guiManager.showGUI(event.player, new GuiBankTransaction(plugin, island, this));
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Log.Displayname"))), (event) -> {
guiManager.showGUI(event.player, new GuiBankTransaction(plugin, island, this, admin));
});
setButton(10, GuiUtils.createButtonItem(CompatibleMaterial.RED_DYE, // Deposit
TextUtils.formatText(languageLoad.getString("Menu.Settings.Categories.Item.Exit.Displayname"))), (event) -> {
CompatibleSound.BLOCK_CHEST_CLOSE.play(event.player);
guiManager.showGUI(event.player, returnGui);
});
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Deposit.Displayname"))), (event -> {
AnvilGui gui = new AnvilGui(event.player, this);
gui.setAction((e -> {
MessageManager messageManager = plugin.getMessageManager();
double amount;
try {
amount = Double.parseDouble(gui.getInputText().trim());
} catch (NumberFormatException e1) {
messageManager.sendMessage(e.player, languageLoad.getString("Command.Island.Bank.Short4.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(e.player);
return;
}
BankManager.BankResponse response = bankManager.deposit(e.player, island, amount, admin);
switch(response){
case NOT_ENOUGH_MONEY:
messageManager.sendMessage(e.player, languageLoad.getString("Command.Island.Bank.Short2.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(e.player);
break;
case DECIMALS_NOT_ALLOWED:
messageManager.sendMessage(e.player, languageLoad.getString("Command.Island.Bank.Short6.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(e.player);
break;
case NEGATIVE_AMOUNT:
messageManager.sendMessage(e.player, languageLoad.getString("Command.Island.Bank.Short5.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(e.player);
break;
case SUCCESS:
CompatibleSound.ENTITY_EXPERIENCE_ORB_PICKUP.play(e.player);
messageManager.sendMessage(e.player, Objects.requireNonNull(languageLoad.getString("Command.Island.Bank.Deposit.Message")).replace(
"%amount%", NumberUtil.formatNumberByDecimal(amount)));
break;
}
e.player.closeInventory();
// paint();
guiManager.showGUI(event.player, this);
}));
ItemStack input = CompatibleMaterial.PAPER.getItem();
ItemMeta im = input.getItemMeta();
if(im != null){
im.setDisplayName(TextUtils.formatText(languageLoad.getString("Menu.Bank.Words.Amount")));
input.setItemMeta(im);
}
gui.setInput(input);
gui.setTitle(TextUtils.formatText(languageLoad.getString("Menu.Bank.Words.Deposit")));
guiManager.showGUI(event.player, gui);
}));
setItem(13, GuiUtils.createButtonItem(CompatibleMaterial.GOLD_INGOT, // Balance
TextUtils.formatText(languageLoad.getString("Menu.Settings.Categories.Item.Exit.Displayname"))));
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Balance.Displayname")),
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Balance.Lore")
.replace("%balance", String.valueOf(island.getBankBalance())))));
setButton(16, GuiUtils.createButtonItem(CompatibleMaterial.GREEN_DYE, // WithDraw
TextUtils.formatText(languageLoad.getString("Menu.Settings.Categories.Item.Exit.Displayname"))), (event) -> {
CompatibleSound.BLOCK_CHEST_CLOSE.play(event.player);
guiManager.showGUI(event.player, returnGui);
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Withdraw.Displayname"))), (event) -> {
AnvilGui gui = new AnvilGui(event.player, this);
gui.setAction((e -> {
MessageManager messageManager = plugin.getMessageManager();
double amount;
try {
amount = Double.parseDouble(gui.getInputText().trim());
} catch (NumberFormatException e1) {
messageManager.sendMessage(e.player, languageLoad.getString("Command.Island.Bank.Short4.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(e.player);
return;
}
BankManager.BankResponse response = bankManager.withdraw(e.player, island, amount, admin);
switch(response){
case NOT_ENOUGH_MONEY:
messageManager.sendMessage(e.player, languageLoad.getString("Command.Island.Bank.Short2.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(e.player);
break;
case DECIMALS_NOT_ALLOWED:
messageManager.sendMessage(e.player, languageLoad.getString("Command.Island.Bank.Short6.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(e.player);
break;
case NEGATIVE_AMOUNT:
messageManager.sendMessage(e.player, languageLoad.getString("Command.Island.Bank.Short5.Message"));
CompatibleSound.BLOCK_ANVIL_LAND.play(e.player);
break;
case SUCCESS:
CompatibleSound.ENTITY_EXPERIENCE_ORB_PICKUP.play(e.player);
messageManager.sendMessage(e.player, Objects.requireNonNull(languageLoad.getString("Command.Island.Bank.Withdraw.Message")).replace(
"%amount%", NumberUtil.formatNumberByDecimal(amount)));
break;
}
e.player.closeInventory();
// paint();
guiManager.showGUI(event.player, this);
}));
ItemStack input = CompatibleMaterial.PAPER.getItem();
ItemMeta im = input.getItemMeta();
if(im != null){
im.setDisplayName(TextUtils.formatText(languageLoad.getString("Menu.Bank.Words.Amount")));
input.setItemMeta(im);
}
gui.setInput(input);
gui.setTitle(TextUtils.formatText(languageLoad.getString("Menu.Bank.Words.Withdraw")));
guiManager.showGUI(event.player, gui);
});
}
}

View File

@ -12,8 +12,11 @@ import com.songoda.skyblock.config.FileManager;
import com.songoda.skyblock.island.Island;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
public class GuiBankTransaction extends Gui {
@ -24,14 +27,16 @@ public class GuiBankTransaction extends Gui {
private final Gui returnGui;
private final int transactions;
private final List<Transaction> transactionList;
private final boolean admin;
public GuiBankTransaction(SkyBlock plugin, Island island, Gui returnGui) {
public GuiBankTransaction(SkyBlock plugin, Island island, Gui returnGui, boolean admin) {
super(returnGui);
this.plugin = plugin;
this.bankManager = plugin.getBankManager();
this.transactionList = bankManager.getTransactions(island.getOwnerUUID());
this.transactions = this.transactionList.size();
this.returnGui = returnGui;
this.admin = admin;
this.languageLoad = plugin.getFileManager()
.getConfig(new File(plugin.getDataFolder(), "language.yml")).getFileConfiguration();
this.config = plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "config.yml"));
@ -41,10 +46,10 @@ public class GuiBankTransaction extends Gui {
} else if(transactions > 4*9){
setRows(6);
} else {
setRows(transactions%9+1);
setRows((int) (Math.ceil((double) transactions / 9d)+1));
}
setTitle(TextUtils.formatText(languageLoad.getString("Menu.Settings.Title"))); // TODO Title
setTitle(TextUtils.formatText(languageLoad.getString("Menu.Bank.Transactions.Title")));
setDefaultItem(null);
paint();
}
@ -55,53 +60,114 @@ public class GuiBankTransaction extends Gui {
setActionForRange(0, 0, 1, 8, null);
setButton(0, GuiUtils.createButtonItem(CompatibleMaterial.OAK_FENCE_GATE, // Exit
TextUtils.formatText(languageLoad.getString("Menu.Settings.Categories.Item.Exit.Displayname"))), (event) -> {
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Exit.Displayname"))), (event) -> {
CompatibleSound.BLOCK_CHEST_CLOSE.play(event.player);
guiManager.showGUI(event.player, returnGui);
});
setButton(8, GuiUtils.createButtonItem(CompatibleMaterial.OAK_FENCE_GATE, // Exit
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Exit.Displayname"))), (event) -> {
CompatibleSound.BLOCK_CHEST_CLOSE.play(event.player);
guiManager.showGUI(event.player, returnGui);
});
setItem(4, GuiUtils.createButtonItem(CompatibleMaterial.PAINTING, // Info
TextUtils.formatText(languageLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"))));
TextUtils.formatText(languageLoad.getString("Menu.Bank.Transactions.Info.Displayname")),
TextUtils.formatText(languageLoad.getString("Menu.Bank.Transactions.Info.Lore")
.replace("%totalTransactions", String.valueOf(transactions)))));
this.pages = (int) Math.max(1, Math.ceil((double) transactions / 36d));
if(transactions > 0){
this.pages = (int) Math.max(1, Math.ceil((double) transactions / 36d));
if (page != 1)
setButton(5, 2, GuiUtils.createButtonItem(CompatibleMaterial.ARROW,
TextUtils.formatText(languageLoad.getString("Menu.Settings.Categories.Item.Last.Displayname"))),
(event) -> {
page--;
paint();
});
if (page != 1)
setButton(5, 2, GuiUtils.createButtonItem(CompatibleMaterial.ARROW,
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Last.Displayname"))),
(event) -> {
page--;
paint();
});
if (page != pages)
setButton(5, 6, GuiUtils.createButtonItem(CompatibleMaterial.ARROW,
TextUtils.formatText(languageLoad.getString("Menu.Settings.Categories.Item.Next.Displayname"))),
(event) -> {
page++;
paint();
});
if (page != pages)
setButton(5, 6, GuiUtils.createButtonItem(CompatibleMaterial.ARROW,
TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Next.Displayname"))),
(event) -> {
page++;
paint();
});
for (int i = 9; i < 45; i++) { // TODO dynamic dimension!
int current = ((page - 1) * 36) - 9;
if (current + i >= transactions) {
setItem(i, null);
continue;
for (int i = 9; i < ((getRows()-1)*9)+9; i++) { // TODO check dynamic dimension!
int current = ((page - 1) * 36) - 9;
if (current + i >= transactions) {
setItem(i, null);
continue;
}
Transaction transaction = transactionList.get(current + i);
if (transaction == null) continue;
ItemStack is = null;
ItemMeta im;
String name = "";
SimpleDateFormat formatDate = new SimpleDateFormat(languageLoad.getString("Menu.Bank.Item.Transactions.DateTimeFormat", "dd/MM/yyyy HH:mm:ss"));
switch(transaction.action){
case WITHDRAW:
is = CompatibleMaterial.RED_DYE.getItem();
im = is.getItemMeta();
if(im != null){
im.setDisplayName(TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Transactions.Withdraw.DisplayName")
.replace("%dateTime", formatDate.format(transaction.timestamp))));
List<String> lore = new ArrayList<>();
switch (transaction.visibility){
case ADMIN:
name = languageLoad.getString("Menu.Bank.Word.Admin");
if(admin){
name += " " + transaction.player.getName();
}
break;
case USER:
name = transaction.player.getName();
break;
}
lore.add(TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Transactions.Withdraw.Format")
.replace("%playerName", name)
.replace("%amount", String.valueOf(transaction.amount))));
im.setLore(lore);
is.setItemMeta(im);
}
break;
case DEPOSIT:
is = CompatibleMaterial.GREEN_DYE.getItem();
im = is.getItemMeta();
if(im != null){
im.setDisplayName(TextUtils.formatText(languageLoad.getString("Menu.Bank.Item.Transactions.Deposit.DisplayName")
.replace("%dateTime", formatDate.format(transaction.timestamp))));
List<String> lore = new ArrayList<>();
switch (transaction.visibility){
case ADMIN:
name = languageLoad.getString("Menu.Bank.Word.Admin");
if(admin){
name += transaction.player.getName();
}
break;
case USER:
name = transaction.player.getName();
break;
}
lore.add(TextUtils.formatText(languageLoad.getString("Menu.Bank.Transactions.Deposit.Format")
.replace("%playerName", name)
.replace("%amount", String.valueOf(transaction.amount))));
im.setLore(lore);
is.setItemMeta(im);
}
break;
}
setItem(i, is);
}
Transaction transaction = transactionList.get(current + i);
if (transaction == null) continue;
ItemStack is = null;
switch(transaction.action){
case WITHDRAW:
is = CompatibleMaterial.GREEN_DYE.getItem();
break;
case DEPOSIT:
is = CompatibleMaterial.RED_DYE.getItem();
break;
}
// TODO set item meta
setItem(i, is);
} else {
setItem(31, CompatibleMaterial.BARRIER.getItem());
}
}
}

View File

@ -1,326 +0,0 @@
package com.songoda.skyblock.menus;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.CompatibleSound;
import com.songoda.core.gui.AnvilGui;
import com.songoda.core.hooks.EconomyManager;
import com.songoda.core.input.ChatPrompt;
import com.songoda.skyblock.SkyBlock;
import com.songoda.skyblock.bank.BankManager;
import com.songoda.skyblock.bank.Transaction;
import com.songoda.skyblock.bank.Type;
import com.songoda.skyblock.config.FileManager;
import com.songoda.skyblock.generator.GeneratorMaterial;
import com.songoda.skyblock.island.Island;
import com.songoda.skyblock.island.IslandManager;
import com.songoda.skyblock.message.MessageManager;
import com.songoda.skyblock.sound.SoundManager;
import com.songoda.skyblock.utils.AbstractAnvilGUI;
import com.songoda.skyblock.utils.NumberUtil;
import com.songoda.skyblock.utils.item.MenuClickRegistry;
import com.songoda.skyblock.utils.item.nInventoryUtil;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Objects;
public class Bank {
private static Bank instance;
private BankManager bankManager;
private IslandManager islandManager;
public static Bank getInstance() {
return instance == null ? instance = new Bank() : instance;
}
public Bank() {
SkyBlock skyblock = SkyBlock.getInstance();
MessageManager messageManager = skyblock.getMessageManager();
islandManager = skyblock.getIslandManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
FileManager.Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
bankManager = BankManager.getInstance();
MenuClickRegistry.getInstance().register((executors) -> {
executors.put(MenuClickRegistry.RegistryKey.fromLanguageFile("Menu.Bank.Item.Exit.Displayname", CompatibleMaterial.OAK_FENCE_GATE), (inst, player, e) -> {
inst.getSoundManager().playSound(player, CompatibleSound.BLOCK_GLASS_BREAK.getSound(), 1.0F, 1.0F);
e.setWillClose(true);
e.setWillDestroy(false);
});
executors.put(MenuClickRegistry.RegistryKey.fromLanguageFile("Menu.Bank.Item.Barrier.Displayname", CompatibleMaterial.BLACK_STAINED_GLASS_PANE), (inst, player, e) -> {
inst.getSoundManager().playSound(player, CompatibleSound.BLOCK_GLASS_BREAK.getSound(), 1.0F, 1.0F);
e.setWillClose(false);
e.setWillDestroy(false);
});
executors.put(MenuClickRegistry.RegistryKey.fromLanguageFile("Menu.Bank.Item.Deposit.Displayname", CompatibleMaterial.DIRT), (inst, player, e) -> {
inst.getSoundManager().playSound(player, CompatibleSound.ENTITY_BAT_TAKEOFF.getSound(), 1.0F, 1.0F);
//Deposit money
Island island = islandManager.getIsland(player);
if (island != null) {
SelectInputMethod.getInstance().open(player, "Deposit", (action) -> {
if (action == InputMethodSelectlistener.InputMethod.CANCELED) {
Bukkit.getScheduler().runTask(skyblock, () ->
this.open(player));
} else if (action == InputMethodSelectlistener.InputMethod.ALL) {
deposit(player, island, EconomyManager.getBalance(Bukkit.getOfflinePlayer(player.getUniqueId())));
} else {
AbstractAnvilGUI gui = new AbstractAnvilGUI(player, event1 -> {
if (event1.getSlot() == AbstractAnvilGUI.AnvilSlot.OUTPUT) {
if (!(player.hasPermission("fabledskyblock.island.bank") // TODO check correct permissions - Fabrimat
|| player.hasPermission("fabledskyblock.*"))) {
messageManager.sendMessage(player, "No permission"); // TODO language.yml - Fabrimat
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(),
1.0F, 1.0F);
} else if (!event1.getName().replace(" ", "")
.matches("^[a-zA-Z0-9|.]+$")) {
messageManager.sendMessage(player, "Invalid characters"); // TODO language.yml - Fabrimat
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(),
1.0F, 1.0F);
} else if (!event1.getName().matches("-?\\d+(?:\\.\\d+)?")) {
messageManager.sendMessage(player, "Only numbers allowed"); // TODO language.yml - Fabrimat
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(),
1.0F, 1.0F);
} else {
double amount;
try {
amount = Double.parseDouble(event1.getName());
} catch (NumberFormatException e1) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short4.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
return;
}
deposit(player, island, amount);
player.closeInventory();
Bukkit.getServer().getScheduler()
.runTaskLater(skyblock, () -> open(player), 1L);
}
event1.setWillClose(true);
event1.setWillDestroy(true);
} else {
event1.setWillClose(false);
event1.setWillDestroy(false);
}
});
ItemStack is = CompatibleMaterial.NAME_TAG.getItem();
ItemMeta im = is.getItemMeta();
im.setDisplayName("Amount"); // TODO language.yml - Fabrimat
is.setItemMeta(im);
gui.setSlot(AbstractAnvilGUI.AnvilSlot.INPUT_LEFT, is);
gui.open();
// ---
/*ChatPrompt.showPrompt(skyblock, player, (event) -> {
if (event.getMessage().equals(""))
return;
double amount;
try {
amount = Double.parseDouble(event.getMessage());
} catch (NumberFormatException e1) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short4.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
return;
}
deposit(player, island, amount);
});*/
}
});
}
e.setWillClose(true);
e.setCancelled(false);
});
executors.put(MenuClickRegistry.RegistryKey.fromLanguageFile("Menu.Bank.Item.Withdraw.Displayname", CompatibleMaterial.GLISTERING_MELON_SLICE), (inst, player, e) -> {
inst.getSoundManager().playSound(player, CompatibleSound.ENTITY_BAT_TAKEOFF.getSound(), 1.0F, 1.0F);
//Withdraw money
Island island;
island = islandManager.getIsland(player);
if (island != null) {
SelectInputMethod.getInstance().open(player, "Withdraw", (action) -> {
if (action == InputMethodSelectlistener.InputMethod.CANCELED) {
Bukkit.getScheduler().runTask(skyblock, () -> {
this.open(player);
});
} else if (action == InputMethodSelectlistener.InputMethod.ALL) {
withdraw(player, island, island.getBankBalance());
} else {
ChatPrompt.showPrompt(skyblock, player, (event) -> {
if (event.getMessage().equals(""))
return;
double amount = 0;
try {
amount = Double.parseDouble(event.getMessage());
} catch (NumberFormatException e1) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short4.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
}
withdraw(player, island, amount);
});
}
});
}
e.setWillClose(true);
e.setCancelled(false);
});
executors.put(MenuClickRegistry.RegistryKey.fromLanguageFile("Menu.Bank.Item.Log.Displayname", CompatibleMaterial.BOOK), (inst, player, e) -> {
inst.getSoundManager().playSound(player, CompatibleSound.BLOCK_GLASS_BREAK.getSound(), 1.0F, 1.0F);
e.setWillClose(false);
e.setWillDestroy(false);
});
executors.put(MenuClickRegistry.RegistryKey.fromLanguageFile("Menu.Bank.Item.Balance.Displayname", CompatibleMaterial.STICK), (inst, player, e) -> {
e.setWillClose(false);
e.setWillDestroy(false);
});
});
}
public void open(Player player) {
Island island;
island = islandManager.getIsland(player);
SkyBlock skyblock = SkyBlock.getInstance();
FileManager.Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
nInventoryUtil nInv = new nInventoryUtil(player, event -> MenuClickRegistry.getInstance().dispatch(player, event));
if (island == null) {
skyblock.getSoundManager().playSound(player, CompatibleSound.BLOCK_GLASS_BREAK.getSound(), 1.0F, 1.0F);
skyblock.getMessageManager().sendMessage(player, configLoad.getString("Command.Bank.Unknown"));
return;
}
// Glass panes barriers
nInv.addItem(nInv.createItem(CompatibleMaterial.BLACK_STAINED_GLASS_PANE.getItem(), configLoad.getString("Menu.Bank.Item.Barrier.Displayname"), null, null, null, null), 0, 2, 5, 8,
1, 2, 3, 5, 6, 7, 9, 11, 12, 14, 15, 17);
nInv.addItem(nInv.createItem(CompatibleMaterial.OAK_FENCE_GATE.getItem(), configLoad.getString("Menu.Bank.Item.Exit.Displayname"),
configLoad.getStringList("Menu.Bank.Item.Exit.Lore"), null, null, null), 0, 8);
nInv.addItem(nInv.createItem(CompatibleMaterial.BOOK.getItem(), configLoad.getString("Menu.Bank.Item.Log.Displayname"),
bankManager.getTransactions(player), null, null, null), 4);
nInv.addItem(nInv.createItem(CompatibleMaterial.DIRT.getItem(), configLoad.getString("Menu.Bank.Item.Deposit.Displayname"),
configLoad.getStringList("Menu.Bank.Item.Deposit.Lore"), null, null, null), 10);
nInv.addItem(nInv.createItem(CompatibleMaterial.GLISTERING_MELON_SLICE.getItem(), configLoad.getString("Menu.Bank.Item.Withdraw.Displayname"),
configLoad.getStringList("Menu.Bank.Item.Withdraw.Lore"), null, null, null), 16);
nInv.addItem(nInv.createItem(CompatibleMaterial.STICK.getItem(), configLoad.getString("Menu.Bank.Item.Balance.Displayname"),
BankManager.getInstance().getBalanceLore(player), null, null, null), 13);
nInv.setTitle(ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(configLoad.getString("Menu.Bank.Title"))));
nInv.setRows(2);
Bukkit.getServer().getScheduler().runTask(skyblock, nInv::open);
}
private void deposit(Player player, Island island, double amt) {
SkyBlock skyblock = SkyBlock.getInstance();
MessageManager messageManager = skyblock.getMessageManager();
IslandManager islandManager = skyblock.getIslandManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
FileManager.Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
// Make sure the amount is positive
if (amt <= 0) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short5.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
return;
}
// If decimals aren't allowed, check for them
if (!fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Bank.AllowDecimals")) {
int intAmt = (int) amt;
if (intAmt != amt) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short6.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
return;
}
}
if (!EconomyManager.hasBalance(player, amt)) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
return;
}
EconomyManager.withdrawBalance(player, amt);
island.addToBank(amt);
Transaction t = new Transaction();
t.player = player;
t.ammount = (float) amt;
t.timestamp = Calendar.getInstance().getTime();
t.action = Type.DEPOSIT;
bankManager.addTransaction(player, t);
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Deposit.Message").replace(
"%amount%", NumberUtil.formatNumberByDecimal(amt)));
}
private void withdraw(Player player, Island island, double amt) {
SkyBlock skyblock = SkyBlock.getInstance();
MessageManager messageManager = skyblock.getMessageManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
FileManager.Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
// Make sure the amount is positive
if (amt <= 0) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short5.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
return;
}
// If decimals aren't allowed, check for them
if (!fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Bank.AllowDecimals")) {
int intAmt = (int) amt;
if (intAmt != amt) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short6.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
return;
}
}
if (amt > island.getBankBalance()) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Bank.Short2.Message"));
return;
}
EconomyManager.deposit(player, amt);
island.removeFromBank(amt);
Transaction t = new Transaction();
t.player = player;
t.ammount = (float) amt;
t.timestamp = Calendar.getInstance().getTime();
t.action = Type.WITHDRAW;
bankManager.addTransaction(player, t);
messageManager.sendMessage(player, Objects.requireNonNull(configLoad.getString("Command.Island.Bank.Withdraw.Message")).replace(
"%amount%", NumberUtil.formatNumberByDecimal(amt)));
}
}

View File

@ -3,7 +3,6 @@ package com.songoda.skyblock.playerdata;
import com.songoda.skyblock.SkyBlock;
import com.songoda.skyblock.bank.BankManager;
import com.songoda.skyblock.bank.Transaction;
import com.songoda.skyblock.bank.Type;
import com.songoda.skyblock.config.FileManager.Config;
import com.songoda.skyblock.confirmation.Confirmation;
import com.songoda.skyblock.menus.MenuType;
@ -59,12 +58,18 @@ public class PlayerData {
FileConfiguration configLoad = getConfig().getFileConfiguration();
for (int i = 0;i< configLoad.getInt("Bank.Transactions.Size");i++) {
Transaction t = new Transaction();
t.action = Type.valueOf(configLoad.getString("Bank.Transactions."+i+".Action"));
t.ammount = Float.parseFloat(Objects.requireNonNull(configLoad.getString("Bank.Transactions." + i + ".Amount")));
t.action = Transaction.Type.valueOf(configLoad.getString("Bank.Transactions."+i+".Action"));
t.amount = Float.parseFloat(Objects.requireNonNull(configLoad.getString("Bank.Transactions." + i + ".Amount")));
t.player = Bukkit.getOfflinePlayer(UUID.fromString(Objects.requireNonNull(configLoad.getString("Bank.Transactions." + i + ".Player"))));
Date d = new Date();
d.setTime(configLoad.getLong("Bank.Transactions."+i+".Date"));
t.timestamp = d;
String visibility = configLoad.getString("Bank.Transactions."+i+".Visibility");
if(visibility != null){
t.visibility = Transaction.Visibility.valueOf(visibility);
} else {
t.visibility = Transaction.Visibility.USER; // Defaulting this as it's a new field
}
transactions.add(t);
}
}
@ -264,9 +269,10 @@ public class PlayerData {
for (int i = 0; i < transactions.size(); i++) {
Transaction t = transactions.get(i);
configLoad.set("Bank.Transactions." + i + ".Action", t.action.name());
configLoad.set("Bank.Transactions." + i + ".Amount", t.ammount);
configLoad.set("Bank.Transactions." + i + ".Amount", t.amount);
configLoad.set("Bank.Transactions." + i + ".Player", t.player.getUniqueId().toString());
configLoad.set("Bank.Transactions." + i + ".Date", t.timestamp.getTime());
configLoad.set("Bank.Transactions." + i + ".Visibility", t.visibility.name());
}
}else {
configLoad.set("Bank.Transactions.Size", 0);

View File

@ -3198,21 +3198,43 @@ Menu:
Title: 'Bank'
Item:
Exit:
Displayname: 'Exit'
Lore: 'Exits the Menu'
Displayname: '&cExit'
Lore: '&7Exits the Menu'
Barrier:
Displayname: '&cBank'
Log:
Displayname: 'Transaction Log'
Empty: 'Looks like you haven''t got transactions'
Displayname: '&fTransaction Log'
Empty: '&7Looks like you haven''t got transactions'
Deposit:
Displayname: 'Deposit'
Lore: 'Click to deposit your money. Everything or a custom ammount.'
Displayname: '&fDeposit'
Lore: '&7Click to deposit your money. Everything or a custom amount.'
Withdraw:
Displayname: 'Withdraw'
Lore: 'Click to withdraw your money. Everything or a custom ammount.'
Displayname: '&fWithdraw'
Lore: '&7Click to withdraw your money. Everything or a custom amount.'
Balance:
Displayname: 'Balance'
Displayname: '&fBalance'
Lore: '&7Bank balance: &6$%balance'
Next:
Displayname: '&aNext Page'
Last:
Displayname: '&aPrevious Page'
Transactions:
Info:
Displayname: '&fInfo'
Lore: '&7Total transactions: %totalTransactions'
Title: 'Transactions'
Withdraw:
DisplayName: '&c%dateTime'
Format: '&7 %playerName withdrawn %amount'
Deposit:
DisplayName: '&a%dateTime'
Format: '&7 %playerName deposited %amount'
Admin: '&cAdmin&7'
DateTimeFormat: 'dd/MM/yyyy HH:mm:ss'
Words:
Withdraw: 'Withdraw'
Deposit: 'Deposit'
Amount: 'Amount'
Input:
Title: 'Select amount.'
Item: