package net.minecraft.server;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nullable;
// CraftBukkit start
import org.bukkit.craftbukkit.command.ProxiedNativeCommandSender;
import org.bukkit.craftbukkit.command.VanillaCommandWrapper;
// CraftBukkit end
public class CommandExecute extends CommandAbstract {
public CommandExecute() {}
public String getCommand() {
return "execute";
}
public int a() {
return 2;
}
public String getUsage(ICommandListener icommandlistener) {
return "commands.execute.usage";
}
public void execute(final MinecraftServer minecraftserver, final ICommandListener icommandlistener, String[] astring) throws CommandException {
if (astring.length < 5) {
throw new ExceptionUsage("commands.execute.usage", new Object[0]);
} else {
final Entity entity = a(minecraftserver, icommandlistener, astring[0], Entity.class);
final double d0 = b(entity.locX, astring[1], false);
final double d1 = b(entity.locY, astring[2], false);
final double d2 = b(entity.locZ, astring[3], false);
final BlockPosition blockposition = new BlockPosition(d0, d1, d2);
byte b0 = 4;
if ("detect".equals(astring[4]) && astring.length > 10) {
World world = entity.getWorld();
double d3 = b(d0, astring[5], false);
double d4 = b(d1, astring[6], false);
double d5 = b(d2, astring[7], false);
Block block = b(icommandlistener, astring[8]);
BlockPosition blockposition1 = new BlockPosition(d3, d4, d5);
if (!world.isLoaded(blockposition1)) {
throw new CommandException("commands.execute.failed", new Object[] { "detect", entity.getName()});
}
IBlockData iblockdata = world.getType(blockposition1);
if (iblockdata.getBlock() != block) {
throw new CommandException("commands.execute.failed", new Object[] { "detect", entity.getName()});
}
if (!CommandAbstract.b(block, astring[9]).apply(iblockdata)) {
throw new CommandException("commands.execute.failed", new Object[] { "detect", entity.getName()});
}
b0 = 10;
}
String s = a(astring, b0);
// CraftBukkit start - name class
class ProxyListener implements ICommandListener {
private final ICommandListener base = icommandlistener;
// CraftBukkit end
public String getName() {
return entity.getName();
}
public IChatBaseComponent getScoreboardDisplayName() {
return entity.getScoreboardDisplayName();
}
public void sendMessage(IChatBaseComponent ichatbasecomponent) {
icommandlistener.sendMessage(ichatbasecomponent);
}
public boolean a(int i, String s) {
return icommandlistener.a(i, s);
}
public BlockPosition getChunkCoordinates() {
return blockposition;
}
public Vec3D d() {
return new Vec3D(d0, d1, d2);
}
public World getWorld() {
return entity.world;
}
public Entity f() {
return entity;
}
public boolean getSendCommandFeedback() {
return minecraftserver == null || minecraftserver.worldServer[0].getGameRules().getBoolean("commandBlockOutput");
}
public void a(CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult, int i) {
entity.a(commandobjectiveexecutor_enumcommandresult, i);
}
public MinecraftServer B_() {
return entity.B_();
}
};
ICommandListener icommandlistener1 = new ProxyListener(); // CraftBukkit
ICommandHandler icommandhandler = minecraftserver.getCommandHandler();
try {
// CraftBukkit start
org.bukkit.command.CommandSender sender = null;
ICommandListener listener = icommandlistener;
while (sender == null) {
if (listener instanceof DedicatedServer) {
sender = minecraftserver.console;
} else if (listener instanceof RemoteControlCommandListener) {
sender = minecraftserver.remoteConsole;
} else if (listener instanceof CommandBlockListenerAbstract) {
sender = ((CommandBlockListenerAbstract) listener).sender;
} else if (listener instanceof ProxyListener) {
listener = ((ProxyListener) listener).base; // Search deeper
} else if (VanillaCommandWrapper.lastSender != null) {
sender = VanillaCommandWrapper.lastSender;
} else if (listener.f() != null) {
sender = listener.f().getBukkitEntity();
} else {
throw new CommandException("Unhandled executor " + icommandlistener.getClass().getSimpleName(), new Object[0]);
}
}
int i = CommandBlockListenerAbstract.executeCommand(icommandlistener1, new ProxiedNativeCommandSender(icommandlistener1, sender, entity.getBukkitEntity()), s);
// CraftBukkit end
if (i < 1) {
throw new CommandException("commands.execute.allInvocationsFailed", new Object[] { s});
}
} catch (Throwable throwable) {
// CraftBukkit start
if (throwable instanceof CommandException) {
throw (CommandException) throwable;
}
// CraftBukkit end
throw new CommandException("commands.execute.failed", new Object[] { s, entity.getName()});
}
}
}
public List<String> tabComplete(MinecraftServer minecraftserver, ICommandListener icommandlistener, String[] astring, @Nullable BlockPosition blockposition) {
return astring.length == 1 ? a(astring, minecraftserver.getPlayers()) : (astring.length > 1 && astring.length <= 4 ? a(astring, 1, blockposition) : (astring.length > 5 && astring.length <= 8 && "detect".equals(astring[4]) ? a(astring, 5, blockposition) : (astring.length == 9 && "detect".equals(astring[4]) ? a(astring, (Collection) Block.REGISTRY.keySet()) : Collections.<String>emptyList()))); // CraftBukkit - decompile error
}
public boolean isListStart(String[] astring, int i) {
return i == 0;
}
// CraftBukkit start - fix decompiler error
@Override
public int compareTo(ICommand o) {
return a((ICommand) o);
}
// CraftBukkit end
}