Skip to content

Instantly share code, notes, and snippets.

@aikar
Created February 28, 2019 04:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aikar/4a06f275e13723aa088a302f57d88e62 to your computer and use it in GitHub Desktop.
Save aikar/4a06f275e13723aa088a302f57d88e62 to your computer and use it in GitHub Desktop.
// Paper start
java.util.List<ItemStack> providedItems = new java.util.ArrayList<>();
co.aikar.util.Counter<ItemStack> matchedProvided = new co.aikar.util.Counter<>();
co.aikar.util.Counter<RecipeItemStack> matchedIngredients = new co.aikar.util.Counter<>();
// Paper end
for (int j = 0; j < iinventory.n(); ++j) {
for (int k = 0; k < iinventory.U_(); ++k) {
ItemStack itemstack = iinventory.getItem(k + j * iinventory.U_());
if (!itemstack.isEmpty()) {
// Paper start
itemstack = itemstack.cloneItemStack();
providedItems.add(itemstack);
for (RecipeItemStack ingredient : ingredients) {
if (ingredient.test(itemstack)) {
matchedProvided.increment(itemstack);
matchedIngredients.increment(ingredient);
}
}
// Paper end
}
}
}
// Paper start
java.util.List<RecipeItemStack> ingredients = new java.util.ArrayList<>(this.ingredients);
providedItems.sort(java.util.Comparator.comparingInt((ItemStack c) -> (int) matchedProvided.getCount(c)).reversed());
ingredients.sort(java.util.Comparator.comparingInt((RecipeItemStack c) -> (int) matchedIngredients.getCount(c)));
PROVIDED:
for (ItemStack provided : providedItems) {
for (Iterator<RecipeItemStack> itIngredient = ingredients.iterator(); itIngredient.hasNext(); ) {
RecipeItemStack ingredient = itIngredient.next();
if (ingredient.test(provided)) {
itIngredient.remove();
continue PROVIDED;
}
}
return false;
}
return ingredients.isEmpty();
// Paper end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment