package joshie.progression.criteria.filters.block; import joshie.progression.api.ProgressionAPI; import joshie.progression.api.criteria.IFilter; import joshie.progression.api.criteria.IFilterProvider; import joshie.progression.api.criteria.IFilterType; import joshie.progression.helpers.ItemHelper; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public abstract class FilterBaseBlock implements IFilter<ItemStack, ItemStack> { private IFilterProvider provider; @Override public IFilterProvider getProvider() { return provider; } @Override public void setProvider(IFilterProvider provider) { this.provider = provider; } @Override public ItemStack getRandom(EntityPlayer player) { return ItemHelper.getRandomItem(this.getProvider()); } @Override public void apply(ItemStack stack) {} public static Block getBlock(ItemStack check) { return isBlock(check) ? Block.getBlockFromItem(check.getItem()) : null; } private static boolean isBlock(ItemStack stack) { Block block = null; int meta = 0; try { block = Block.getBlockFromItem(stack.getItem()); meta = stack.getItemDamage(); } catch (Exception e) {} return block != null; } @Override public boolean matches(Object object) { if (!(object instanceof ItemStack)) return false; ItemStack check = (ItemStack) object; Block block = getBlock(check); int meta = 0; try { meta = block.getMetaFromState(block.getStateFromMeta(check.getItemDamage())); } catch (Exception e) { return false; } return block == null ? false : matches(block, meta); } @Override public IFilterType getType() { return ProgressionAPI.filters.getBlockFilter(); } protected abstract boolean matches(Block block, int metadata); }