package com.nyancraft.reportrts.command.sub; import com.nyancraft.reportrts.RTSFunctions; import com.nyancraft.reportrts.RTSPermissions; import com.nyancraft.reportrts.ReportRTS; import com.nyancraft.reportrts.data.NotificationType; import com.nyancraft.reportrts.event.TicketUnclaimEvent; import com.nyancraft.reportrts.persistence.DataProvider; import com.nyancraft.reportrts.util.BungeeCord; import com.nyancraft.reportrts.util.Message; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.io.IOException; public class UnclaimTicket { private static ReportRTS plugin = ReportRTS.getPlugin(); private static DataProvider data = plugin.getDataProvider(); /** * Initial handling of the Unclaim sub-command. * @param sender player that sent the command * @param args arguments * @return true if command handled correctly */ public static boolean handleCommand(CommandSender sender, String[] args) { if(args.length < 2) return false; if(!RTSPermissions.canClaimTicket(sender)) return true; if(!RTSFunctions.isNumber(args[1])) { sender.sendMessage(Message.errorTicketNaN(args[1])); return true; } int ticketId = Integer.parseInt(args[1]); if(!plugin.tickets.containsKey(ticketId) || plugin.tickets.get(ticketId).getStatus() != 1) { sender.sendMessage(Message.ticketNotClaimed(ticketId)); return true; } // CONSOLE overrides all. if(sender instanceof Player) { if(!((Player)sender).getUniqueId().equals(plugin.tickets.get(ticketId).getStaffUuid()) && !RTSPermissions.canBypassClaim(sender)) return true; } switch(data.setTicketStatus(ticketId, (sender instanceof Player) ? ((Player) sender).getUniqueId() : data.getConsole().getUuid(), sender.getName(), 0, false, System.currentTimeMillis() / 1000)) { case -3: // Ticket does not exist. sender.sendMessage(Message.ticketNotExists(ticketId)); return true; case -2: // Ticket status incompatibilities. sender.sendMessage(Message.errorTicketStatus()); return true; case -1: // Username is invalid or does not exist. sender.sendMessage(Message.error("Your user does not exist in the user table and was not successfully created.")); return true; case 0: // No row was affected... sender.sendMessage(Message.error("No entries were affected. Check console for errors.")); return true; case 1: // Everything went swimmingly if case is 1. break; default: sender.sendMessage(Message.error("A invalid result code has occurred.")); return true; } Player player = sender.getServer().getPlayer(plugin.tickets.get(ticketId).getUUID()); if(player != null) { player.sendMessage(Message.ticketUnclaimUser(plugin.tickets.get(ticketId).getStaffName(), ticketId)); player.sendMessage(Message.ticketText(plugin.tickets.get(ticketId).getMessage())); } plugin.tickets.get(ticketId).setStatus(0); try { BungeeCord.globalNotify(Message.ticketUnclaim(plugin.tickets.get(ticketId).getStaffName(), args[1]), ticketId, NotificationType.MODIFICATION); } catch (IOException e) { e.printStackTrace(); } RTSFunctions.messageStaff(Message.ticketUnclaim(plugin.tickets.get(ticketId).getStaffName(), args[1]), false); plugin.getServer().getPluginManager().callEvent(new TicketUnclaimEvent(plugin.tickets.get(ticketId), plugin.tickets.get(ticketId).getStaffName(), sender)); plugin.tickets.get(ticketId).setStaffName(null); return true; } }