make sure pattern is valid before looking up outputs

This commit is contained in:
Darkere
2021-06-13 20:14:04 +02:00
parent d797804335
commit 5867749883
2 changed files with 14 additions and 12 deletions

View File

@@ -1,5 +1,6 @@
package com.refinedmods.refinedstorage.apiimpl.network.grid; package com.refinedmods.refinedstorage.apiimpl.network.grid;
import com.refinedmods.refinedstorage.api.autocrafting.ICraftingPattern;
import com.refinedmods.refinedstorage.api.network.INetwork; import com.refinedmods.refinedstorage.api.network.INetwork;
import com.refinedmods.refinedstorage.api.network.grid.GridType; import com.refinedmods.refinedstorage.api.network.grid.GridType;
import com.refinedmods.refinedstorage.api.network.grid.ICraftingGridBehavior; import com.refinedmods.refinedstorage.api.network.grid.ICraftingGridBehavior;
@@ -24,7 +25,6 @@ import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
public class CraftingGridBehavior implements ICraftingGridBehavior { public class CraftingGridBehavior implements ICraftingGridBehavior {
@@ -258,7 +258,6 @@ public class CraftingGridBehavior implements ICraftingGridBehavior {
} }
private Comparator<ItemStack> compareByItemStackCounts(PlayerEntity player, INetwork network, AtomicReference<Map<Item, ItemStack>> playerItems) { private Comparator<ItemStack> compareByItemStackCounts(PlayerEntity player, INetwork network, AtomicReference<Map<Item, ItemStack>> playerItems) {
AtomicInteger s = new AtomicInteger();
return Comparator.comparingInt((ItemStack itemStack) -> { return Comparator.comparingInt((ItemStack itemStack) -> {
ItemStack stack = network.getItemStorageCache().getList().get(itemStack); ItemStack stack = network.getItemStorageCache().getList().get(itemStack);
@@ -272,8 +271,6 @@ public class CraftingGridBehavior implements ICraftingGridBehavior {
if (playerItems.get() == null) { if (playerItems.get() == null) {
playerItems.set(makePlayerInventoryMap(player, network)); playerItems.set(makePlayerInventoryMap(player, network));
} else {
System.out.println(s.incrementAndGet());
} }
ItemStack onPlayer = playerItems.get().get(itemStack.getItem()); ItemStack onPlayer = playerItems.get().get(itemStack.getItem());
@@ -290,10 +287,12 @@ public class CraftingGridBehavior implements ICraftingGridBehavior {
ItemStack inventoryStack = player.inventory.getStackInSlot(j); ItemStack inventoryStack = player.inventory.getStackInSlot(j);
if (inventoryStack.getItem() instanceof PatternItem) { if (inventoryStack.getItem() instanceof PatternItem) {
NonNullList<ItemStack> patternOutput = PatternItem.fromCache(network.getWorld(), inventoryStack).getOutputs(); ICraftingPattern pattern = PatternItem.fromCache(network.getWorld(), inventoryStack);
for (ItemStack stack : patternOutput) { if (pattern.isValid()) {
if (!stack.isEmpty()) { for (ItemStack stack : pattern.getOutputs()) {
playerItems.put(stack.getItem(), stack); if (!stack.isEmpty()) {
playerItems.put(stack.getItem(), stack);
}
} }
} }
} else { } else {

View File

@@ -1,5 +1,6 @@
package com.refinedmods.refinedstorage.integration.jei; package com.refinedmods.refinedstorage.integration.jei;
import com.refinedmods.refinedstorage.api.autocrafting.ICraftingPattern;
import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.api.util.IComparer;
import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.item.PatternItem; import com.refinedmods.refinedstorage.item.PatternItem;
@@ -8,7 +9,6 @@ import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ingredient.IGuiIngredient; import mezz.jei.api.gui.ingredient.IGuiIngredient;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -36,10 +36,13 @@ public class IngredientTracker {
int available = stack.getCount(); int available = stack.getCount();
if (doTransfer) { if (doTransfer) {
if (stack.getItem() instanceof PatternItem) { if (stack.getItem() instanceof PatternItem) {
NonNullList<ItemStack> outputStacks = PatternItem.fromCache(Minecraft.getInstance().world, stack).getOutputs(); ICraftingPattern pattern = PatternItem.fromCache(Minecraft.getInstance().world, stack);
for (ItemStack outputStack : outputStacks) { if (pattern.isValid()) {
storedItems.merge(outputStack.getItem().getRegistryName(), outputStack.getCount(), Integer::sum); for (ItemStack outputStack : pattern.getOutputs()) {
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);
} }