/** Returns a fixed size DEEP copy of the list */ public static NonNullList<ItemStack> deepCopyFixedNonNullList(NonNullList<ItemStack> in) { return RecipeMatchRegistry.copyItemStackArray(in); }
public Optional<RecipeMatch.Match> matchesRecursively(NonNullList<ItemStack> stacks) { stacks = copyItemStackArray(stacks); // copy so we don't modify original List<RecipeMatch.Match> matches = Lists.newLinkedList(); Optional<RecipeMatch.Match> matchOptional; int sum = 0; while((matchOptional = matches(stacks)).isPresent()) { RecipeMatch.Match match = matchOptional.get(); matches.add(match); RecipeMatch.removeMatch(stacks, match); sum += match.amount; } // merge all found matches into one match List<ItemStack> foundStacks = Lists.newLinkedList(); for(RecipeMatch.Match m : matches) { foundStacks.addAll(m.stacks); } return Optional.of(new RecipeMatch.Match(foundStacks, sum)); }
/** * Associates an item with this material. Used for repairing and other. */ public void addItem(Item item) { addItem(item, 1, 1); }
public Optional<RecipeMatch.Match> matches(ItemStack... stacks) { NonNullList<ItemStack> nonNullStacks = NonNullList.withSize(stacks.length, ItemStack.EMPTY); for(int i = 0; i < stacks.length; i++) { if(!stacks[i].isEmpty()) { nonNullStacks.set(i, stacks[i].copy()); } } return matches(nonNullStacks); }
public Optional<RecipeMatch.Match> matches(NonNullList<ItemStack> stacks, int minAmount) { stacks = copyItemStackArray(stacks); // copy so we don't modify original List<RecipeMatch.Match> matches = Lists.newLinkedList(); Optional<RecipeMatch.Match> matchOptional; int sum = 0; while(sum < minAmount && (matchOptional = matches(stacks)).isPresent()) { RecipeMatch.Match match = matchOptional.get(); matches.add(match); RecipeMatch.removeMatch(stacks, match); sum += match.amount; } // not enough found if(sum < minAmount) { return Optional.empty(); } // merge all found matches into one match List<ItemStack> foundStacks = Lists.newLinkedList(); for(RecipeMatch.Match m : matches) { foundStacks.addAll(m.stacks); } return Optional.of(new RecipeMatch.Match(foundStacks, sum)); }
public void addItem(String oredictItem) { addItem(oredictItem, 1, 1); }