package de.oppermann.bastian.spleef.commands;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.google.common.collect.Sets;
import de.oppermann.bastian.spleef.SpleefMain;
import de.oppermann.bastian.spleef.arena.SpleefArena;
import de.oppermann.bastian.spleef.storage.ConfigAccessor;
import de.oppermann.bastian.spleef.util.Language;
import de.oppermann.bastian.spleef.util.SimpleBlock;
import de.oppermann.bastian.spleef.util.command.AbstractArgument;
import de.oppermann.bastian.spleef.util.command.SpleefCommand.CommandHelp;
import de.oppermann.bastian.spleef.util.command.SpleefCommand.CommandResult;
public class AddJoinSignArgument extends AbstractArgument {
/**
* Class constructor.
*/
public AddJoinSignArgument() {
super(new String[]{Language.COMMAND_ADD_JOIN_SIGN.toString()}, 2, "spleef.addjoinsign", null, Language.COMMAND_ADD_JOIN_SIGN_DESCRIPTION.toString());
}
/*
* (non-Javadoc)
* @see de.oppermann.bastian.spleef.util.command.AbstractArgument#executeForPlayer(org.bukkit.entity.Player, org.bukkit.command.Command, java.lang.String[])
*/
@SuppressWarnings("deprecation") // who cares?!?
@Override
public CommandResult executeForPlayer(Player player, Command cmd, String[] args) {
if (!player.hasPermission(getPermission())) {
return CommandResult.NO_PERMISSION;
}
if (args.length == 2) {
SpleefArena arena = null;
for (SpleefArena sArena : SpleefArena.getSpleefArenas()) {
if (sArena.getName().equals(args[1])) {
arena = sArena;
break;
}
}
if (arena == null) {
player.sendMessage(Language.NO_ARENA_WITH_NAME.toString().replace("%arena%", args[1]));
return CommandResult.SUCCESS;
}
Block target = null;
try {
target = player.getTargetBlock((HashSet<Byte>) null, 20);
} catch (IllegalStateException e) {
// :(
}
if (!(target.getState() instanceof Sign)) {
player.sendMessage(Language.MUST_LOOK_AT_SIGN.toString());
return CommandResult.SUCCESS;
}
for (SpleefArena arenas : SpleefArena.getSpleefArenas()) {
if (arenas.isJoinSign(target)) {
player.sendMessage(Language.ALREADY_JOIN_SIGN.toString());
return CommandResult.SUCCESS;
}
}
ArrayList<SimpleBlock> signs = arena.getJoinSigns();
SimpleBlock block = new SimpleBlock(target.getWorld().getName(), target.getX(), target.getY(), target.getZ());
ConfigAccessor accessor = SpleefMain.getInstance().getArenaAccessor(arena.getName());
accessor.getConfig().set("joinsigns." + (signs.size() + 1) + ".world", block.getWorldName());
accessor.getConfig().set("joinsigns." + (signs.size() + 1) + ".x", block.getX());
accessor.getConfig().set("joinsigns." + (signs.size() + 1) + ".y", block.getY());
accessor.getConfig().set("joinsigns." + (signs.size() + 1) + ".z", block.getZ());
accessor.saveConfig();
arena.addJoinSign(target);
return CommandResult.SUCCESS;
}
return CommandResult.ERROR; // should never happen
}
/*
* (non-Javadoc)
* @see de.oppermann.bastian.spleef.util.command.AbstractArgument#executeForServer(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String[])
*/
@Override
public CommandResult executeForServer(CommandSender sender, Command cmd, String[] args) {
return CommandResult.ONLY_PLAYER; // the console can't join an arena
}
/*
* (non-Javadoc)
* @see de.oppermann.bastian.spleef.util.command.AbstractArgument#onTabComplete(org.bukkit.entity.Player, java.lang.String[])
*/
@Override
public List<String> onTabComplete(Player sender, String[] args) {
ArrayList<String> list = new ArrayList<>();
if (args.length == 1) {
list.add(Language.COMMAND_ADD_JOIN_SIGN.toString());
}
if (args.length == 2) {
list.addAll(Sets.newHashSet(SpleefArena.getArenaNames()));
}
return list;
}
/*
* (non-Javadoc)
* @see de.oppermann.bastian.spleef.util.command.AbstractArgument#getCommandHelp()
*/
@Override
public CommandHelp getCommandHelp() {
return new CommandHelp("/%cmd% " + Language.COMMAND_ADD_JOIN_SIGN + " " + Language.ARGUMENT_ARENA_OPTIONAL, getDescription());
}
}