package tc.oc.commons.bukkit.util;
import java.util.Collection;
import java.util.Collections;
import javax.annotation.Nullable;
import com.google.common.collect.ImmutableList;
import org.bukkit.entity.AreaEffectCloud;
import org.bukkit.entity.TippedArrow;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.Potion;
import org.bukkit.potion.PotionBrew;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
/** Potion-related utilities. */
public class PotionUtils {
public static Collection<PotionEffect> effects(PotionData data) {
return Potion.getBrewer().getEffects(data.getType(), data.isUpgraded(), data.isExtended());
}
public static Collection<PotionEffect> effects(@Nullable PotionBrew potion, @Nullable Collection<PotionEffect> customEffects) {
final ImmutableList.Builder<PotionEffect> builder = ImmutableList.builder();
if(potion != null) {
builder.addAll(potion.effects());
}
if(customEffects != null) {
builder.addAll(customEffects);
}
return builder.build();
}
public static Collection<PotionEffect> effects(@Nullable PotionData potion, @Nullable Collection<PotionEffect> customEffects) {
final ImmutableList.Builder<PotionEffect> builder = ImmutableList.builder();
if(potion != null) {
builder.addAll(effects(potion));
}
if(customEffects != null) {
builder.addAll(customEffects);
}
return builder.build();
}
public static Collection<PotionEffect> effects(PotionMeta potion) {
return effects(potion.getPotionBrew(), potion.getCustomEffects());
}
public static Collection<PotionEffect> effects(ItemStack potion) {
return potion.getItemMeta() instanceof PotionMeta ? effects((PotionMeta) potion.getItemMeta())
: Collections.emptyList();
}
public static Collection<PotionEffect> effects(AreaEffectCloud cloud) {
return effects(cloud.getBasePotionData(), cloud.getCustomEffects());
}
public static Collection<PotionEffect> effects(TippedArrow arrow) {
return effects(arrow.getBasePotionData(), arrow.getCustomEffects());
}
public static @Nullable PotionEffectType primaryEffectType(ItemStack potion) {
for(PotionEffect effect : effects(potion)) {
return effect.getType();
}
return null;
}
}