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.Permission;
import com.nicewuerfel.blockown.Setting;
import com.nicewuerfel.blockown.User;
import com.nicewuerfel.blockown.database.Database;
import com.nicewuerfel.blockown.database.DatabaseAction;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import java.util.Iterator;
public class UnownRunner implements Runnable {
private final Setting setting;
private final Database database;
private final Iterator<Block> region;
private final User user;
private final Player player;
public UnownRunner(Setting setting, Database database, Iterator<Block> region, User user,
Player player) {
this.setting = setting;
this.database = database;
this.region = region;
this.user = user;
this.player = player;
}
@Override
public void run() {
Block bukkitBlock;
OwnedBlock block;
int ownedCounter = 0;
while (region.hasNext()) {
bukkitBlock = region.next();
block = OwnedBlock.newInstance(bukkitBlock);
try {
if (bukkitBlock.getType() != org.bukkit.Material.AIR
&& setting.isOwnEnabled(block.getMaterial())) {
Optional<User> owner = database.getOwner(block);
if (!owner.isPresent()) {
continue;
}
if (owner.get().equals(user) || (player.hasPermission(Permission.ADMIN_UNOWN.toString())
&& setting.isIgnoring(user))) {
DatabaseAction databaseAction = DatabaseAction.newUnownInstance(block);
database.enqueue(databaseAction);
ownedCounter++;
}
}
} catch (InvalidWorldNameException e) {
// Should never happen, since world name is from bukkit Block instance
setting.getOutput().printError("This should never happen! UnownRunner", e);
}
}
player.sendMessage(Message.COMMAND_UNOWN_SELECTION_SUCCESS.getMessage(ownedCounter));
}
}