package in.twizmwaz.cardinal.module.modules.regions.type.combinations;
import in.twizmwaz.cardinal.module.ModuleCollection;
import in.twizmwaz.cardinal.module.modules.regions.RegionModule;
import in.twizmwaz.cardinal.module.modules.regions.parsers.modifiers.CombinationParser;
import in.twizmwaz.cardinal.module.modules.regions.type.BlockRegion;
import in.twizmwaz.cardinal.module.modules.regions.type.PointRegion;
import org.bukkit.block.Block;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class ComplementRegion extends RegionModule {
private ModuleCollection<RegionModule> regions;
public ComplementRegion(String name, ModuleCollection<RegionModule> regions) {
super(name);
this.regions = regions;
}
public ComplementRegion(CombinationParser parser) {
this(parser.getName(), parser.getRegions());
}
public ModuleCollection<RegionModule> getRegions() {
return regions;
}
@Override
public boolean contains(Vector vector) {
if (!regions.get(0).contains(vector)) return false;
for (int i = 1; i < regions.size(); i ++) {
if (regions.get(i).contains(vector)) return false;
}
return true;
}
@Override
public PointRegion getRandomPoint() {
while (true) {
Random random = new Random();
PointRegion point = regions.get(0).getRandomPoint();
if (this.contains(point)) {
return point;
}
}
}
@Override
public BlockRegion getCenterBlock() {
return regions.get(0).getCenterBlock();
}
@Override
public List<Block> getBlocks() {
List<Block> results = new ArrayList<>();
try {
results.addAll(regions.get(0).getBlocks());
for (int i = 1; i < regions.size(); i++) {
results.removeAll(regions.get(i).getBlocks());
}
} catch (IndexOutOfBoundsException e) {
}
return results;
}
}