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.command.Command; 008 import org.bukkit.command.CommandSender; 009 import org.bukkit.util.StringUtil; 010 import org.bukkit.Difficulty; 011 012 import java.util.ArrayList; 013 import java.util.List; 014 015 public class DifficultyCommand extends VanillaCommand { 016 private static final List<String> DIFFICULTY_NAMES = ImmutableList.of("peaceful", "easy", "normal", "hard"); 017 018 public DifficultyCommand() { 019 super("difficulty"); 020 this.description = "Sets the game difficulty"; 021 this.usageMessage = "/difficulty <new difficulty> "; 022 this.setPermission("bukkit.command.difficulty"); 023 } 024 025 @Override 026 public boolean execute(CommandSender sender, String currentAlias, String[] args) { 027 if (!testPermission(sender)) return true; 028 if (args.length != 1 || args[0].length() == 0) { 029 sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); 030 return false; 031 } 032 033 Difficulty difficulty = Difficulty.getByValue(getDifficultyForString(sender, args[0])); 034 035 if (Bukkit.isHardcore()) { 036 difficulty = Difficulty.HARD; 037 } 038 039 Bukkit.getWorlds().get(0).setDifficulty(difficulty); 040 041 int levelCount = 1; 042 if (Bukkit.getAllowNether()) { 043 Bukkit.getWorlds().get(levelCount).setDifficulty(difficulty); 044 levelCount++; 045 } 046 047 if (Bukkit.getAllowEnd()) { 048 Bukkit.getWorlds().get(levelCount).setDifficulty(difficulty); 049 } 050 051 Command.broadcastCommandMessage(sender, "Set difficulty to " + difficulty.toString()); 052 return true; 053 } 054 055 protected int getDifficultyForString(CommandSender sender, String name) { 056 if (name.equalsIgnoreCase("peaceful") || name.equalsIgnoreCase("p")) { 057 return 0; 058 } else if (name.equalsIgnoreCase("easy") || name.equalsIgnoreCase("e")) { 059 return 1; 060 } else if (name.equalsIgnoreCase("normal") || name.equalsIgnoreCase("n")) { 061 return 2; 062 } else if (name.equalsIgnoreCase("hard") || name.equalsIgnoreCase("h")) { 063 return 3; 064 } else { 065 return getInteger(sender, name, 0, 3); 066 } 067 } 068 069 @Override 070 public List<String> tabComplete(CommandSender sender, String alias, String[] args) { 071 Validate.notNull(sender, "Sender cannot be null"); 072 Validate.notNull(args, "Arguments cannot be null"); 073 Validate.notNull(alias, "Alias cannot be null"); 074 075 if (args.length == 1) { 076 return StringUtil.copyPartialMatches(args[0], DIFFICULTY_NAMES, new ArrayList<String>(DIFFICULTY_NAMES.size())); 077 } 078 079 return ImmutableList.of(); 080 } 081 }