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)); } }