package joshie.progression.helpers; import joshie.progression.api.criteria.IFilterProvider; import joshie.progression.api.criteria.IFilterType; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; public class ItemHelper { private static final ArrayList<ItemStack> itemsWithoutInventory = new ArrayList(); private static final ArrayList<ItemStack> itemsWithInventory = new ArrayList(); private static ArrayList<ItemStack> shuffledItemsCache; static { Iterator iterator = Item.REGISTRY.iterator(); while (iterator.hasNext()) { Item item = (Item) iterator.next(); if (item == null) { continue; } if (item.getCreativeTabs() != null && item.getCreativeTabs().length > 0) { for (CreativeTabs tab : item.getCreativeTabs()) { try { item.getSubItems(item, tab, itemsWithInventory); item.getSubItems(item, tab, itemsWithoutInventory); } catch (Exception e) {} } } } } public static ArrayList<ItemStack> getAllItems() { return itemsWithInventory; } public static ArrayList<ItemStack> getCreativeItems() { return itemsWithoutInventory; } public static void addInventory() { for (ItemStack stack : MCClientHelper.getPlayer().inventory.mainInventory) { if (stack != null) { if (!itemsWithInventory.contains(stack)) { itemsWithInventory.add(stack.copy()); } } } } public static ItemStack getRandomItem(IFilterProvider filter) { return getRandomItem(filter, filter.getProvided().getType()); } private static ItemStack getRandomItem(IFilterProvider filter, IFilterType selector) { if (shuffledItemsCache == null) shuffledItemsCache = new ArrayList(getCreativeItems()); Collections.shuffle(shuffledItemsCache); for (ItemStack stack : shuffledItemsCache) { if (selector != null && !selector.isAcceptable(stack)) continue; if (filter.getProvided().matches(stack)) return stack; } //In theory if set up correctly this should be no issue return null; } public static ItemStack getRandomItemFromFilters(List<IFilterProvider> filters, EntityPlayer player) { int size = filters.size(); if (size == 0) return null; if (size == 1) return (ItemStack) filters.get(0).getProvided().getRandom(player); else { return (ItemStack) filters.get(player.worldObj.rand.nextInt(size)).getProvided().getRandom(player); } } public static ItemStack getRandomItemOfSize(List<IFilterProvider> filters, EntityPlayer player, int stackSize) { ItemStack item = getRandomItemFromFilters(filters, player).copy(); if (item == null) return null; else item = item.copy(); item.stackSize = stackSize; return item; } }