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) { 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 (doTransfer) {
if (tracker.hasMissingButAutocraftingAvailable() && Screen.hasControlDown()) { 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) { 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) { if (doTransfer) {
moveItems(container, recipeLayout, tracker); moveItems(container, recipeLayout, tracker);
@@ -97,8 +97,8 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
return null; return null;
} }
private IngredientTracker createTracker(GridContainer container, IRecipeLayout recipeLayout, PlayerEntity player) { private IngredientTracker createTracker(GridContainer container, IRecipeLayout recipeLayout, PlayerEntity player, boolean doTransfer) {
IngredientTracker tracker = new IngredientTracker(recipeLayout); IngredientTracker tracker = new IngredientTracker(recipeLayout, doTransfer);
// Using IGridView#getStacks will return a *filtered* list of items in the view, // 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. // which will cause problems - especially if the user uses JEI synchronised searching.

View File

@@ -17,13 +17,15 @@ import java.util.*;
public class IngredientTracker { public class IngredientTracker {
private final List<Ingredient> ingredients = new ArrayList<>(); private final List<Ingredient> ingredients = new ArrayList<>();
private final Map<ResourceLocation, Integer> storedItems = new HashMap<>(); 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()) { for (IGuiIngredient<ItemStack> guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) {
if (guiIngredient.isInput() && !guiIngredient.getAllIngredients().isEmpty()) { if (guiIngredient.isInput() && !guiIngredient.getAllIngredients().isEmpty()) {
ingredients.add(new Ingredient(guiIngredient)); ingredients.add(new Ingredient(guiIngredient));
} }
} }
this.doTransfer = doTransfer;
} }
public Collection<Ingredient> getIngredients() { public Collection<Ingredient> getIngredients() {
@@ -32,14 +34,16 @@ public class IngredientTracker {
public void addAvailableStack(ItemStack stack, @Nullable IGridStack gridStack) { public void addAvailableStack(ItemStack stack, @Nullable IGridStack gridStack) {
int available = stack.getCount(); int available = stack.getCount();
if (doTransfer) {
if (stack.getItem() instanceof PatternItem) { if (stack.getItem() instanceof PatternItem) {
NonNullList<ItemStack> outputStacks = PatternItem.fromCache(Minecraft.getInstance().world,stack).getOutputs(); NonNullList<ItemStack> outputStacks = PatternItem.fromCache(Minecraft.getInstance().world, stack).getOutputs();
for (ItemStack outputStack : outputStacks) { for (ItemStack outputStack : outputStacks) {
storedItems.merge(outputStack.getItem().getRegistryName(), outputStack.getCount(), Integer::sum); storedItems.merge(outputStack.getItem().getRegistryName(), outputStack.getCount(), Integer::sum);
} }
} else { } else {
storedItems.merge(stack.getItem().getRegistryName(), available, Integer::sum); storedItems.merge(stack.getItem().getRegistryName(), available, Integer::sum);
} }
}
for (Ingredient ingredient : ingredients) { for (Ingredient ingredient : ingredients) {
if (available == 0) { if (available == 0) {