package com.nicewuerfel.blockown.command;
import com.google.common.base.Optional;
import com.nicewuerfel.blockown.InvalidWorldNameException;
import com.nicewuerfel.blockown.Message;
import com.nicewuerfel.blockown.OwnedBlock;
import com.nicewuerfel.blockown.Setting;
import com.nicewuerfel.blockown.User;
import com.nicewuerfel.blockown.WaitType;
import com.nicewuerfel.blockown.database.Database;
import com.nicewuerfel.blockown.protection.Protection;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Set;
public class CE_ShowOwner extends CommandExecutor {
private static final String PARAM_ENTITY = "e";
private static final String PARAM_BLOCK = "b";
public CE_ShowOwner(Setting setting, Database database, Protection protection) {
super(setting, database, protection);
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String cmdName, String[] args) {
if (!isPlayer(sender)) {
return true;
}
Player player = (Player) sender;
if (!setting.isEnabledIn(player.getWorld())) {
player.sendMessage(Message.COMMAND_DISABLED_IN_WORLD.getMessage());
return true;
}
User user = User.getInstance(player.getUniqueId());
if (args.length == 1) {
if (args[0].equalsIgnoreCase(PARAM_ENTITY)) {
if (setting.isWaiting(user, WaitType.SHOW_OWNER_ENTITY)) {
setting.removeWaiting(user);
player.sendMessage(Message.COMMAND_NO_MORE_CLICK_WAITING.getMessage());
} else {
setting.addWaiting(user, WaitType.SHOW_OWNER_ENTITY);
player.sendMessage(Message.COMMAND_SHOWOWNER_CLICK_ENTITY.getMessage());
}
return true;
}
if (args[0].equalsIgnoreCase(PARAM_BLOCK)) {
if (setting.isWaiting(user, WaitType.SHOW_OWNER_BLOCK)) {
setting.removeWaiting(user);
player.sendMessage(Message.COMMAND_NO_MORE_CLICK_WAITING.getMessage());
} else {
setting.addWaiting(user, WaitType.SHOW_OWNER_BLOCK);
player.sendMessage(Message.COMMAND_SHOWOWNER_CLICK_BLOCK.getMessage());
}
return true;
}
}
Block block = player.getTargetBlock((Set<org.bukkit.Material>) null, 20);
if (block != null) {
OwnedBlock ownedBlock = OwnedBlock.newInstance(block);
Optional<User> owner = database.getOwner(ownedBlock);
try {
if (!owner.isPresent()) {
player.sendMessage(Message.COMMAND_SHOWOWNER_BLOCK_UNOWNED
.getMessage(ownedBlock.getMaterial().getName()));
} else {
player.sendMessage(Message.COMMAND_SHOWOWNER_BLOCK_FOUND.getMessage(owner.get().getName(),
ownedBlock.getMaterial().getName()));
}
return true;
} catch (InvalidWorldNameException e) {
// Should never happen
getOutput().printException(
"Exception that shouldn't happen happened in " + getClass().getName(), e);
return false;
}
} else {
player.sendMessage(Message.COMMAND_NOTARGET.getMessage());
return false;
}
}
}