Java tutorial
/* * This document is a part of the source code and related artifacts for StilesLib, an open source library that * provides a set of commonly-used functions for Bukkit plugins. * * http://github.com/mstiles92/StilesLib * * Copyright (c) 2014 Matthew Stiles (mstiles92) * * Licensed under the Common Development and Distribution License Version 1.0 * You may not use this file except in compliance with this License. * * You may obtain a copy of the CDDL-1.0 License at http://opensource.org/licenses/CDDL-1.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the license. */ package com.mstiles92.plugins.stileslib.commands; import org.apache.commons.lang.Validate; import org.bukkit.command.*; import org.bukkit.plugin.Plugin; import java.util.List; public class CustomCommand extends Command { private Plugin owningPlugin; private CommandExecutor executor; protected CustomCompleter completer; protected CustomCommand(String label, Plugin owner) { super(label); this.executor = owner; this.owningPlugin = owner; this.usageMessage = ""; } @Override public boolean execute(CommandSender sender, String label, String[] args) { boolean success; if (!owningPlugin.isEnabled()) { return false; } if (!testPermission(sender)) { return true; } try { success = executor.onCommand(sender, this, label, args); } catch (Exception e) { throw new CommandException("Unhandled exception executing command '" + label + "' in plugin " + owningPlugin.getDescription().getFullName(), e); } if (!success && usageMessage.length() > 0) { for (String line : usageMessage.replace("<command>", label).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(args, "Arguments cannot be null"); Validate.notNull(alias, "Alias cannot be null"); List<String> completions = null; try { if (completer != null) { completions = completer.onTabComplete(sender, this, alias, args); } else if (executor instanceof TabCompleter) { completions = ((TabCompleter) executor).onTabComplete(sender, this, alias, args); } } catch (Exception e) { 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(), e); } if (completions == null) { return super.tabComplete(sender, alias, args); } return completions; } }