package com.supaham.commons.bukkit.utils; import com.google.common.base.Preconditions; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.util.BlockIterator; import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; public class TargetingUtils { public static Block getTargetBlock(@Nullable Set<Material> transparent, @Nonnull Location location, int maxDistance) { Preconditions.checkNotNull(location, "location cannot be null."); if (maxDistance > 120) { maxDistance = 120; } Block result = null; BlockIterator itr = new BlockIterator(location, 0, maxDistance); while (itr.hasNext()) { result = itr.next(); Material material = result.getType(); if (transparent == null) { if (!material.equals(Material.AIR)) { break; } } else if (!transparent.contains(material)) { break; } } return result; } private TargetingUtils() { throw new AssertionError("Why are you... targeting... me? ayyylmao."); } }