only look up when actually transferring

This commit is contained in:
Darkere
2021-06-13 15:33:34 +02:00
parent 193547aba2
commit d797804335
2 changed files with 15 additions and 11 deletions

View File

@@ -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.

View File

@@ -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) {