001    package org.bukkit.command.defaults;
002    
003    import java.util.List;
004    
005    import org.bukkit.command.Command;
006    import org.bukkit.command.CommandSender;
007    
008    public abstract class VanillaCommand extends Command {
009        static final int MAX_COORD = 30000000;
010        static final int MIN_COORD_MINUS_ONE = -30000001;
011        static final int MIN_COORD = -30000000;
012    
013        protected VanillaCommand(String name) {
014            super(name);
015        }
016    
017        protected VanillaCommand(String name, String description, String usageMessage, List<String> aliases) {
018            super(name, description, usageMessage, aliases);
019        }
020    
021        public boolean matches(String input) {
022            return input.equalsIgnoreCase(this.getName());
023        }
024    
025        protected int getInteger(CommandSender sender, String value, int min) {
026            return getInteger(sender, value, min, Integer.MAX_VALUE);
027        }
028    
029        int getInteger(CommandSender sender, String value, int min, int max) {
030            return getInteger(sender, value, min, max, false);
031        }
032    
033        int getInteger(CommandSender sender, String value, int min, int max, boolean Throws) {
034            int i = min;
035    
036            try {
037                i = Integer.valueOf(value);
038            } catch (NumberFormatException ex) {
039                if (Throws) {
040                    throw new NumberFormatException(String.format("%s is not a valid number", value));
041                }
042            }
043    
044            if (i < min) {
045                i = min;
046            } else if (i > max) {
047                i = max;
048            }
049    
050            return i;
051        }
052    
053        Integer getInteger(String value) {
054            try {
055                return Integer.valueOf(value);
056            } catch (NumberFormatException ex) {
057                return null;
058            }
059        }
060    
061        public static double getRelativeDouble(double original, CommandSender sender, String input) {
062            if (input.startsWith("~")) {
063                double value = getDouble(sender, input.substring(1));
064                if (value == MIN_COORD_MINUS_ONE) {
065                    return MIN_COORD_MINUS_ONE;
066                }
067                return original + value;
068            } else {
069                return getDouble(sender, input);
070            }
071        }
072    
073        public static double getDouble(CommandSender sender, String input) {
074            try {
075                return Double.parseDouble(input);
076            } catch (NumberFormatException ex) {
077                return MIN_COORD_MINUS_ONE;
078            }
079        }
080    
081        public static double getDouble(CommandSender sender, String input, double min, double max) {
082            double result = getDouble(sender, input);
083    
084            // TODO: This should throw an exception instead.
085            if (result < min) {
086                result = min;
087            } else if (result > max) {
088                result = max;
089            }
090    
091            return result;
092        }
093    
094        String createString(String[] args, int start) {
095            return createString(args, start, " ");
096        }
097    
098        String createString(String[] args, int start, String glue) {
099            StringBuilder string = new StringBuilder();
100    
101            for (int x = start; x < args.length; x++) {
102                string.append(args[x]);
103                if (x != args.length - 1) {
104                    string.append(glue);
105                }
106            }
107    
108            return string.toString();
109        }
110    }