package me.beastman3226.bc.commands;
import java.util.ArrayList;
import me.beastman3226.bc.BusinessCore.Information;
import me.beastman3226.bc.business.BusinessManager;
import me.beastman3226.bc.job.Job;
import me.beastman3226.bc.job.JobManager;
import me.beastman3226.bc.player.EmployeeManager;
import me.beastman3226.bc.util.Prefixes;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* Handles commands relating to jobs
*
* @author beastman3226
*/
public class JobCommandHandler implements CommandExecutor {
private static JobCommandHandler instance = null;
protected JobCommandHandler() {}
public static JobCommandHandler getInstance() {
if(instance == null) {
instance = new JobCommandHandler();
}
return instance;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String string, String[] args) {
if (sender.hasPermission(cmd.getPermission())) {
if (cmd.getName().equalsIgnoreCase("j.open") && args.length > 1) {
if (sender instanceof Player) {
double pay = 0.0;
try {
pay = Double.parseDouble(args[0]);
} catch (NumberFormatException nfe) {
sender.sendMessage(Prefixes.ERROR + "The first argument must be a number!!");
return false;
}
String description = "";
for (String s : args) {
if (s.equalsIgnoreCase(args[0])) {
continue;
}
description = description + " " + s;
}
JobManager.createJob((Player) sender, description, pay);
sender.sendMessage(Prefixes.NOMINAL + "Successfully created job with description: " + description);
} else {
sender.sendMessage(Prefixes.ERROR + "I need a location to create a job.");
return false;
}
} else if (cmd.getName().equalsIgnoreCase("j.claim") && args.length > 0) {
if (sender instanceof Player && (EmployeeManager.isEmployee(sender.getName()) || BusinessManager.isOwner(sender.getName()))) {
int id = 0;
try {
id = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
sender.sendMessage(Prefixes.ERROR + "Your first argument must be a number.");
return false;
}
if (JobManager.isIssuer(sender.getName())
|| JobManager.doesBelongToBusiness(EmployeeManager.getEmployee(sender.getName()), JobManager.getJob(id))
|| JobManager.doesBelongToBusiness(BusinessManager.getBusiness(sender.getName()), JobManager.getJob(id))) {
sender.sendMessage(Prefixes.ERROR + "You cannot claim job from your own business!");
return false;
}
if (JobManager.claimJob(EmployeeManager.getEmployee(sender.getName()), JobManager.getJob(id))) {
sender.sendMessage(Prefixes.NOMINAL + "Successfully claimed job " + id + " with description: " + JobManager.getJob(id).getDescription());
} else {
sender.sendMessage(Prefixes.ERROR + "You either already have an open job or a job with that ID doesn't exist");
return false;
}
} else {
sender.sendMessage(Prefixes.ERROR + "I need you to be an employee of a business.");
return false;
}
} else if (cmd.getName().equalsIgnoreCase("j.list") && args.length >= 0) {
int page = 0;
if (args.length > 0) {
try {
page = Integer.valueOf(args[0]);
} catch (NumberFormatException nfe) {
}
}
sender.sendMessage(ChatColor.DARK_AQUA + "|==========Non-Claimed Job List==========|");
sender.sendMessage(JobManager.listJobs(page));
sender.sendMessage(ChatColor.DARK_AQUA + "Try /j.list [pagenumber] to see more jobs!");
} else if (cmd.getName().equalsIgnoreCase("j.complete") && args.length >= 0) {
if (sender instanceof Player && JobManager.isIssuer(sender.getName())) {
int id = 0;
try {
id = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
Job j = JobManager.getJob(sender.getName());
if (JobManager.completeJob(EmployeeManager.getEmployee(j.getEmployee()), j)) {
sender.sendMessage(Prefixes.POSITIVE + "Successful completion of job!");
} else {
return false;
}
} catch (NullPointerException npe) {
Job j = JobManager.getJob(sender.getName());
if (JobManager.completeJob(EmployeeManager.getEmployee(j.getEmployee()), j)) {
sender.sendMessage(Prefixes.POSITIVE + "Successful completion of job!");
} else {
return false;
}
}
Job j = JobManager.getJob(id);
if (JobManager.completeJob(EmployeeManager.getEmployee(j.getEmployee()), j)) {
sender.sendMessage(Prefixes.POSITIVE + "Successful completion of job!");
} else {
return false;
}
}
} else if (cmd.getName().equalsIgnoreCase("j.me")) {
if (EmployeeManager.isEmployee(sender.getName())) {
Job j = JobManager.getJob(EmployeeManager.getEmployee(sender.getName()).getCurrentJob());
if(j == null) {
return false;
}
sender.sendMessage(ChatColor.DARK_GREEN + "|==========Current Job==========|");
sender.sendMessage(ChatColor.GREEN + "Job ID:" + ChatColor.WHITE + " " + j.getID());
sender.sendMessage(ChatColor.GREEN + "Issued By:" + ChatColor.WHITE + " " + j.getPlayer());
sender.sendMessage(ChatColor.GREEN + "Description:" + ChatColor.WHITE + " " + j.getDescription());
sender.sendMessage(ChatColor.GREEN + "Payment:" + ChatColor.WHITE + " " + j.getPayment() + " " + Information.eco.currencyNamePlural());
sender.sendMessage(ChatColor.GREEN + "Location:" + ChatColor.WHITE + " " + locToString(j.getLocation()) + " in world " + j.getLocation().getWorld().getName());
} else if (JobManager.isIssuer(sender.getName())) {
if (args.length == 0) {
sender.sendMessage(ChatColor.DARK_BLUE + "|==========Your Jobs==========|");
ArrayList<String> info = new ArrayList<String>();
for (Job j : JobManager.getJobs(sender.getName())) {
info.add(ChatColor.BLUE + "#" + j.getID() + ":" + ChatColor.WHITE + " " + j.getDescription());
}
for (String s : info) {
sender.sendMessage(s);
}
} else if (args.length >= 1) {
int id = 0;
try {
id = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
sender.sendMessage(ChatColor.DARK_BLUE + "|==========Your Jobs==========|");
ArrayList<String> info = new ArrayList<String>();
for (Job j : JobManager.getJobs(sender.getName())) {
info.add(ChatColor.BLUE + "#" + j.getID() + ":" + ChatColor.WHITE + " " + j.getDescription());
}
for (String s : info) {
sender.sendMessage(s);
}
return true;
}
if (JobManager.getJob(id) != null) {
Job j = JobManager.getJob(id);
sender.sendMessage(ChatColor.DARK_GREEN + "|==========Job #" + id + "==========|");
sender.sendMessage(ChatColor.GREEN + "Job ID:" + ChatColor.WHITE + " " + j.getID());
sender.sendMessage(ChatColor.GREEN + "Issued By:" + ChatColor.WHITE + " " + j.getPlayer());
sender.sendMessage(ChatColor.GREEN + "Description:" + ChatColor.WHITE + " " + j.getDescription());
sender.sendMessage(ChatColor.GREEN + "Payment:" + ChatColor.WHITE + " " + j.getPayment() + " " + Information.eco.currencyNamePlural());
sender.sendMessage(ChatColor.GREEN + "Location:" + ChatColor.WHITE + " " + locToString(j.getLocation()) + " in world " + j.getLocation().getWorld().getName());
}
}
}
} else if (cmd.getName().equalsIgnoreCase("j.id") && args.length >= 1) {
int id = 0;
try {
id = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
sender.sendMessage(Prefixes.ERROR + "Must be a number!");
return false;
}
Job j = JobManager.getJob(id);
if (j != null) {
sender.sendMessage(ChatColor.DARK_BLUE + "|==========Job #" + id + "==========|");
sender.sendMessage(ChatColor.BLUE + "Job ID:" + ChatColor.WHITE + " " + j.getID());
sender.sendMessage(ChatColor.BLUE + "Issued By:" + ChatColor.WHITE + " " + j.getPlayer());
sender.sendMessage(ChatColor.BLUE + "Description:" + ChatColor.WHITE + " " + j.getDescription());
sender.sendMessage(ChatColor.BLUE + "Payment:" + ChatColor.WHITE + " " + j.getPayment() + " " + Information.eco.currencyNamePlural());
sender.sendMessage(ChatColor.BLUE + "Location:" + ChatColor.WHITE + " " + locToString(j.getLocation()) + " in world " + j.getLocation().getWorld().getName());
} else {
sender.sendMessage(Prefixes.ERROR + "That is not a proper id.");
return false;
}
} else {
sender.sendMessage(Prefixes.ERROR + "Probably wrong number of arguments.");
return false;
}
} else {
sender.sendMessage(Prefixes.ERROR + ChatColor.translateAlternateColorCodes('&', cmd.getPermissionMessage()));
}
return true;
}
private String locToString(Location loc) {
return loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ();
}
}