/*
* MainCommand.java
*
* Copyright (c) 2015 ITSTAKE
*
* This program is free software: you can redistribute it and/or modify
*
* it under the terms of the GNU General Public License as published by
*
* the Free Software Foundation, either version 3 of the License, or
*
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
*
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package tk.itstake.steakgui.command;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import tk.itstake.steakgui.SteakGUI;
import tk.itstake.steakgui.gui.GUIItem;
import tk.itstake.steakgui.gui.Menu;
import tk.itstake.steakgui.itemtask.ItemTask;
import tk.itstake.steakgui.menueditor.EditorMain;
import tk.itstake.steakgui.util.MenuFileHandler;
import tk.itstake.util.ConfigHandler;
import tk.itstake.util.LanguageHandler;
import tk.itstake.util.MessageHandler;
import java.util.HashMap;
/**
* Created by bexco on 2015-07-26.
*/
public class MainCommand {
static MessageHandler mh = new MessageHandler();
static LanguageHandler lh = new LanguageHandler();
public static boolean runCmd(CommandSender sender, Command cmd, String label, String[] args) {
if(args.length <= 0) {
helpCmd(sender, label);
return true;
} else if(args.length == 1) {
switch(args[0]) {
case "help":
helpCmd(sender, label);
return true;
case "open":
helpCmd(sender, label, "open");
return true;
case "setting":
helpCmd(sender, label, "setting");
return true;
case "create":
helpCmd(sender, label, "create");
return true;
case "delete":
helpCmd(sender, label, "delete");
return true;
case "list":
listCmd(sender);
return true;
case "reload":
reloadCmd(sender);
return true;
default:
helpCmd(sender, label);
return true;
}
} else if(args.length == 2) {
switch(args[0]) {
case "help":
helpCmd(sender, label, args[1]);
return true;
case "open":
openCmd(sender, label, args[1]);
return true;
case "setting":
settingCmd(sender, label, args[1]);
return true;
case "create":
createCmd(sender, label, args[1]);
return true;
case "delete":
deleteCmd(sender, label, args[1]);
return true;
default:
helpCmd(sender, label);
return true;
}
} else if(args.length == 3 && args[0].equals("open")) {
openCmd(sender, label, args[1], args[2]);
return true;
}
return false;
}
private static void reloadCmd(CommandSender sender) {
ConfigHandler.loadConfig();
SteakGUI.lh.languageLoad();
MenuFileHandler.reloadMenu();
mh.sendMessage(sender, lh.getLanguage("command.reloaded"));
}
private static void deleteCmd(CommandSender sender, String name, String arg) {
if((sender instanceof Player && sender.hasPermission("steakgui.setting")) || !(sender instanceof Player)) {
MenuFileHandler.deleteMenu(arg);
mh.sendMessage(sender, lh.getLanguage("menu.deleted", new String[]{arg}));
} else {
mh.sendMessage(sender, lh.getLanguage("nopermission"));
}
}
private static void createCmd(CommandSender sender, String name, String arg) {
if((sender instanceof Player && sender.hasPermission("steakgui.setting")) || !(sender instanceof Player)) {
if(arg.matches("^[a-zA-Z1-9_]*$")) {
HashMap<Integer, GUIItem> itemarray = new HashMap<>();
ItemStack defaultitem = new ItemStack(Material.STONE, 1);
itemarray.put(0, new GUIItem(defaultitem, "", new ItemTask(ItemTask.MESSAGE, new String[]{lh.getLanguage("menu.noitemtask")})));
Menu newmenu = new Menu(arg, arg, 1, itemarray);
MenuFileHandler.saveMenu(newmenu);
mh.sendMessage(sender, lh.getLanguage("menu.created", new String[]{arg}));
} else {
mh.sendMessage(sender, lh.getLanguage("command.notmatchedformat"));
}
} else {
mh.sendMessage(sender, lh.getLanguage("nopermission"));
}
}
private static void settingCmd(CommandSender sender, String name, String arg) {
if(sender instanceof Player && sender.hasPermission("steakgui.setting")) {
if(MenuFileHandler.isMenu(arg)) {
new EditorMain().show(MenuFileHandler.loadMenu(arg), (Player)sender);
} else {
mh.sendMessage(sender, lh.getLanguage("notexistmenu"));
}
} else {
mh.sendMessage(sender, lh.getLanguage("nopermission"));
}
}
private static void openCmd(CommandSender sender, String name, String arg, String arg1) {
if(sender instanceof Player && sender.getName().equals(arg1)) {
final Player target = Bukkit.getPlayer(arg1);
if(target.hasPermission("steakgui.open")) {
if(MenuFileHandler.isMenu(arg)) {
final Menu targetmenu = MenuFileHandler.loadMenu(arg);
if (targetmenu != null) {
Bukkit.getScheduler().runTaskLater(SteakGUI.p, new Runnable() {
@Override
public void run() {
targetmenu.open(target);
}
}, 2);
} else {
mh.sendMessage(target, lh.getLanguage("menu.notexist"));
}
} else {
mh.sendMessage(target, lh.getLanguage("menu.notexist"));
}
} else {
mh.sendMessage(target, lh.getLanguage("nopermission"));
}
} else if(!sender.getName().equals(arg1)) {
if((sender instanceof Player && sender.hasPermission("steakgui.open.others")) || !(sender instanceof Player)) {
Player target = Bukkit.getPlayer(arg1);
if(target.isOnline()) {
if(MenuFileHandler.isMenu(arg)) {
Menu targetmenu = MenuFileHandler.loadMenu(arg);
if (targetmenu != null) {
targetmenu.open(target);
} else {
mh.sendMessage(target, lh.getLanguage("menu.notexist"));
}
} else {
mh.sendMessage(target, lh.getLanguage("menu.notexist"));
}
} else {
mh.sendMessage(target, lh.getLanguage("offlineplayer"));
}
} else {
mh.sendMessage(sender, lh.getLanguage("nopermission"));
}
} else {
mh.sendMessage(sender, lh.getLanguage("noconsole"));
}
}
private static void openCmd(CommandSender sender, String name, String arg) {
if(sender instanceof Player) {
openCmd(sender, name, arg, sender.getName());
} else {
mh.sendMessage(sender, lh.getLanguage("noconsole"));
}
}
private static void listCmd(CommandSender sender) {
if(sender instanceof Player && !((Player)sender).hasPermission("steakgui.setting")) {
mh.sendMessage(sender, lh.getLanguage("nopermission"));
} else {
mh.sendMessage(sender, lh.getLanguage("command.list.intro"));
int ai = 0;
for (String menu : MenuFileHandler.listMenu()) {
mh.sendMessage(sender, lh.getLanguage("command.list.format", new String[]{menu}));
ai++;
}
if (ai == 0) {
mh.sendMessage(sender, lh.getLanguage("command.list.nomenu"));
}
}
}
private static void helpCmd(CommandSender sender, String cmd) {
helpCmd(sender, cmd, "help");
}
private static void helpCmd(CommandSender sender, String cmd, String label) {
Plugin plugin = Bukkit.getPluginManager().getPlugin("SteakGUI");
if(label.equals("help")) {
mh.sendMessage(sender, lh.getLanguage("command.help.intro", new String[]{plugin.getDescription().getVersion()}));
if(sender instanceof Player) {
Player player = (Player)sender;
if(player.hasPermission("steakgui.open")) {
mh.sendMessage(sender, lh.getLanguage("command.help.open", new String[]{cmd}));
} else if(player.hasPermission("steakgui.open.others")) {
mh.sendMessage(sender, lh.getLanguage("command.help.open.others", new String[]{cmd}));
}
if(player.hasPermission("steakgui.admin")) {
mh.sendMessage(sender, lh.getLanguage("command.help.setting", new String[]{cmd}));
mh.sendMessage(sender, lh.getLanguage("command.help.create", new String[]{cmd}));
mh.sendMessage(sender, lh.getLanguage("command.help.delete", new String[]{cmd}));
mh.sendMessage(sender, lh.getLanguage("command.help.list", new String[]{cmd}));
mh.sendMessage(sender, lh.getLanguage("command.help.reload", new String[]{cmd}));
}
} else {
mh.sendMessage(sender, lh.getLanguage("command.help.open.console", new String[]{cmd}));
mh.sendMessage(sender, lh.getLanguage("command.help.create", new String[]{cmd}));
mh.sendMessage(sender, lh.getLanguage("command.help.delete", new String[]{cmd}));
mh.sendMessage(sender, lh.getLanguage("command.help.list", new String[]{cmd}));
mh.sendMessage(sender, lh.getLanguage("command.help.reload", new String[]{cmd}));
}
mh.sendMessage(sender, lh.getLanguage("command.help.author", new String[]{plugin.getDescription().getVersion()}));
} else if(label.equals("open")) {
if(sender instanceof Player) {
Player player = (Player)sender;
if(player.hasPermission("steakgui.open")) {
if(player.hasPermission("steakgui.open.others")) {
mh.sendMessage(player, lh.getLanguage("command.wronguse", new String[]{"/" + cmd + " " + label + " <" + lh.getLanguage("command.wronghelp.arg.menu") + "> [" + lh.getLanguage("command.wronghelp.arg.player") + "]"}));
} else {
mh.sendMessage(player, lh.getLanguage("command.wronguse", new String[]{"/" + cmd + " " + label + " <" + lh.getLanguage("command.wronghelp.arg.menu") + ">"}));
}
} else {
mh.sendMessage(player, lh.getLanguage("nopermission"));
}
} else {
mh.sendConsoleMessage(lh.getLanguage("command.wronguse", new String[]{"/" + cmd + " " + label + " <" + lh.getLanguage("command.wronghelp.arg.menu") + "> <" + lh.getLanguage("command.wronghelp.arg.player") + ">"}));
}
} else if(label.equals("setting")) {
if(sender instanceof Player) {
Player player = (Player)sender;
if(player.hasPermission("steakgui.setting")) {
mh.sendMessage(player, lh.getLanguage("command.wronguse", new String[]{"/" + cmd + " " + label + " <" + lh.getLanguage("command.wronghelp.arg.menu") + ">"}));
} else {
mh.sendMessage(player, lh.getLanguage("nopermission"));
}
} else {
mh.sendConsoleMessage(lh.getLanguage("noconsole"));
}
} else if(label.equals("create")) {
if(sender instanceof Player) {
Player player = (Player)sender;
if(player.hasPermission("steakgui.setting")) {
mh.sendMessage(player, lh.getLanguage("command.wronguse", new String[]{"/" + cmd + " " + label + " <" + lh.getLanguage("command.wronghelp.arg.menu") + ">"}));
} else {
mh.sendMessage(player, lh.getLanguage("nopermission"));
}
} else {
mh.sendConsoleMessage(lh.getLanguage("command.wronguse", new String[]{"/" + cmd + " " + label + " <" + lh.getLanguage("command.wronghelp.arg.menu") + ">"}));
}
} else if(label.equals("delete")) {
if(sender instanceof Player) {
Player player = (Player)sender;
if(player.hasPermission("steakgui.setting")) {
mh.sendMessage(player, lh.getLanguage("command.wronguse", new String[]{"/" + cmd + " " + label + " <" + lh.getLanguage("command.wronghelp.arg.menu") + ">"}));
} else {
mh.sendMessage(player, lh.getLanguage("nopermission"));
}
} else {
mh.sendConsoleMessage(lh.getLanguage("command.wronguse", new String[]{"/" + cmd + " " + label + " <" + lh.getLanguage("command.wronghelp.arg.menu") + ">"}));
}
}
}
}