package com.w67clement.mineapi;
import com.w67clement.mineapi.system.modules.Module;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
public class MineAPICommand implements TabExecutor
{
private MineAPI plugin;
public MineAPICommand(MineAPI plugin) {
this.plugin = plugin;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command cmd,
String label, String[] args)
{
List<String> suggests = new ArrayList<String>();
if (label.equalsIgnoreCase("MineAPI"))
{
if (args.length == 1)
{
suggests.add("modules");
suggests.add("version");
suggests.add("module");
suggests.add("help");
}
else if (args.length == 2)
{
if (args[0].equalsIgnoreCase("module"))
{
suggests.addAll(MineAPI.getModuleManager().getModules().stream().map(Module::getName).collect(Collectors.toList()));
}
}
}
return null;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label,
String[] args)
{
if (label.equalsIgnoreCase("MineAPI"))
{
if (sender.hasPermission("mineapi.cmd.mineapi"))
{
if (args.length == 0)
{
sender.sendMessage(ChatColor.DARK_AQUA + "MineAPI "
+ ChatColor.GRAY + "v" + ChatColor.GREEN
+ this.plugin.getDescription().getVersion());
if (sender instanceof Player)
{
Player player = (Player) sender;
MineAPI.getNmsManager().getFancyMessage("Author: ")
.color(ChatColor.GRAY).then("w67clement")
.color(ChatColor.RED)
.addHoverMessage(ChatColor.GRAY + "Website: "
+ ChatColor.GREEN
+ "https://w67clement.github.io/" + "\n"
+ ChatColor.GRAY + "My others plugins: "
+ "\n" + ChatColor.GRAY + " - "
+ ChatColor.DARK_AQUA + "Advanced"
+ ChatColor.GREEN + "Sign"
+ ChatColor.DARK_GREEN + "Edit" + "\n"
+ ChatColor.GRAY + " - "
+ ChatColor.DARK_AQUA + "Advanced"
+ ChatColor.DARK_GREEN + "Motd" + "\n"
+ ChatColor.GRAY + " - "
+ ChatColor.GOLD + "Bungee"
+ ChatColor.DARK_AQUA + "Advanced"
+ ChatColor.DARK_GREEN + "Motd" + "\n"
+ ChatColor.GRAY + "And more..." + "\n"
+ ChatColor.GRAY
+ "You can visit my github: https://github.com/w67clement/")
.send(player);
MineAPI.getNmsManager()
.getFancyMessage(
"Click to open the MineAPI page.")
.color(ChatColor.GRAY)
.addLink(
"https://www.spigotmc.org/resources/mineapi.8614/")
.send(player);
MineAPI.getNmsManager().getFancyMessage("Please type: ")
.color(ChatColor.GRAY).then("/MineAPI Help")
.color(ChatColor.RED)
.runCommand("/MineAPI Help")
.then(" to view the help menu.")
.color(ChatColor.GRAY).send(player);
}
else
{
sender.sendMessage(ChatColor.GRAY + "Author: "
+ ChatColor.RED + "w67clement");
sender.sendMessage(ChatColor.GRAY + "Page: "
+ ChatColor.RED
+ "https://www.spigotmc.org/resources/mineapi.8614/");
sender.sendMessage(ChatColor.GRAY + "Please type: "
+ ChatColor.RED + "/MineAPI Help"
+ ChatColor.GRAY + " to view the help menu.");
}
}
else if (args.length == 1)
{
if (args[0].equalsIgnoreCase("help"))
{
// Help menu
this.printHelp(sender);
}
else if (args[0].equalsIgnoreCase("modules"))
{
// Module list
this.onExecuteModulesCommand(sender);
}
else if (args[0].equalsIgnoreCase("module"))
{
// Module usage
sender.sendMessage(ChatColor.DARK_RED + "[Usage] "
+ ChatColor.RED + "/MineAPI module <Module>");
}
else if (args[0].equalsIgnoreCase("version"))
{
// Version
sender.sendMessage(MineAPI.PREFIX + ChatColor.GRAY
+ "Version: " + ChatColor.RED
+ this.plugin.getDescription().getVersion());
}
else
{
// ERROR
sender.sendMessage(ChatColor.DARK_RED + "[Usage] "
+ ChatColor.RED
+ "Please use /MineAPI help to view the sub command list.");
}
}
else if (args.length == 2)
{
if (args[0].equalsIgnoreCase("module"))
{
this.getModuleInformation(sender, args[1]);
}
else
{
sender.sendMessage(ChatColor.DARK_RED + "[Usage] "
+ ChatColor.RED
+ "Please use /MineAPI help to view the sub command list.");
}
}
else
{
sender.sendMessage(ChatColor.DARK_RED + "[Usage] "
+ ChatColor.RED
+ "Please use /MineAPI help to view the sub command list.");
}
}
else
{
sender.sendMessage(ChatColor.DARK_RED + "[Permissions]"
+ ChatColor.RED + " You don't have permissions.");
}
return true;
}
return false;
}
private void printHelp(CommandSender sender)
{
// Header
sender.sendMessage(ChatColor.DARK_AQUA + "\u2726" + ChatColor.AQUA
+ " >================[ " + ChatColor.DARK_AQUA + "MineAPI Help"
+ ChatColor.AQUA + " ]================< " + ChatColor.DARK_AQUA
+ "\u2726");
// Body
if (sender instanceof Player)
{
Player player = (Player) sender;
MineAPI.getNmsManager().getFancyMessage("/MineAPI Help")
.color(ChatColor.RED).suggestCommand("/MineAPI help")
.then(" - Shows the help menu.").color(ChatColor.GRAY)
.send(player);
MineAPI.getNmsManager().getFancyMessage("/MineAPI modules")
.color(ChatColor.RED).suggestCommand("/MineAPI modules")
.then(" - Gets a list of running modules.")
.color(ChatColor.GRAY).send(player);
MineAPI.getNmsManager().getFancyMessage("/MineAPI module <Module>")
.color(ChatColor.RED).suggestCommand("/MineAPI module ")
.then(" - Gets informations of the module.")
.color(ChatColor.GRAY).send(player);
MineAPI.getNmsManager().getFancyMessage("/MineAPI version")
.color(ChatColor.RED).suggestCommand("/MineAPI version")
.then(" - Gets version of MineAPI.").color(ChatColor.GRAY)
.send(player);
}
else
{
sender.sendMessage(ChatColor.RED + "/MineAPI Help" + ChatColor.GRAY
+ " - Shows the help menu.");
sender.sendMessage(ChatColor.RED + "/MineAPI modules"
+ ChatColor.GRAY + " - Gets a list of running modules.");
sender.sendMessage(ChatColor.RED + "/MineAPI module <Module>"
+ ChatColor.GRAY + " - Gets informations of the module.");
sender.sendMessage(ChatColor.RED + "/MineAPI version"
+ ChatColor.GRAY + " - Gets version of MineAPI.");
}
// Footer
sender.sendMessage(ChatColor.DARK_AQUA + "\u2726" + ChatColor.AQUA
+ " >================[ " + ChatColor.DARK_AQUA + "MineAPI Help"
+ ChatColor.AQUA + " ]================< " + ChatColor.DARK_AQUA
+ "\u2726");
}
private void onExecuteModulesCommand(CommandSender sender)
{
String modules = "";
Module module;
List<Module> moduleList = MineAPI.getModuleManager().getModules();
for (int i = 0; i < moduleList.size(); i++)
{
module = moduleList.get(i);
String value = "";
if (module.isEnabled())
{
value = ChatColor.GREEN + module.getName();
}
else
{
value = ChatColor.RED + module.getName();
}
if (i + 1 == moduleList.size())
{
modules = modules + value;
}
else
{
modules = modules + value + ChatColor.RESET + ", ";
}
}
sender.sendMessage(
"MineAPI modules (" + moduleList.size() + "): " + modules);
}
private void getModuleInformation(CommandSender sender, String moduleName)
{
if (MineAPI.getModuleManager().getModule(moduleName) != null)
{
Module module = MineAPI.getModuleManager().getModule(moduleName);
if (module.isEnabled())
{
sender.sendMessage("Informations of the module: "
+ ChatColor.GREEN + module.getName());
}
else
{
sender.sendMessage("Informations of the module: "
+ ChatColor.RED + module.getName());
}
sender.sendMessage("Version: " + ChatColor.GREEN
+ module.getModuleInformations().getVersion());
sender.sendMessage("Description: " + ChatColor.GREEN
+ module.getModuleInformations().getDescription());
sender.sendMessage("Author(s): " + ChatColor.GREEN
+ module.getModuleInformations().getAuthorsInLine());
if (sender instanceof Player)
{
MineAPI.getNmsManager().getFancyMessage("Website: ")
.then("Website of the module").color(ChatColor.GREEN)
.addHoverMessage(ChatColor.GRAY
+ "Please click on this text to open the link.")
.addLink(module.getModuleInformations().getWebSite())
.send((Player) sender);
}
else
{
sender.sendMessage("Website: " + ChatColor.GREEN
+ module.getModuleInformations().getWebSite());
}
}
else
{
sender.sendMessage(ChatColor.DARK_RED + "[Error]" + ChatColor.RED
+ " The module '" + moduleName + "' was not found!");
}
}
}