package tc.oc.pgm.filters.query; import java.util.Optional; import org.bukkit.Location; import org.bukkit.block.BlockState; import org.bukkit.event.Event; import org.bukkit.material.MaterialData; import static com.google.common.base.Preconditions.checkNotNull; public class PlayerBlockEventQuery extends PlayerEventQuery implements IPlayerBlockEventQuery { private final BlockState block; public PlayerBlockEventQuery(IPlayerQuery player, Event event, BlockState block) { super(player, event); this.block = checkNotNull(block); } public static IBlockQuery of(BlockState block, Optional<? extends Event> event, Optional<? extends IPlayerQuery> player) { return player.<IBlockQuery>map(p -> new PlayerBlockEventQuery(p, event.get(), block)) .orElseGet(() -> BlockEventQuery.of(block, event)); } public static IBlockEventQuery of(BlockState block, Event event, Optional<? extends IPlayerQuery> player) { return player.<IBlockEventQuery>map(p -> new PlayerBlockEventQuery(p, event, block)) .orElseGet(() -> new BlockEventQuery(event, block)); } @Override public BlockState getBlock() { return block; } @Override public Location getLocation() { return block.getLocation(); } @Override public MaterialData getMaterial() { return block.getMaterialData(); } @Override public int randomSeed() { return IPlayerBlockEventQuery.super.randomSeed(); } }