only look up when actually transferring
This commit is contained in:
@@ -59,7 +59,7 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
|
||||
}
|
||||
|
||||
private RecipeTransferCraftingGridError transferRecipeForCraftingGrid(GridContainer container, IRecipeLayout recipeLayout, PlayerEntity player, boolean doTransfer) {
|
||||
IngredientTracker tracker = createTracker(container, recipeLayout, player);
|
||||
IngredientTracker tracker = createTracker(container, recipeLayout, player, doTransfer);
|
||||
|
||||
if (doTransfer) {
|
||||
if (tracker.hasMissingButAutocraftingAvailable() && Screen.hasControlDown()) {
|
||||
@@ -84,7 +84,7 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
|
||||
}
|
||||
|
||||
private IRecipeTransferError transferRecipeForPatternGrid(GridContainer container, IRecipeLayout recipeLayout, PlayerEntity player, boolean doTransfer) {
|
||||
IngredientTracker tracker = createTracker(container, recipeLayout, player);
|
||||
IngredientTracker tracker = createTracker(container, recipeLayout, player, doTransfer);
|
||||
|
||||
if (doTransfer) {
|
||||
moveItems(container, recipeLayout, tracker);
|
||||
@@ -97,8 +97,8 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
|
||||
return null;
|
||||
}
|
||||
|
||||
private IngredientTracker createTracker(GridContainer container, IRecipeLayout recipeLayout, PlayerEntity player) {
|
||||
IngredientTracker tracker = new IngredientTracker(recipeLayout);
|
||||
private IngredientTracker createTracker(GridContainer container, IRecipeLayout recipeLayout, PlayerEntity player, boolean doTransfer) {
|
||||
IngredientTracker tracker = new IngredientTracker(recipeLayout, doTransfer);
|
||||
|
||||
// Using IGridView#getStacks will return a *filtered* list of items in the view,
|
||||
// which will cause problems - especially if the user uses JEI synchronised searching.
|
||||
|
@@ -17,13 +17,15 @@ import java.util.*;
|
||||
public class IngredientTracker {
|
||||
private final List<Ingredient> ingredients = new ArrayList<>();
|
||||
private final Map<ResourceLocation, Integer> storedItems = new HashMap<>();
|
||||
private boolean doTransfer;
|
||||
|
||||
public IngredientTracker(IRecipeLayout recipeLayout) {
|
||||
public IngredientTracker(IRecipeLayout recipeLayout, boolean doTransfer) {
|
||||
for (IGuiIngredient<ItemStack> guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) {
|
||||
if (guiIngredient.isInput() && !guiIngredient.getAllIngredients().isEmpty()) {
|
||||
ingredients.add(new Ingredient(guiIngredient));
|
||||
}
|
||||
}
|
||||
this.doTransfer = doTransfer;
|
||||
}
|
||||
|
||||
public Collection<Ingredient> getIngredients() {
|
||||
@@ -32,13 +34,15 @@ public class IngredientTracker {
|
||||
|
||||
public void addAvailableStack(ItemStack stack, @Nullable IGridStack gridStack) {
|
||||
int available = stack.getCount();
|
||||
if (stack.getItem() instanceof PatternItem) {
|
||||
NonNullList<ItemStack> outputStacks = PatternItem.fromCache(Minecraft.getInstance().world,stack).getOutputs();
|
||||
for (ItemStack outputStack : outputStacks) {
|
||||
storedItems.merge(outputStack.getItem().getRegistryName(), outputStack.getCount(), Integer::sum);
|
||||
if (doTransfer) {
|
||||
if (stack.getItem() instanceof PatternItem) {
|
||||
NonNullList<ItemStack> outputStacks = PatternItem.fromCache(Minecraft.getInstance().world, stack).getOutputs();
|
||||
for (ItemStack outputStack : outputStacks) {
|
||||
storedItems.merge(outputStack.getItem().getRegistryName(), outputStack.getCount(), Integer::sum);
|
||||
}
|
||||
} else {
|
||||
storedItems.merge(stack.getItem().getRegistryName(), available, Integer::sum);
|
||||
}
|
||||
} else {
|
||||
storedItems.merge(stack.getItem().getRegistryName(), available, Integer::sum);
|
||||
}
|
||||
|
||||
for (Ingredient ingredient : ingredients) {
|
||||
|
Reference in New Issue
Block a user