diff --git a/src/main/java/betterquesting/questing/party/PartyInventory.java b/src/main/java/betterquesting/questing/party/PartyInventory.java index f15fd81d8..809dcf461 100644 --- a/src/main/java/betterquesting/questing/party/PartyInventory.java +++ b/src/main/java/betterquesting/questing/party/PartyInventory.java @@ -5,6 +5,8 @@ import com.github.bsideup.jabel.Desugar; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -100,8 +102,24 @@ public PartyInventory(EntityPlayer mainPlayer, List party) { public ItemMatchContext getItemCountFor(BigItemStack req, boolean taskConsumes, boolean ignoreNBT, boolean partialMatch) { var gatheredStacks = taskConsumes ? playerStacks : partyStacks; - // The stacks matched by Item - var subStacks = gatheredStacks.get(req.getHashKey()); + List subStacks; + if (req.hasOreDict()) { + // Stacks matched by any ore-dict item + subStacks = new ArrayList<>(); + var checkedHashes = new IntOpenHashSet(); + for (ItemStack oreStack : req.getOreIngredient().getMatchingStacks()) { + int itemHash = BigItemStack.getHashKey(oreStack); + if (checkedHashes.add(itemHash)) { + var matchedSubStacks = gatheredStacks.get(itemHash); + if (matchedSubStacks != null) { + subStacks.addAll(matchedSubStacks); + } + } + } + } else { + // Stacks matched by base item + subStacks = gatheredStacks.get(req.getHashKey()); + } if (subStacks == null || subStacks.isEmpty()) { return ItemMatchContext.EMPTY; }