package me.beastman3226.bc.commands; import me.beastman3226.bc.BusinessCore.Information; import me.beastman3226.bc.business.Business; import me.beastman3226.bc.business.BusinessManager; import me.beastman3226.bc.errors.InsufficientFundsException; import me.beastman3226.bc.event.business.BusinessBalanceChangeEvent; import me.beastman3226.bc.event.business.BusinessFiredEmployeeEvent; import me.beastman3226.bc.event.business.BusinessPostCreatedEvent; import me.beastman3226.bc.event.business.BusinessPreCreatedEvent; import me.beastman3226.bc.player.EmployeeManager; import me.beastman3226.bc.player.Manager; import me.beastman3226.bc.util.Prefixes; import me.beastman3226.bc.util.Scheduler; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; /** * This class handles all business related commands * @author beastman3226 */ public class BusinessCommandHandler implements CommandExecutor { private static BusinessCommandHandler instance = null; protected BusinessCommandHandler() {} public static BusinessCommandHandler getInstance() { if(instance == null) { instance = new BusinessCommandHandler(); } return instance; } @Override public boolean onCommand(CommandSender sender, Command cmnd, String string, String[] args) { if (Information.eco == null) { Information.BusinessCore.setupEconomy(); } if (sender.hasPermission(cmnd.getPermission())) { // <editor-fold defaultstate="collapsed" desc="Business Create"> if (cmnd.getName().equalsIgnoreCase("b.create") && args.length > 0) { if (sender instanceof Player && !BusinessManager.isOwner(sender.getName())) { BusinessPreCreatedEvent event = new BusinessPreCreatedEvent(sender, args); Bukkit.getPluginManager().callEvent(event); Business b = BusinessManager.createBusiness(new Business.Builder(BusinessManager.openID()).name(event.getName()).owner(event.getSender().getName())); BusinessPostCreatedEvent event1 = new BusinessPostCreatedEvent(b); Bukkit.getPluginManager().callEvent(event1); if (!event1.isCancelled()) { Bukkit.getServer().broadcastMessage(Prefixes.POSITIVE + event1.getBusiness().getOwnerName() + " has just created " + event1.getBusiness().getName()); } } else { sender.sendMessage(Prefixes.ERROR + "I need a player name to create a business. You aren't a player. OR You already have a business"); } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="Business Delete"> } else if (cmnd.getName().equalsIgnoreCase("b.delete")) { if (sender instanceof Player && BusinessManager.isOwner(sender.getName())) { BusinessManager.deleteBusiness(BusinessManager.getBusiness(sender.getName())); } else if (!(sender instanceof Player) && args.length > 0) { int k = 0; boolean caught = false; try { k = Integer.valueOf(args[0]); } catch (NumberFormatException e) { caught = true; } if (!caught) { if (BusinessManager.isID(k)) { BusinessManager.deleteBusiness(BusinessManager.getBusiness(k)); } else { sender.sendMessage(Prefixes.ERROR + "That ID is not valid!"); return false; } } else if (BusinessManager.isOwner(args[0])) { BusinessManager.deleteBusiness(BusinessManager.getBusiness(args[0])); } else { sender.sendMessage(Prefixes.ERROR + "That owner is not valid!"); return false; } } else { sender.sendMessage(Prefixes.ERROR + "Valid business not found."); return false; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="Business withdraw"> } else if (cmnd.getName().equalsIgnoreCase("b.withdraw") && args.length > 0) { if (sender instanceof Player && BusinessManager.isOwner(sender.getName())) { boolean caught = false; double amount = 0.0; Business b = BusinessManager.getBusiness(sender.getName()); try { amount = Double.parseDouble(args[0]); } catch (NumberFormatException nfe) { caught = true; } if (caught) { sender.sendMessage(Prefixes.ERROR + "Your second argument must be an amount such as 0.0"); return false; } else { try { BusinessBalanceChangeEvent event = new BusinessBalanceChangeEvent(b, -amount); Bukkit.getServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { event.getBusiness().withdraw(event.getAbsoluteAmount()); Information.eco.depositPlayer(sender.getName(), event.getAbsoluteAmount()); Business.businessList.remove(event.getBusiness()); Business.businessList.add(event.getBusiness()); } } catch (InsufficientFundsException ex) { sender.sendMessage(Prefixes.ERROR + "The amount must be less than the current balance."); return false; } sender.sendMessage(Prefixes.NOMINAL + "Current balance in " + b.getName() + " is " + b.getBalance() + " " + Information.eco.currencyNamePlural()); return true; } } else if (!(sender instanceof Player)) { boolean caught = false; int id = 0; double amount = 0.0; try { id = Integer.parseInt(args[0]); amount = Double.parseDouble(args[1]); } catch (NumberFormatException nfe) { caught = true; } if (caught) { sender.sendMessage("Please do 'b.withdraw [business_id] [amount]', both must be numbers!"); return false; } else { try { Business b = BusinessManager.getBusiness(id); BusinessBalanceChangeEvent event = new BusinessBalanceChangeEvent(b, -amount); Bukkit.getServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { event.getBusiness().withdraw(event.getAbsoluteAmount()); Business.businessList.remove(event.getBusiness()); Business.businessList.add(event.getBusiness()); } } catch (InsufficientFundsException ex) { sender.sendMessage("The amount must be less than the balance!"); return false; } } } else { sender.sendMessage(Prefixes.ERROR + "You are not an owner."); } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="Business Deposit"> } else if (cmnd.getName().equalsIgnoreCase("b.deposit") && args.length > 0) { if (sender instanceof Player && (BusinessManager.isOwner(sender.getName()) || Manager.isManager(sender.getName()))) { boolean caught = false; double amount = 0.0; try { amount = Double.valueOf(args[0]); } catch (NumberFormatException nfe) { caught = true; } if (caught) { sender.sendMessage(Prefixes.ERROR + args[0] + " is not the proper format for a deposit"); return false; } else { Business b = null; b = BusinessManager.getBusiness(sender.getName()); if (b == null) b = Manager.getBusiness(sender.getName()); BusinessBalanceChangeEvent event = new BusinessBalanceChangeEvent(b, amount); Bukkit.getServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { event.getBusiness().deposit(event.getAmount()); Information.eco.withdrawPlayer(sender.getName(), event.getAmount()); Business.businessList.remove(event.getBusiness()); Business.businessList.add(event.getBusiness()); } sender.sendMessage(Prefixes.NOMINAL + "Current balance in " + b.getName() + " is " + b.getBalance() + " " + Information.eco.currencyNamePlural()); return true; } } else { int id = 0; double amount = 0.0; boolean caught = false; try { id = Integer.parseInt(args[0]); if (args[1] == null) { sender.sendMessage(Prefixes.ERROR + "You need to specify an amount!"); return false; } else { amount = Double.parseDouble(args[1]); } } catch (NumberFormatException nfe) { caught = true; } if (caught) { sender.sendMessage("Please specify valid numbers as numbers ie. 1, 0.0"); return false; } else { Business b = BusinessManager.getBusiness(id); BusinessBalanceChangeEvent event = new BusinessBalanceChangeEvent(b, amount); Bukkit.getServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { event.getBusiness().deposit(event.getAmount()); Business.businessList.remove(event.getBusiness()); Business.businessList.add(event.getBusiness()); } Player owner = Bukkit.getPlayerExact(b.getOwnerName()); if (owner.isOnline() | owner != null) { owner.sendMessage(Prefixes.POSITIVE + "Server has just deposited " + amount + " into your business, your new balance is " + b.getBalance() + " " + Information.eco.currencyNamePlural()); } return true; } } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="Business balance"> } else if (cmnd.getName().equalsIgnoreCase("b.balance")) { if (sender instanceof Player && (BusinessManager.isOwner(sender.getName()) || Manager.isManager(sender.getName()))) { sender.sendMessage(Prefixes.NOMINAL + "Current balance in " + BusinessManager.getBusiness(sender.getName()).getName() + " is " + BusinessManager.getBusiness(sender.getName()).getBalance()); return true; } else if (!(sender instanceof Player) && args.length > 0) { int id = 0; String name = ""; boolean caught = false; try { id = Integer.valueOf(args[0]); } catch (NumberFormatException nfe) { caught = true; } if (caught) { name = args[0]; if (BusinessManager.isOwner(name)) { Business b = BusinessManager.getBusiness(name); sender.sendMessage(Prefixes.NOMINAL + "Current balance in " + b.getName() + " is " + b.getBalance()); return true; } else if (Manager.isManager(sender.getName())) { Business b = Manager.getBusiness(sender.getName()); sender.sendMessage(Prefixes.NOMINAL + "Current balance in " + b.getName() + " is " + b.getBalance()); return true; } else { sender.sendMessage(Prefixes.ERROR + name + " is not an owner. Try again with valid name."); return false; } } else { if (BusinessManager.isID(id)) { Business b = BusinessManager.getBusiness(id); sender.sendMessage(Prefixes.NOMINAL + "Current balance in " + b.getName() + " is " + b.getBalance()); return true; } else { sender.sendMessage(Prefixes.ERROR + "That is not a valid id!"); return false; } } } // </editor-fold> //<editor-fold defaultstate="collapsed" desc="Business info"> } else if (cmnd.getName().equalsIgnoreCase("b.info")) { if (sender instanceof Player) { if (BusinessManager.isOwner(sender.getName())) { Business b = BusinessManager.getBusiness(sender.getName()); if (b == null) { System.out.println("For some odd reason the business returned null"); } sender.sendMessage(ChatColor.DARK_GREEN + "|==========Business Info==========|"); sender.sendMessage(ChatColor.GREEN + " Name: " + b.getName()); sender.sendMessage(ChatColor.GREEN + " ID: " + b.getID()); sender.sendMessage(ChatColor.GREEN + " Balance: " + b.getBalance()); if (b.getEmployeeIDs().length == 0) { sender.sendMessage(ChatColor.GREEN + " Employees: N/A"); } else { sender.sendMessage(ChatColor.GREEN + " Employees: " + this.asString(b.getEmployeeIDs())); } } else if (Manager.isManager(sender.getName())) { Business b = Manager.getBusiness(sender.getName()); if (b == null) { System.out.println("For some odd reason the business returned null"); } sender.sendMessage(ChatColor.DARK_GREEN + "|==========Business Info==========|"); sender.sendMessage(ChatColor.GREEN + " Name: " + b.getName()); sender.sendMessage(ChatColor.GREEN + " ID: " + b.getID()); sender.sendMessage(ChatColor.GREEN + " Balance: " + b.getBalance()); if (b.getEmployeeIDs().length == 0) { sender.sendMessage(ChatColor.GREEN + " Employees: N/A"); } else { sender.sendMessage(ChatColor.GREEN + " Employees: " + this.asString(b.getEmployeeIDs())); } } else { String[] info = new String[]{ChatColor.DARK_GREEN + "|=========Top Businesses==========|", ChatColor.GREEN + " 1) " + ChatColor.WHITE + BusinessManager.getIndex(1), ChatColor.GREEN + " 2) " + ChatColor.WHITE + BusinessManager.getIndex(2), ChatColor.GREEN + " 3) " + ChatColor.WHITE + BusinessManager.getIndex(3), ChatColor.GREEN + " 4) " + ChatColor.WHITE + BusinessManager.getIndex(4), ChatColor.GREEN + " 5) " + ChatColor.WHITE + BusinessManager.getIndex(5)}; sender.sendMessage(info[0]); sender.sendMessage(info[1]); sender.sendMessage(info[2]); sender.sendMessage(info[3]); sender.sendMessage(info[4]); sender.sendMessage(info[5]); } } else if (!(sender instanceof Player) && args.length > 0) { int id = 0; try { id = Integer.parseInt(args[0]); } catch (NumberFormatException e) { sender.sendMessage("That is an invalid id!"); return false; } Business b = BusinessManager.getBusiness(id); if (b == null) { Information.BusinessCore.getLogger().warning("That is not a valid id!"); return false; } String[] info = new String[]{ChatColor.DARK_GREEN + "|==========Business Info==========|", ChatColor.GREEN + " Name: " + b.getName(), ChatColor.GREEN + " Owner:" + b.getOwnerName(), ChatColor.GREEN + " ID: " + b.getID(), ChatColor.GREEN + " Balance: " + b.getBalance(), ChatColor.GREEN + " Employees: " + b.getEmployeeIDs() == null || b.getEmployeeIDs().length == 0 ? "N/A" : this.asString(b.getEmployeeIDs())}; sender.sendMessage(info); } else if (!(sender instanceof Player)) { String[] info = new String[]{ChatColor.DARK_GREEN + "|=========Top Businesses==========|", ChatColor.GREEN + " 1) " + ChatColor.WHITE + BusinessManager.getIndex(1), ChatColor.GREEN + " 2) " + ChatColor.WHITE + BusinessManager.getIndex(2), ChatColor.GREEN + " 3) " + ChatColor.WHITE + BusinessManager.getIndex(3), ChatColor.GREEN + " 4) " + ChatColor.WHITE + BusinessManager.getIndex(4), ChatColor.GREEN + " 5) " + ChatColor.WHITE + BusinessManager.getIndex(5)}; sender.sendMessage(info); } //</editor-fold> //<editor-fold desc="Business top" defaultstate="collapsed"> } else if (cmnd.getName().equalsIgnoreCase("b.top") && args.length >= 0) { if (args.length == 0) { String[] info = new String[]{ChatColor.DARK_GREEN + "|=========Top Businesses==========|", ChatColor.GREEN + " 1) " + ChatColor.WHITE + BusinessManager.getIndex(1), ChatColor.GREEN + " 2) " + ChatColor.WHITE + BusinessManager.getIndex(2), ChatColor.GREEN + " 3) " + ChatColor.WHITE + BusinessManager.getIndex(3), ChatColor.GREEN + " 4) " + ChatColor.WHITE + BusinessManager.getIndex(4), ChatColor.GREEN + " 5) " + ChatColor.WHITE + BusinessManager.getIndex(5)}; sender.sendMessage(info); } else { int index = Integer.parseInt(args[0]); if (index == 2) { String[] info = new String[]{ChatColor.DARK_GREEN + "|=========Top Businesses==========|", ChatColor.GREEN + " 6) " + ChatColor.WHITE + BusinessManager.getIndex(6), ChatColor.GREEN + " 7) " + ChatColor.WHITE + BusinessManager.getIndex(7), ChatColor.GREEN + " 8) " + ChatColor.WHITE + BusinessManager.getIndex(8), ChatColor.GREEN + " 9) " + ChatColor.WHITE + BusinessManager.getIndex(9), ChatColor.GREEN + " 10) " + ChatColor.WHITE + BusinessManager.getIndex(10)}; sender.sendMessage(info); } else { String[] info = new String[]{ChatColor.DARK_GREEN + "|=========Top Businesses==========|", ChatColor.GREEN + " " + (((index * 5) - 5) + 1) + ") " + ChatColor.WHITE + BusinessManager.getIndex(((index * 5) - 5) + 1), ChatColor.GREEN + " " + (((index * 5) - 5) + 2) + ") " + ChatColor.WHITE + BusinessManager.getIndex(((index * 5) - 5) + 2), ChatColor.GREEN + " " + (((index * 5) - 5) + 3) + ") " + ChatColor.WHITE + BusinessManager.getIndex(((index * 5) - 5) + 3), ChatColor.GREEN + " " + (((index * 5) - 5) + 4) + ") " + ChatColor.WHITE + BusinessManager.getIndex(((index * 5) - 5) + 4), ChatColor.GREEN + " " + (((index * 5) - 5) + 5) + ") " + ChatColor.WHITE + BusinessManager.getIndex(((index * 5) - 5) + 5)}; sender.sendMessage(info); } } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="Hire"> } else if (cmnd.getName().equalsIgnoreCase("b.hire") && args.length > 0) { if (sender instanceof Player && (BusinessManager.isOwner(sender.getName()) || EmployeeManager.isEmployee(sender.getName()))) { String name = args[0]; Player player = Bukkit.getPlayer(name); if (player != null & player.isOnline()) { if (EmployeeManager.isEmployee(sender.getName())) { player.sendMessage(Prefixes.POSITIVE + "You have been invited to join " + EmployeeManager.getEmployee(sender.getName()).getBusiness().getName() + " by " + sender.getName()); sender.sendMessage(Prefixes.NOMINAL + "Invite to the business has been sent."); EmployeeManager.pending.put(player.getName(), EmployeeManager.getEmployee(sender.getName()).getBusiness().getID()); Scheduler.runAcceptance(); } else if (BusinessManager.isOwner(sender.getName())) { player.sendMessage(Prefixes.POSITIVE + "You have been invited to join " + BusinessManager.getBusiness(sender.getName()).getName() + " by " + sender.getName()); sender.sendMessage(Prefixes.NOMINAL + "Invite to the business has been sent."); EmployeeManager.pending.put(player.getName(), BusinessManager.getBusiness(sender.getName()).getID()); Scheduler.runAcceptance(); } } } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="Fire"> } else if (cmnd.getName().equalsIgnoreCase("b.fire") && args.length > 0) { if (sender instanceof Player && (BusinessManager.isOwner(sender.getName()) || Manager.isManager(sender.getName()))) { boolean caught = false; int id = 0; String name = args[0]; try { id = Integer.parseInt(name); } catch (NumberFormatException e) { caught = true; } Business b = null; b = BusinessManager.getBusiness(sender.getName()); if(b == null) Manager.getBusiness(sender.getName()); BusinessFiredEmployeeEvent event = new BusinessFiredEmployeeEvent(b, null); if (!caught) { event.setEmployee(id); Bukkit.getPluginManager().callEvent(event); if (!event.isCancelled()) { b.removeEmployee(event.getEmployee().getID()); Business.businessList.remove(event.getBusiness()); Business.businessList.add(event.getBusiness()); } } else { String ename = Bukkit.getPlayer(name).getName(); event.setEmployee(EmployeeManager.getEmployee(ename)); Bukkit.getPluginManager().callEvent(event); if (!event.isCancelled()) { b.removeEmployee(event.getEmployee().getID()); Business.businessList.remove(event.getBusiness()); Business.businessList.add(event.getBusiness()); } } } else if (!(sender instanceof Player)) { sender.sendMessage(Prefixes.ERROR + "I am having issues finding the correct business and employee"); } // </editor-fold> // <editor-fold desc="Business promote" defaultstate="collapsed"> } else if (cmnd.getName().equalsIgnoreCase("b.promote") && args.length > 0) { Player p = Bukkit.getPlayer(args[0]); if (p != null && BusinessManager.isOwner(sender.getName())) { Manager.addManager(p.getName(), BusinessManager.getBusiness(sender.getName()).getName()); sender.sendMessage(Prefixes.POSITIVE + "You have just promoted " + p.getName() + " to manager."); } else if (Manager.isManager(sender.getName()) && p != null) { Manager.addManager(p.getName(), Manager.getBusiness(sender.getName()).getName()); sender.sendMessage(Prefixes.POSITIVE + "You have just promoted " + p.getName() + " to manager."); } // </editor-fold> // <editor-fold desc="Business demote" defaultstate="collapsed"> } else if (cmnd.getName().equalsIgnoreCase("b.demote") && args.length > 0) { Player p = Bukkit.getPlayer(args[0]); if (p != null && BusinessManager.isOwner(sender.getName())) { if (Manager.isManager(p.getName(), BusinessManager.getBusiness(sender.getName()).getName())) { Manager.removeManager(p.getName(), string); sender.sendMessage(Prefixes.ERROR + "You have just fired " + p.getName() + "!"); } } // </editor-fold> // <editor-fold desc="Toggle" defaultstate="collapsed"> } else if (cmnd.getName().equalsIgnoreCase("b.toggle")) { if (BusinessManager.isOwner(sender.getName())) { sender.sendMessage(Prefixes.NOMINAL + "Current status of salary pay: " + BusinessManager.getBusiness(sender.getName()).toggleSalary()); } // </editor-fold> } else if (cmnd.getName().equalsIgnoreCase("b.salary")) { if (BusinessManager.isOwner(sender.getName()) && args.length > 0) { double newsal = Double.parseDouble(args[0]); BusinessManager.getBusiness(sender.getName()).setSalary(newsal); sender.sendMessage(Prefixes.NOMINAL + "Current salary: " + newsal); } } else if (cmnd.getName().equalsIgnoreCase("b.employee")) { if (args.length == 0) { sender.sendMessage("/============Employees in Business============\\"); for (int id : BusinessManager.getBusiness(sender.getName()).getEmployeeIDs()) { sender.sendMessage(ChatColor.AQUA + "[" + id + "]: " + EmployeeManager.getEmployee(id).getName()); } } } } else { sender.sendMessage(Prefixes.ERROR + ChatColor.translateAlternateColorCodes('&', cmnd.getPermissionMessage())); return false; } return false; } private String asString(int[] a) { String string = ""; int i = 0; for(int j : a) { if(i == 0) { string = j + ""; i++; continue; } string = string.concat(", " + j); } return string; } }