2014-09-22 13:02:14 +02:00
|
|
|
/*
|
2014-10-12 09:37:36 +02:00
|
|
|
* Copyright (c) IntellectualCrafters - 2014. You are not allowed to distribute
|
|
|
|
* and/or monetize any of our intellectual property. IntellectualCrafters is not
|
|
|
|
* affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
|
|
|
*
|
|
|
|
* >> File = MainCommand.java >> Generated by: Citymonstret at 2014-08-09 01:42
|
2014-09-22 13:02:14 +02:00
|
|
|
*/
|
|
|
|
|
|
|
|
package com.intellectualcrafters.plot.commands;
|
|
|
|
|
2014-10-12 17:26:58 +02:00
|
|
|
import com.intellectualcrafters.plot.C;
|
|
|
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
|
|
|
import com.intellectualcrafters.plot.PlotMain;
|
2014-11-01 16:13:44 +01:00
|
|
|
import com.intellectualcrafters.plot.StringComparsion;
|
2014-11-03 07:53:10 +01:00
|
|
|
|
2014-09-22 13:02:14 +02:00
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
import org.bukkit.command.Command;
|
|
|
|
import org.bukkit.command.CommandExecutor;
|
|
|
|
import org.bukkit.command.CommandSender;
|
2014-11-01 16:13:44 +01:00
|
|
|
import org.bukkit.command.TabCompleter;
|
2014-09-22 13:02:14 +02:00
|
|
|
import org.bukkit.entity.Player;
|
2014-11-03 20:36:50 +01:00
|
|
|
import org.bukkit.util.ChatPaginator;
|
2014-09-22 13:02:14 +02:00
|
|
|
|
2014-10-12 17:26:58 +02:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Arrays;
|
2014-11-01 16:13:44 +01:00
|
|
|
import java.util.List;
|
2014-09-22 13:02:14 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* PlotMain command class
|
2014-10-11 09:33:10 +02:00
|
|
|
*
|
2014-09-22 13:02:14 +02:00
|
|
|
* @author Citymonstret
|
|
|
|
*/
|
2014-11-01 16:13:44 +01:00
|
|
|
public class MainCommand implements CommandExecutor, TabCompleter {
|
2014-09-22 13:02:14 +02:00
|
|
|
|
2014-10-13 19:40:30 +02:00
|
|
|
private static SubCommand[] _subCommands = new SubCommand[] { new Claim(), new Paste(), new Copy(), new Clipboard(), new Auto(), new Home(), new Visit(),
|
2014-10-12 09:37:36 +02:00
|
|
|
new TP(), new Set(), new Clear(), new Delete(), new SetOwner(), new Denied(), new Helpers(), new Trusted(),
|
2014-10-18 04:24:47 +02:00
|
|
|
new Info(), new list(), new Help(), new Debug(), new Schematic(), new plugin(), new Inventory(), new Purge(),
|
2014-10-30 16:16:26 +01:00
|
|
|
new Reload(), new Merge(), new Unlink(), new Kick(), new Setup(), new DebugClaimTest(), new Inbox(), new Comment(), new Swap(), new MusicSubcommand() };
|
2014-09-22 13:02:14 +02:00
|
|
|
|
2014-10-11 09:33:10 +02:00
|
|
|
public static ArrayList<SubCommand> subCommands = new ArrayList<SubCommand>() {
|
|
|
|
{
|
|
|
|
addAll(Arrays.asList(_subCommands));
|
|
|
|
}
|
|
|
|
};
|
2014-09-22 13:02:14 +02:00
|
|
|
|
2014-10-21 11:58:52 +02:00
|
|
|
public static boolean no_permission(Player player, String permission) {
|
|
|
|
PlayerFunctions.sendMessage(player, C.NO_PERMISSION, permission);
|
2014-10-11 09:33:10 +02:00
|
|
|
return false;
|
|
|
|
}
|
2014-09-24 14:21:43 +02:00
|
|
|
|
2014-10-11 09:33:10 +02:00
|
|
|
@Override
|
2014-10-12 09:37:36 +02:00
|
|
|
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
2014-11-03 20:36:50 +01:00
|
|
|
Player player = (sender instanceof Player) ? (Player) sender : null;
|
|
|
|
|
|
|
|
if (!PlotMain.hasPermission(player, "plots.use"))
|
2014-10-21 11:58:52 +02:00
|
|
|
return no_permission(player, "plots.use");
|
2014-11-03 20:36:50 +01:00
|
|
|
|
2014-10-11 09:33:10 +02:00
|
|
|
if ((args.length < 1)
|
2014-10-12 09:37:36 +02:00
|
|
|
|| ((args.length >= 1) && (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("he")))) {
|
2014-10-11 09:33:10 +02:00
|
|
|
if (args.length < 2) {
|
|
|
|
StringBuilder builder = new StringBuilder();
|
|
|
|
builder.append(C.HELP_INFO.s());
|
2014-10-12 09:37:36 +02:00
|
|
|
for (SubCommand.CommandCategory category : SubCommand.CommandCategory.values()) {
|
2014-11-02 20:01:04 +01:00
|
|
|
builder.append("\n").append(C.HELP_INFO_ITEM.s().replaceAll("%category%", category.toString().toLowerCase()).replaceAll("%category_desc%", category.toString()));
|
2014-10-11 09:33:10 +02:00
|
|
|
}
|
|
|
|
PlayerFunctions.sendMessage(player, builder.toString());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
String cat = args[1];
|
|
|
|
SubCommand.CommandCategory cato = null;
|
2014-10-12 09:37:36 +02:00
|
|
|
for (SubCommand.CommandCategory category : SubCommand.CommandCategory.values()) {
|
2014-10-11 09:33:10 +02:00
|
|
|
if (cat.equalsIgnoreCase(category.toString())) {
|
|
|
|
cato = category;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (cato == null) {
|
|
|
|
StringBuilder builder = new StringBuilder();
|
|
|
|
builder.append(C.HELP_INFO.s());
|
2014-10-12 09:37:36 +02:00
|
|
|
for (SubCommand.CommandCategory category : SubCommand.CommandCategory.values()) {
|
2014-11-02 20:01:04 +01:00
|
|
|
builder.append("\n").append(C.HELP_INFO_ITEM.s().replaceAll("%category%", category.toString().toLowerCase()).replaceAll("%category_desc%", category.toString()));
|
2014-10-11 09:33:10 +02:00
|
|
|
}
|
|
|
|
PlayerFunctions.sendMessage(player, builder.toString());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
StringBuilder help = new StringBuilder();
|
2014-11-02 21:49:26 +01:00
|
|
|
int page = 0;
|
2014-11-03 20:36:50 +01:00
|
|
|
|
|
|
|
boolean digit = true;
|
|
|
|
for(char c : args[2].toCharArray())
|
|
|
|
if(!Character.isDigit(c)) {
|
|
|
|
digit = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if(digit) {
|
2014-11-02 21:49:26 +01:00
|
|
|
page = Integer.parseInt(args[2]);
|
2014-11-03 20:36:50 +01:00
|
|
|
if(--page < 0) page = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
for(String string : helpMenu(player, cato, page))
|
|
|
|
help.append(string).append("\n");
|
|
|
|
|
2014-10-11 09:33:10 +02:00
|
|
|
PlayerFunctions.sendMessage(player, help.toString());
|
|
|
|
return true;
|
2014-10-12 09:37:36 +02:00
|
|
|
}
|
|
|
|
else {
|
2014-10-11 09:33:10 +02:00
|
|
|
for (SubCommand command : subCommands) {
|
2014-10-12 09:37:36 +02:00
|
|
|
if (command.cmd.equalsIgnoreCase(args[0]) || command.alias.equalsIgnoreCase(args[0])) {
|
2014-10-11 09:33:10 +02:00
|
|
|
String[] arguments = new String[args.length - 1];
|
2014-11-02 20:01:04 +01:00
|
|
|
System.arraycopy(args, 1, arguments, 0, args.length - 1);
|
2014-10-11 09:33:10 +02:00
|
|
|
if (command.permission.hasPermission(player)) {
|
2014-10-18 20:06:29 +02:00
|
|
|
if (player!=null || !command.isPlayer ) {
|
|
|
|
return command.execute(player, arguments);
|
|
|
|
}
|
|
|
|
else {
|
2014-11-02 20:01:04 +01:00
|
|
|
PlayerFunctions.sendMessage(null, C.IS_CONSOLE);
|
2014-10-18 20:06:29 +02:00
|
|
|
return false;
|
|
|
|
}
|
2014-10-12 09:37:36 +02:00
|
|
|
}
|
|
|
|
else {
|
2014-10-21 11:58:52 +02:00
|
|
|
return no_permission(player, command.permission.permission.toLowerCase());
|
2014-10-11 09:33:10 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
PlayerFunctions.sendMessage(player, C.NOT_VALID_SUBCOMMAND);
|
2014-11-01 16:13:44 +01:00
|
|
|
|
|
|
|
String[] commands = new String[subCommands.size()];
|
|
|
|
for(int x = 0; x < subCommands.size(); x++)
|
|
|
|
commands[x] = subCommands.get(x).cmd;
|
|
|
|
|
|
|
|
PlayerFunctions.sendMessage(player, C.DID_YOU_MEAN, new StringComparsion(args[0], commands).getBestMatch());
|
2014-10-11 09:33:10 +02:00
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2014-09-22 13:02:14 +02:00
|
|
|
|
2014-11-02 21:49:26 +01:00
|
|
|
|
|
|
|
public static List<SubCommand> getCommands(SubCommand.CommandCategory category, Player player) {
|
|
|
|
List<SubCommand> cmds = new ArrayList<>();
|
|
|
|
for(SubCommand c : subCommands)
|
|
|
|
if(c.category == category && c.permission.hasPermission(player))
|
|
|
|
cmds.add(c);
|
|
|
|
return cmds;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
// Current page
|
|
|
|
int page = 0;
|
|
|
|
|
|
|
|
//is a page specified? else use 0
|
|
|
|
if(args.length > 1) {
|
|
|
|
try {
|
|
|
|
page = Integer.parseInt(args[1]);
|
|
|
|
} catch(Exception e) {
|
|
|
|
page = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//Get the total pages
|
|
|
|
int totalPages = ((int) Math.ceil(12 * (PlotMain.getPlotsSorted().size()) / 100));
|
|
|
|
|
|
|
|
if(page > totalPages)
|
|
|
|
page = totalPages;
|
|
|
|
|
|
|
|
//Only display 12!
|
|
|
|
int max = (page * 12) + 12;
|
|
|
|
|
|
|
|
if(max > PlotMain.getPlotsSorted().size())
|
|
|
|
max = PlotMain.getPlotsSorted().size();
|
|
|
|
|
|
|
|
StringBuilder string = new StringBuilder();
|
|
|
|
|
|
|
|
string.append(C.PLOT_LIST_HEADER_PAGED.s().replaceAll("%cur", page + 1 + "").replaceAll("%max", totalPages + 1 + "").replaceAll("%word%", "all") + "\n");
|
|
|
|
Plot p;
|
|
|
|
|
|
|
|
//This might work xD
|
|
|
|
for (int x = (page * 12); x < max; x++) {
|
|
|
|
*/
|
|
|
|
public static ArrayList<String> helpMenu(Player player, final SubCommand.CommandCategory category, int page) {
|
|
|
|
List<SubCommand> commands = getCommands(category, player);
|
2014-11-03 18:05:12 +01:00
|
|
|
//final int totalPages = ((int) Math.ceil(12 * (commands.size()) / 100));
|
2014-11-03 20:36:50 +01:00
|
|
|
int perPage = 5;
|
|
|
|
int totalPages = (int) Math.ceil(commands.size() / perPage);
|
2014-11-02 21:49:26 +01:00
|
|
|
if(page > totalPages)
|
|
|
|
page = totalPages;
|
2014-11-03 20:36:50 +01:00
|
|
|
int max = (page * perPage) + perPage;
|
2014-11-02 21:49:26 +01:00
|
|
|
if(max > commands.size())
|
|
|
|
max = commands.size();
|
|
|
|
ArrayList<String> help = new ArrayList<>(
|
|
|
|
Arrays.asList(
|
|
|
|
t(C.HELP_HEADER.s().replaceAll("%cur", page + 1 + "").replaceAll("%max", totalPages + 1 + "")),
|
|
|
|
t(C.HELP_CATEGORY.s().replaceAll("%category%", category.toString()))
|
|
|
|
));
|
|
|
|
SubCommand cmd;
|
2014-11-03 20:36:50 +01:00
|
|
|
|
|
|
|
String lines = "";
|
|
|
|
for(int x = 0; x < ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH * 0.75; x++) {
|
|
|
|
lines += "-";
|
|
|
|
}
|
|
|
|
|
|
|
|
int start = page * perPage;
|
|
|
|
for(int x = start; x < max; x++) {
|
2014-11-02 21:49:26 +01:00
|
|
|
cmd = subCommands.get(x);
|
|
|
|
String s = t(C.HELP_PAGE.s());
|
|
|
|
s = s.replaceAll("%alias%", cmd.alias);
|
|
|
|
s = s.replaceAll("%usage%", cmd.usage.contains("plot") ? cmd.usage : "/plot " + cmd.usage);
|
|
|
|
s = s.replaceAll("%cmd%", cmd.cmd);
|
|
|
|
s = s.replaceAll("%desc%", cmd.description);
|
2014-11-03 20:36:50 +01:00
|
|
|
|
2014-11-02 21:49:26 +01:00
|
|
|
help.add(s);
|
2014-11-03 20:36:50 +01:00
|
|
|
|
|
|
|
if(x != start && x != max - 1) {
|
|
|
|
help.add(t(C.HELP_ITEM_SEPARATOR.s().replaceAll("%lines", lines)));
|
|
|
|
}
|
|
|
|
|
2014-11-02 21:49:26 +01:00
|
|
|
}
|
2014-10-11 09:33:10 +02:00
|
|
|
if (help.size() < 2) {
|
|
|
|
help.add(t(C.NO_COMMANDS.s()));
|
|
|
|
}
|
|
|
|
return help;
|
|
|
|
}
|
2014-09-22 13:02:14 +02:00
|
|
|
|
2014-10-11 09:33:10 +02:00
|
|
|
private static String t(String s) {
|
|
|
|
return ChatColor.translateAlternateColorCodes('&', s);
|
|
|
|
}
|
2014-09-22 13:02:14 +02:00
|
|
|
|
2014-11-01 16:13:44 +01:00
|
|
|
@Override
|
|
|
|
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) {
|
|
|
|
if(!(commandSender instanceof Player)) return null;
|
|
|
|
Player player = (Player) commandSender;
|
2014-11-03 07:53:10 +01:00
|
|
|
|
|
|
|
if(strings.length < 1) {
|
|
|
|
if (strings.length==0 || "plots".startsWith(s)) {
|
|
|
|
return Arrays.asList(new String[] {"plots"});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (strings.length > 1) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
if (!command.getLabel().equalsIgnoreCase("plots")) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
List<String> tabOptions = new ArrayList<String>();
|
|
|
|
String arg = strings[0].toLowerCase();
|
|
|
|
for (SubCommand cmd : subCommands) {
|
|
|
|
if (cmd.permission.hasPermission(player)) {
|
|
|
|
if (cmd.cmd.startsWith(arg)) {
|
|
|
|
tabOptions.add(cmd.cmd);
|
|
|
|
}
|
|
|
|
else if (cmd.alias.startsWith(arg)) {
|
|
|
|
tabOptions.add(cmd.alias);
|
2014-11-01 16:13:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-11-03 07:53:10 +01:00
|
|
|
if(tabOptions.size()>0) {
|
|
|
|
return tabOptions;
|
|
|
|
}
|
2014-11-01 16:13:44 +01:00
|
|
|
return null;
|
|
|
|
}
|
2014-09-22 13:02:14 +02:00
|
|
|
}
|