Java tutorial
/* * This file is part of Keyle's CommandFramework * * Copyright (C) 2011-2013 Keyle * Keyle's CommandFramework is licensed under the GNU Lesser General Public License. * * Keyle's CommandFramework 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. * * Keyle's CommandFramework 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 de.keyle.command.framework; import org.apache.commons.lang.Validate; import org.bukkit.command.Command; import org.bukkit.command.*; import org.bukkit.plugin.Plugin; import java.util.List; public class BukkitCommand extends Command { private final Plugin owningPlugin; private CommandExecutor executor; protected BukkitCompleter completer; protected BukkitCommand(String command, Plugin owningPlugin) { super(command); this.executor = owningPlugin; this.owningPlugin = owningPlugin; this.usageMessage = ""; } @Override public boolean execute(CommandSender sender, String commandLabel, String[] args) { boolean success; if (!owningPlugin.isEnabled()) { return false; } if (!testPermission(sender)) { return true; } try { success = executor.onCommand(sender, this, commandLabel, args); } catch (Throwable ex) { throw new CommandException("Unhandled exception executing command '" + commandLabel + "' in plugin " + owningPlugin.getDescription().getFullName(), ex); } if (!success && usageMessage.length() > 0) { for (String line : usageMessage.replace("<command>", commandLabel).split("\n")) { sender.sendMessage(line); } } return success; } @Override public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws CommandException, IllegalArgumentException { Validate.notNull(sender, "Sender cannot be null!"); Validate.notNull(alias, "Alias cannot be null!"); Validate.notNull(args, "Arguments cannot be null!"); List<String> completions = null; try { if (completer != null) { completions = completer.onTabComplete(sender, this, alias, args); } if (completions == null && executor instanceof TabCompleter) { completions = ((TabCompleter) executor).onTabComplete(sender, this, alias, args); } } catch (Throwable throwable) { StringBuilder message = new StringBuilder(); message.append("Unhandled exception during tab completion for command \"/").append(alias).append(' '); for (String arg : args) { message.append(arg).append(' '); } message.deleteCharAt(message.length() - 1).append("\" in plugin ") .append(owningPlugin.getDescription().getFullName()); throw new CommandException(message.toString(), throwable); } if (completions == null) { return super.tabComplete(sender, alias, args); } return completions; } }