Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / command / defaults / VanillaCommand.java
@vlad20012 vlad20012 on 24 Feb 2017 2 KB initial
package org.bukkit.command.defaults;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;

import java.util.List;

public abstract class VanillaCommand extends Command
{
	static final int MAX_COORD = 30000000;
	static final int MIN_COORD_MINUS_ONE = -30000001;
	static final int MIN_COORD = -30000000;

	protected VanillaCommand(String name)
	{
		super(name);
	}

	protected VanillaCommand(String name, String description, String usageMessage, List<String> aliases)
	{
		super(name, description, usageMessage, aliases);
	}

	public boolean matches(String input)
	{
		return input.equalsIgnoreCase(this.getName());
	}

	protected int getInteger(CommandSender sender, String value, int min)
	{
		return getInteger(sender, value, min, Integer.MAX_VALUE);
	}

	int getInteger(CommandSender sender, String value, int min, int max)
	{
		return getInteger(sender, value, min, max, false);
	}

	int getInteger(CommandSender sender, String value, int min, int max, boolean Throws)
	{
		int i = min;

		try
		{
			i = Integer.valueOf(value);
		} catch(NumberFormatException ex)
		{
			if(Throws)
			{
				throw new NumberFormatException(String.format("%s is not a valid number", value));
			}
		}

		if(i < min)
		{
			i = min;
		}
		else if(i > max)
		{
			i = max;
		}

		return i;
	}

	Integer getInteger(String value)
	{
		try
		{
			return Integer.valueOf(value);
		} catch(NumberFormatException ex)
		{
			return null;
		}
	}

	public static double getRelativeDouble(double original, CommandSender sender, String input)
	{
		if(input.startsWith("~"))
		{
			double value = getDouble(sender, input.substring(1));
			if(value == MIN_COORD_MINUS_ONE)
			{
				return MIN_COORD_MINUS_ONE;
			}
			return original + value;
		}
		else
		{
			return getDouble(sender, input);
		}
	}

	public static double getDouble(CommandSender sender, String input)
	{
		try
		{
			return Double.parseDouble(input);
		} catch(NumberFormatException ex)
		{
			return MIN_COORD_MINUS_ONE;
		}
	}

	public static double getDouble(CommandSender sender, String input, double min, double max)
	{
		double result = getDouble(sender, input);

		// TODO: This should throw an exception instead.
		if(result < min)
		{
			result = min;
		}
		else if(result > max)
		{
			result = max;
		}

		return result;
	}

	String createString(String[] args, int start)
	{
		return createString(args, start, " ");
	}

	String createString(String[] args, int start, String glue)
	{
		StringBuilder string = new StringBuilder();

		for(int x = start; x < args.length; x++)
		{
			string.append(args[x]);
			if(x != args.length - 1)
			{
				string.append(glue);
			}
		}

		return string.toString();
	}
}