package net.minecraft.command; import com.google.common.base.Functions; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.primitives.Doubles; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.UUID; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.server.MinecraftServer; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import net.minecraft.util.ResourceLocation; public abstract class CommandBase implements ICommand { private static IAdminCommand theAdmin; private static final String __OBFID = "CL_00001739"; /** * Return the required permission level for this command. */ public int getRequiredPermissionLevel() { return 4; } public List getCommandAliases() { return Collections.emptyList(); } /** * Returns true if the given command sender is allowed to use this command. */ public boolean canCommandSenderUseCommand(ICommandSender sender) { return sender.canCommandSenderUseCommand(this.getRequiredPermissionLevel(), this.getCommandName()); } public List addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) { return null; } public static int parseInt(String input) throws NumberInvalidException { try { return Integer.parseInt(input); } catch (NumberFormatException var2) { throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {input}); } } public static int parseInt(String input, int min) throws NumberInvalidException { return parseInt(input, min, Integer.MAX_VALUE); } public static int parseInt(String input, int min, int max) throws NumberInvalidException { int var3 = parseInt(input); if (var3 < min) { throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {Integer.valueOf(var3), Integer.valueOf(min)}); } else if (var3 > max) { throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {Integer.valueOf(var3), Integer.valueOf(max)}); } else { return var3; } } public static long parseLong(String input) throws NumberInvalidException { try { return Long.parseLong(input); } catch (NumberFormatException var2) { throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {input}); } } public static long parseLong(String input, long min, long max) throws NumberInvalidException { long var5 = parseLong(input); if (var5 < min) { throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {Long.valueOf(var5), Long.valueOf(min)}); } else if (var5 > max) { throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {Long.valueOf(var5), Long.valueOf(max)}); } else { return var5; } } public static BlockPos func_175757_a(ICommandSender sender, String[] args, int p_175757_2_, boolean p_175757_3_) throws NumberInvalidException { BlockPos var4 = sender.getPosition(); return new BlockPos(func_175769_b((double)var4.getX(), args[p_175757_2_], -30000000, 30000000, p_175757_3_), func_175769_b((double)var4.getY(), args[p_175757_2_ + 1], 0, 256, false), func_175769_b((double)var4.getZ(), args[p_175757_2_ + 2], -30000000, 30000000, p_175757_3_)); } public static double parseDouble(String input) throws NumberInvalidException { try { double var1 = Double.parseDouble(input); if (!Doubles.isFinite(var1)) { throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {input}); } else { return var1; } } catch (NumberFormatException var3) { throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {input}); } } public static double parseDouble(String input, double min) throws NumberInvalidException { return parseDouble(input, min, Double.MAX_VALUE); } public static double parseDouble(String input, double min, double max) throws NumberInvalidException { double var5 = parseDouble(input); if (var5 < min) { throw new NumberInvalidException("commands.generic.double.tooSmall", new Object[] {Double.valueOf(var5), Double.valueOf(min)}); } else if (var5 > max) { throw new NumberInvalidException("commands.generic.double.tooBig", new Object[] {Double.valueOf(var5), Double.valueOf(max)}); } else { return var5; } } public static boolean parseBoolean(String input) throws CommandException { if (!input.equals("true") && !input.equals("1")) { if (!input.equals("false") && !input.equals("0")) { throw new CommandException("commands.generic.boolean.invalid", new Object[] {input}); } else { return false; } } else { return true; } } /** * Returns the given ICommandSender as a EntityPlayer or throw an exception. */ public static EntityPlayerMP getCommandSenderAsPlayer(ICommandSender sender) throws PlayerNotFoundException { if (sender instanceof EntityPlayerMP) { return (EntityPlayerMP)sender; } else { throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.", new Object[0]); } } public static EntityPlayerMP getPlayer(ICommandSender sender, String username) throws PlayerNotFoundException { EntityPlayerMP var2 = PlayerSelector.matchOnePlayer(sender, username); if (var2 == null) { try { var2 = MinecraftServer.getServer().getConfigurationManager().func_177451_a(UUID.fromString(username)); } catch (IllegalArgumentException var4) { ; } } if (var2 == null) { var2 = MinecraftServer.getServer().getConfigurationManager().getPlayerByUsername(username); } if (var2 == null) { throw new PlayerNotFoundException(); } else { return var2; } } public static Entity func_175768_b(ICommandSender p_175768_0_, String p_175768_1_) throws EntityNotFoundException { return func_175759_a(p_175768_0_, p_175768_1_, Entity.class); } public static Entity func_175759_a(ICommandSender p_175759_0_, String p_175759_1_, Class p_175759_2_) throws EntityNotFoundException { Object var3 = PlayerSelector.func_179652_a(p_175759_0_, p_175759_1_, p_175759_2_); MinecraftServer var4 = MinecraftServer.getServer(); if (var3 == null) { var3 = var4.getConfigurationManager().getPlayerByUsername(p_175759_1_); } if (var3 == null) { try { UUID var5 = UUID.fromString(p_175759_1_); var3 = var4.getEntityFromUuid(var5); if (var3 == null) { var3 = var4.getConfigurationManager().func_177451_a(var5); } } catch (IllegalArgumentException var6) { throw new EntityNotFoundException("commands.generic.entity.invalidUuid", new Object[0]); } } if (var3 != null && p_175759_2_.isAssignableFrom(var3.getClass())) { return (Entity)var3; } else { throw new EntityNotFoundException(); } } public static List func_175763_c(ICommandSender p_175763_0_, String p_175763_1_) throws EntityNotFoundException { return (List)(PlayerSelector.hasArguments(p_175763_1_) ? PlayerSelector.func_179656_b(p_175763_0_, p_175763_1_, Entity.class) : Lists.newArrayList(new Entity[] {func_175768_b(p_175763_0_, p_175763_1_)})); } public static String getPlayerName(ICommandSender sender, String query) throws PlayerNotFoundException { try { return getPlayer(sender, query).getName(); } catch (PlayerNotFoundException var3) { if (PlayerSelector.hasArguments(query)) { throw var3; } else { return query; } } } public static String func_175758_e(ICommandSender p_175758_0_, String p_175758_1_) throws EntityNotFoundException { try { return getPlayer(p_175758_0_, p_175758_1_).getName(); } catch (PlayerNotFoundException var5) { try { return func_175768_b(p_175758_0_, p_175758_1_).getUniqueID().toString(); } catch (EntityNotFoundException var4) { if (PlayerSelector.hasArguments(p_175758_1_)) { throw var4; } else { return p_175758_1_; } } } } public static IChatComponent getChatComponentFromNthArg(ICommandSender sender, String[] args, int p_147178_2_) throws CommandException { return getChatComponentFromNthArg(sender, args, p_147178_2_, false); } public static IChatComponent getChatComponentFromNthArg(ICommandSender sender, String[] args, int index, boolean p_147176_3_) throws PlayerNotFoundException { ChatComponentText var4 = new ChatComponentText(""); for (int var5 = index; var5 < args.length; ++var5) { if (var5 > index) { var4.appendText(" "); } Object var6 = new ChatComponentText(args[var5]); if (p_147176_3_) { IChatComponent var7 = PlayerSelector.func_150869_b(sender, args[var5]); if (var7 == null) { if (PlayerSelector.hasArguments(args[var5])) { throw new PlayerNotFoundException(); } } else { var6 = var7; } } var4.appendSibling((IChatComponent)var6); } return var4; } public static String func_180529_a(String[] p_180529_0_, int p_180529_1_) { StringBuilder var2 = new StringBuilder(); for (int var3 = p_180529_1_; var3 < p_180529_0_.length; ++var3) { if (var3 > p_180529_1_) { var2.append(" "); } String var4 = p_180529_0_[var3]; var2.append(var4); } return var2.toString(); } public static CommandBase.CoordinateArg func_175770_a(double p_175770_0_, String p_175770_2_, boolean p_175770_3_) throws NumberInvalidException { return func_175767_a(p_175770_0_, p_175770_2_, -30000000, 30000000, p_175770_3_); } public static CommandBase.CoordinateArg func_175767_a(double p_175767_0_, String p_175767_2_, int p_175767_3_, int p_175767_4_, boolean p_175767_5_) throws NumberInvalidException { boolean var6 = p_175767_2_.startsWith("~"); if (var6 && Double.isNaN(p_175767_0_)) { throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {Double.valueOf(p_175767_0_)}); } else { double var7 = 0.0D; if (!var6 || p_175767_2_.length() > 1) { boolean var9 = p_175767_2_.contains("."); if (var6) { p_175767_2_ = p_175767_2_.substring(1); } var7 += parseDouble(p_175767_2_); if (!var9 && !var6 && p_175767_5_) { var7 += 0.5D; } } if (p_175767_3_ != 0 || p_175767_4_ != 0) { if (var7 < (double)p_175767_3_) { throw new NumberInvalidException("commands.generic.double.tooSmall", new Object[] {Double.valueOf(var7), Integer.valueOf(p_175767_3_)}); } if (var7 > (double)p_175767_4_) { throw new NumberInvalidException("commands.generic.double.tooBig", new Object[] {Double.valueOf(var7), Integer.valueOf(p_175767_4_)}); } } return new CommandBase.CoordinateArg(var7 + (var6 ? p_175767_0_ : 0.0D), var7, var6); } } public static double func_175761_b(double p_175761_0_, String p_175761_2_, boolean p_175761_3_) throws NumberInvalidException { return func_175769_b(p_175761_0_, p_175761_2_, -30000000, 30000000, p_175761_3_); } public static double func_175769_b(double base, String input, int min, int max, boolean centerBlock) throws NumberInvalidException { boolean var6 = input.startsWith("~"); if (var6 && Double.isNaN(base)) { throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {Double.valueOf(base)}); } else { double var7 = var6 ? base : 0.0D; if (!var6 || input.length() > 1) { boolean var9 = input.contains("."); if (var6) { input = input.substring(1); } var7 += parseDouble(input); if (!var9 && !var6 && centerBlock) { var7 += 0.5D; } } if (min != 0 || max != 0) { if (var7 < (double)min) { throw new NumberInvalidException("commands.generic.double.tooSmall", new Object[] {Double.valueOf(var7), Integer.valueOf(min)}); } if (var7 > (double)max) { throw new NumberInvalidException("commands.generic.double.tooBig", new Object[] {Double.valueOf(var7), Integer.valueOf(max)}); } } return var7; } } /** * Gets the Item specified by the given text string. First checks the item registry, then tries by parsing the * string as an integer ID (deprecated). Warns the sender if we matched by parsing the ID. Throws if the item * wasn't found. Returns the item if it was found. */ public static Item getItemByText(ICommandSender sender, String id) throws NumberInvalidException { ResourceLocation var2 = new ResourceLocation(id); Item var3 = (Item)Item.itemRegistry.getObject(var2); if (var3 == null) { throw new NumberInvalidException("commands.give.notFound", new Object[] {var2}); } else { return var3; } } /** * Gets the Block specified by the given text string. First checks the block registry, then tries by parsing the * string as an integer ID (deprecated). Warns the sender if we matched by parsing the ID. Throws if the block * wasn't found. Returns the block if it was found. */ public static Block getBlockByText(ICommandSender sender, String id) throws NumberInvalidException { ResourceLocation var2 = new ResourceLocation(id); if (!Block.blockRegistry.containsKey(var2)) { throw new NumberInvalidException("commands.give.notFound", new Object[] {var2}); } else { Block var3 = (Block)Block.blockRegistry.getObject(var2); if (var3 == null) { throw new NumberInvalidException("commands.give.notFound", new Object[] {var2}); } else { return var3; } } } /** * Creates a linguistic series joining the input objects together. Examples: 1) {} --> "", 2) {"Steve"} --> * "Steve", 3) {"Steve", "Phil"} --> "Steve and Phil", 4) {"Steve", "Phil", "Mark"} --> "Steve, Phil and Mark" */ public static String joinNiceString(Object[] elements) { StringBuilder var1 = new StringBuilder(); for (int var2 = 0; var2 < elements.length; ++var2) { String var3 = elements[var2].toString(); if (var2 > 0) { if (var2 == elements.length - 1) { var1.append(" and "); } else { var1.append(", "); } } var1.append(var3); } return var1.toString(); } public static IChatComponent join(List components) { ChatComponentText var1 = new ChatComponentText(""); for (int var2 = 0; var2 < components.size(); ++var2) { if (var2 > 0) { if (var2 == components.size() - 1) { var1.appendText(" and "); } else if (var2 > 0) { var1.appendText(", "); } } var1.appendSibling((IChatComponent)components.get(var2)); } return var1; } /** * Creates a linguistic series joining together the elements of the given collection. Examples: 1) {} --> "", 2) * {"Steve"} --> "Steve", 3) {"Steve", "Phil"} --> "Steve and Phil", 4) {"Steve", "Phil", "Mark"} --> "Steve, Phil * and Mark" */ public static String joinNiceStringFromCollection(Collection strings) { return joinNiceString(strings.toArray(new String[strings.size()])); } public static List func_175771_a(String[] p_175771_0_, int p_175771_1_, BlockPos p_175771_2_) { if (p_175771_2_ == null) { return null; } else { String var3; if (p_175771_0_.length - 1 == p_175771_1_) { var3 = Integer.toString(p_175771_2_.getX()); } else if (p_175771_0_.length - 1 == p_175771_1_ + 1) { var3 = Integer.toString(p_175771_2_.getY()); } else { if (p_175771_0_.length - 1 != p_175771_1_ + 2) { return null; } var3 = Integer.toString(p_175771_2_.getZ()); } return Lists.newArrayList(new String[] {var3}); } } /** * Returns true if the given substring is exactly equal to the start of the given string (case insensitive). */ public static boolean doesStringStartWith(String original, String region) { return region.regionMatches(true, 0, original, 0, original.length()); } /** * 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). */ public static List getListOfStringsMatchingLastWord(String[] args, String ... possibilities) { return func_175762_a(args, Arrays.asList(possibilities)); } public static List func_175762_a(String[] p_175762_0_, Collection p_175762_1_) { String var2 = p_175762_0_[p_175762_0_.length - 1]; ArrayList var3 = Lists.newArrayList(); if (!p_175762_1_.isEmpty()) { Iterator var4 = Iterables.transform(p_175762_1_, Functions.toStringFunction()).iterator(); while (var4.hasNext()) { String var5 = (String)var4.next(); if (doesStringStartWith(var2, var5)) { var3.add(var5); } } if (var3.isEmpty()) { var4 = p_175762_1_.iterator(); while (var4.hasNext()) { Object var6 = var4.next(); if (var6 instanceof ResourceLocation && doesStringStartWith(var2, ((ResourceLocation)var6).getResourcePath())) { var3.add(String.valueOf(var6)); } } } } return var3; } /** * Return whether the specified command parameter index is a username parameter. */ public boolean isUsernameIndex(String[] args, int index) { return false; } public static void notifyOperators(ICommandSender sender, ICommand command, String msgFormat, Object ... msgParams) { notifyOperators(sender, command, 0, msgFormat, msgParams); } public static void notifyOperators(ICommandSender sender, ICommand command, int p_152374_2_, String msgFormat, Object ... msgParams) { if (theAdmin != null) { theAdmin.notifyOperators(sender, command, p_152374_2_, msgFormat, msgParams); } } /** * Sets the static IAdminCommander. */ public static void setAdminCommander(IAdminCommand command) { theAdmin = command; } public int compareTo(ICommand p_compareTo_1_) { return this.getCommandName().compareTo(p_compareTo_1_.getCommandName()); } public int compareTo(Object p_compareTo_1_) { return this.compareTo((ICommand)p_compareTo_1_); } public static class CoordinateArg { private final double field_179633_a; private final double field_179631_b; private final boolean field_179632_c; private static final String __OBFID = "CL_00002365"; protected CoordinateArg(double p_i46051_1_, double p_i46051_3_, boolean p_i46051_5_) { this.field_179633_a = p_i46051_1_; this.field_179631_b = p_i46051_3_; this.field_179632_c = p_i46051_5_; } public double func_179628_a() { return this.field_179633_a; } public double func_179629_b() { return this.field_179631_b; } public boolean func_179630_c() { return this.field_179632_c; } } }