001 package org.bukkit.command.defaults; 002 003 import com.google.common.collect.ImmutableList; 004 import org.apache.commons.lang.Validate; 005 import org.bukkit.Bukkit; 006 import org.bukkit.ChatColor; 007 import org.bukkit.World; 008 import org.bukkit.command.Command; 009 import org.bukkit.command.CommandSender; 010 import org.bukkit.util.StringUtil; 011 012 import java.util.ArrayList; 013 import java.util.List; 014 import java.util.Random; 015 016 public class WeatherCommand extends VanillaCommand { 017 private static final List<String> WEATHER_TYPES = ImmutableList.of("clear", "rain", "thunder"); 018 019 public WeatherCommand() { 020 super("weather"); 021 this.description = "Changes the weather"; 022 this.usageMessage = "/weather <clear/rain/thunder> [duration in seconds]"; 023 this.setPermission("bukkit.command.weather"); 024 } 025 026 @Override 027 public boolean execute(CommandSender sender, String currentAlias, String[] args) { 028 if (!testPermission(sender)) return true; 029 if (args.length == 0) { 030 sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); 031 return false; 032 } 033 034 int duration = (300 + new Random().nextInt(600)) * 20; 035 if (args.length >= 2) { 036 duration = getInteger(sender, args[1], 1, 1000000) * 20; 037 } 038 039 World world = Bukkit.getWorlds().get(0); 040 041 world.setWeatherDuration(duration); 042 world.setThunderDuration(duration); 043 044 if ("clear".equalsIgnoreCase(args[0])) { 045 world.setStorm(false); 046 world.setThundering(false); 047 Command.broadcastCommandMessage(sender, "Changed weather to clear for " + (duration / 20) + " seconds."); 048 } else if ("rain".equalsIgnoreCase(args[0])) { 049 world.setStorm(true); 050 world.setThundering(false); 051 Command.broadcastCommandMessage(sender, "Changed weather to rainy for " + (duration / 20) + " seconds."); 052 } else if ("thunder".equalsIgnoreCase(args[0])) { 053 world.setStorm(true); 054 world.setThundering(true); 055 Command.broadcastCommandMessage(sender, "Changed weather to thundering " + (duration / 20) + " seconds."); 056 } 057 058 return true; 059 } 060 061 @Override 062 public List<String> tabComplete(CommandSender sender, String alias, String[] args) { 063 Validate.notNull(sender, "Sender cannot be null"); 064 Validate.notNull(args, "Arguments cannot be null"); 065 Validate.notNull(alias, "Alias cannot be null"); 066 067 if (args.length == 1) { 068 return StringUtil.copyPartialMatches(args[0], WEATHER_TYPES, new ArrayList<String>(WEATHER_TYPES.size())); 069 } 070 071 return ImmutableList.of(); 072 } 073 }