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) {
|
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.
|
||||||
|
@@ -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,13 +34,15 @@ 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 (stack.getItem() instanceof PatternItem) {
|
if (doTransfer) {
|
||||||
NonNullList<ItemStack> outputStacks = PatternItem.fromCache(Minecraft.getInstance().world,stack).getOutputs();
|
if (stack.getItem() instanceof PatternItem) {
|
||||||
for (ItemStack outputStack : outputStacks) {
|
NonNullList<ItemStack> outputStacks = PatternItem.fromCache(Minecraft.getInstance().world, stack).getOutputs();
|
||||||
storedItems.merge(outputStack.getItem().getRegistryName(), outputStack.getCount(), Integer::sum);
|
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) {
|
for (Ingredient ingredient : ingredients) {
|
||||||
|
Reference in New Issue
Block a user