package net.minecraft.command.server;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.command.WrongUsageException;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.stats.Achievement;
import net.minecraft.stats.AchievementList;
import net.minecraft.stats.StatBase;
import net.minecraft.stats.StatList;
public class CommandAchievement extends CommandBase
{
private static final String __OBFID = "CL_00000113";
public String getCommandName()
{
return "achievement";
}
/**
* Return the required permission level for this command.
*/
public int getRequiredPermissionLevel()
{
return 2;
}
public String getCommandUsage(ICommandSender sender)
{
return "commands.achievement.usage";
}
public void processCommand(ICommandSender sender, String[] args)
{
if (args.length >= 2)
{
StatBase statbase = StatList.getOneShotStat(args[1]);
if (statbase == null && !args[1].equals("*"))
{
throw new CommandException("commands.achievement.unknownAchievement", new Object[] {args[1]});
}
EntityPlayerMP entityplayermp;
if (args.length >= 3)
{
entityplayermp = getPlayer(sender, args[2]);
}
else
{
entityplayermp = getCommandSenderAsPlayer(sender);
}
if (args[0].equalsIgnoreCase("give"))
{
if (statbase == null)
{
Iterator iterator = AchievementList.achievementList.iterator();
while (iterator.hasNext())
{
Achievement achievement = (Achievement)iterator.next();
entityplayermp.triggerAchievement(achievement);
}
notifyOperators(sender, this, "commands.achievement.give.success.all", new Object[] {entityplayermp.getCommandSenderName()});
}
else
{
if (statbase instanceof Achievement)
{
Achievement achievement2 = (Achievement)statbase;
ArrayList arraylist;
for (arraylist = Lists.newArrayList(); achievement2.parentAchievement != null && !entityplayermp.getStatFile().hasAchievementUnlocked(achievement2.parentAchievement); achievement2 = achievement2.parentAchievement)
{
arraylist.add(achievement2.parentAchievement);
}
Iterator iterator1 = Lists.reverse(arraylist).iterator();
while (iterator1.hasNext())
{
Achievement achievement1 = (Achievement)iterator1.next();
entityplayermp.triggerAchievement(achievement1);
}
}
entityplayermp.triggerAchievement(statbase);
notifyOperators(sender, this, "commands.achievement.give.success.one", new Object[] {entityplayermp.getCommandSenderName(), statbase.func_150955_j()});
}
return;
}
}
throw new WrongUsageException("commands.achievement.usage", new Object[0]);
}
/**
* Adds the strings available in this command to the given list of tab completion options.
*/
public List addTabCompletionOptions(ICommandSender sender, String[] args)
{
if (args.length == 1)
{
/**
* Returns a List of strings (chosen from the given strings) which the last word in the given string array
* is a beginning-match for. (Tab completion).
*/
return getListOfStringsMatchingLastWord(args, new String[] {"give"});
}
else if (args.length != 2)
{
return args.length == 3 ? getListOfStringsMatchingLastWord(args, MinecraftServer.getServer().getAllUsernames()) : null;
}
else
{
ArrayList arraylist = Lists.newArrayList();
Iterator iterator = StatList.allStats.iterator();
while (iterator.hasNext())
{
StatBase statbase = (StatBase)iterator.next();
arraylist.add(statbase.statId);
}
/**
* Returns a List of strings (chosen from the given string iterable) which the last word in the given string
* array is a beginning-match for. (Tab completion).
*/
return getListOfStringsFromIterableMatchingLastWord(args, arraylist);
}
}
/**
* Return whether the specified command parameter index is a username parameter.
*/
public boolean isUsernameIndex(String[] args, int index)
{
return index == 2;
}
}