Denizen API Command Template: Difference between revisions

From Citizens Wiki

No edit summary
No edit summary
Line 1: Line 1:
=== YourCommand extends AbstractCommand ===


Below is a command template, ready to copy/paste into your project. You can also view a copy on [http://pastie.org/4368657 Pastie], which is color coded.


Below is a command template, ready to copy/paste into your project.
==== Command Template ====


<pre>
<pre>

Revision as of 01:42, 1 August 2012

YourCommand extends AbstractCommand

Below is a command template, ready to copy/paste into your project. You can also view a copy on Pastie, which is color coded.

Command Template

package net.aufdemrand.denizen.commands.core;

import java.util.logging.Level;

import org.bukkit.Location;

import net.aufdemrand.denizen.bookmarks.BookmarkHelper.BookmarkType;
import net.aufdemrand.denizen.commands.AbstractCommand;
import net.aufdemrand.denizen.scripts.ScriptEntry;
import net.citizensnpcs.command.exception.CommandException;

/**
 * Your command! 
 * This class is a template for a Command in Denizen.
 * 
 * @author You!
 */

public class SampleCommand extends AbstractCommand {

	/* COMMAND_NAME [TYPICAL] (ARGUMENTS) */

	/* 
	 * Arguments: [] - Required, () - Optional 
	 * [TYPICAL] argument with a description if necessary.
	 * (ARGUMENTS) should be clear and concise.
	 *   
	 * Modifiers:
	 * (MODIFIER:VALUE) These are typically advanced usage arguments.
	 * (DURATION:#) They should always be optional. Use standard modifiers
	 *   already established if at all possible.
	 *   
	 * Example Usage:
	 * COMMAND_NAME VALUE
	 * COMMAND_NAME DIFFERENTVALUE OPTIONALVALUE
	 * COMMAND_NAME ANOTHERVALUE 'MODIFIER:Show one-line examples.'
	 * 
	 */

	@SuppressWarnings("unused") // This should be removed in your code.
	@Override
	
	// This is the method that is called when your command is ready to be executed.
	public boolean execute(ScriptEntry theEntry) throws CommandException {

		/* Initialize variables */ 

	    	// Typically initialized as null and filled as needed. Remember: theEntry
		    // contains some information passed through the execution process.
			Boolean requiredVariable = null;
			Location sampleBookmark = null;
			
		/* Match arguments to expected variables */
		if (theEntry.arguments() != null) {
			for (String thisArgument : theEntry.arguments()) {
				
				// Do this routine for each argument supplied.
				
				if (plugin.debugMode) plugin.getLogger().info("Processing command " + theEntry.getCommand() + " argument: " + thisArgument);

				// Includes are some typical arguments. Modify/add code to handle your command needs.
				
				// If argument is a number.
				if (thisArgument.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")) {
					
				}
					
				// If argument is a valid bookmark, set location.
				else if (plugin.bookmarks.exists(theEntry.getDenizen(), thisArgument)) {
					if (plugin.debugMode) plugin.getLogger().log(Level.INFO, "...matched bookmark '" + thisArgument + "'.");
					sampleBookmark = plugin.bookmarks.get(theEntry.getDenizen(), thisArgument, BookmarkType.LOCATION);
				} else if (thisArgument.split(":").length == 2) {
					if (plugin.bookmarks.exists(thisArgument.split(":")[0], thisArgument.split(":")[1]))
						if (plugin.debugMode) plugin.getLogger().log(Level.INFO, "...matched bookmark '" + thisArgument.split(":")[0] + "'.");
						sampleBookmark = plugin.bookmarks.get(thisArgument.split(":")[0], thisArgument.split(":")[1], BookmarkType.LOCATION);
				}			
				
				// If argument is a modifier.
				else if (thisArgument.toUpperCase().contains("MODIFIER:")) {
					if (plugin.debugMode) plugin.getLogger().log(Level.INFO, "...matched modifier '" + thisArgument.split(":")[0].toUpperCase() + "'.");

					// Insert code here.
					
				}
				
				// If can't match to anything...
				// This isn't always possible, depending on the arguments your command uses, but nice if you can.
				else {
					if (plugin.debugMode) plugin.getLogger().log(Level.INFO, "...unable to match argument!");
				}
				
			}	
		}

		/* Execute the command, if all required variables are filled. */
		if (requiredVariable != null) {
			
			
			// Execution process.
			// Do whatever you want the command to do, here.
			
			
			/* Command has sucessfully finished */
			return true;
		}
			
		// else...
		
		/* Error processing */
			
			// Processing has gotten to here, there's probably not been enough arguments. 
			// Let's alert the console.
		if (plugin.debugMode) if (theEntry.arguments() == null)
			throw new CommandException("...not enough arguments! Usage: SAMPLECOMMAND [TYPICAL] (ARGUMENTS)");
			
		return false;
	}

  // You can include more methods in this class if necessary. Or not. :)

}