diff --git a/src/main/java/appeng/integration/modules/jei/CraftableCallBack.java b/src/main/java/appeng/integration/modules/jei/CraftableCallBack.java index 19a02dd08..2924f793d 100644 --- a/src/main/java/appeng/integration/modules/jei/CraftableCallBack.java +++ b/src/main/java/appeng/integration/modules/jei/CraftableCallBack.java @@ -1,6 +1,5 @@ package appeng.integration.modules.jei; -import appeng.api.AEApi; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import appeng.container.AEBaseContainer; @@ -12,7 +11,6 @@ import com.google.common.base.Stopwatch; import mezz.jei.api.gui.ITooltipCallback; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; -import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.translation.I18n; import org.lwjgl.input.Mouse; diff --git a/src/main/java/appeng/integration/modules/jei/JEIMissingItem.java b/src/main/java/appeng/integration/modules/jei/JEIMissingItem.java index 7b6e1cdbd..905ad4e4d 100644 --- a/src/main/java/appeng/integration/modules/jei/JEIMissingItem.java +++ b/src/main/java/appeng/integration/modules/jei/JEIMissingItem.java @@ -14,8 +14,10 @@ import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.recipe.transfer.IRecipeTransferError; import mezz.jei.gui.recipes.RecipeLayout; import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; +import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; import javax.annotation.Nonnull; import java.awt.*; @@ -36,9 +38,18 @@ public class JEIMissingItem implements IRecipeTransferError { GuiCraftingTerm g = (GuiCraftingTerm) craftingTerm.getGui(); IItemList ir = g.getRepo().getList(); + IItemList playerInv = wrapPlayerInv(((ContainerCraftingTerm) container).getPlayerInv()); + + IItemList available = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList(); + for (IAEItemStack i : ir) { + available.addStorage(i); + } + for (IAEItemStack i : playerInv) { + available.addStorage(i); + } boolean found; this.errored = false; - recipeLayout.getItemStacks().addTooltipCallback(new CraftableCallBack(container, ir)); + recipeLayout.getItemStacks().addTooltipCallback(new CraftableCallBack(container, available)); IItemList used = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList(); for (IGuiIngredient i : recipeLayout.getItemStacks().getGuiIngredients().values()) { @@ -50,7 +61,7 @@ public class JEIMissingItem implements IRecipeTransferError { ItemStack stack = (ItemStack) allIngredient; if (!stack.isEmpty()) { if (stack.getItem().isDamageable() || Platform.isGTDamageableItem(stack.getItem())) { - Collection fuzzy = ir.findFuzzy(AEItemStack.fromItemStack(stack), FuzzyMode.IGNORE_ALL); + Collection fuzzy = available.findFuzzy(AEItemStack.fromItemStack(stack), FuzzyMode.IGNORE_ALL); if (fuzzy.size() > 0) { for (IAEItemStack itemStack : fuzzy) { if (itemStack.getStackSize() > 0) { @@ -62,7 +73,7 @@ public class JEIMissingItem implements IRecipeTransferError { } } } else { - IAEItemStack ext = ir.findPrecise(AEItemStack.fromItemStack(stack)); + IAEItemStack ext = available.findPrecise(AEItemStack.fromItemStack(stack)); if (ext != null) { IAEItemStack usedStack = used.findPrecise(ext); if (ext.getStackSize() > 0 && (usedStack == null || ext.getStackSize() > usedStack.getStackSize())) { @@ -99,10 +110,18 @@ public class JEIMissingItem implements IRecipeTransferError { GuiCraftingTerm g = (GuiCraftingTerm) craftingTerm.getGui(); IItemList ir = g.getRepo().getList(); + IItemList playerInv = wrapPlayerInv(minecraft.player.inventory); boolean found; boolean craftable; int currentSlot = 0; this.errored = false; + IItemList available = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList(); + for (IAEItemStack i : ir) { + available.addStorage(i); + } + for (IAEItemStack i : playerInv) { + available.addStorage(i); + } IItemList used = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList(); for (IGuiIngredient i : recipeLayout.getItemStacks().getGuiIngredients().values()) { @@ -116,7 +135,7 @@ public class JEIMissingItem implements IRecipeTransferError { ItemStack stack = (ItemStack) allIngredient; if (!stack.isEmpty()) { if (stack.getItem().isDamageable() || Platform.isGTDamageableItem(stack.getItem())) { - Collection fuzzy = ir.findFuzzy(AEItemStack.fromItemStack(stack), FuzzyMode.IGNORE_ALL); + Collection fuzzy = available.findFuzzy(AEItemStack.fromItemStack(stack), FuzzyMode.IGNORE_ALL); if (fuzzy.size() > 0) { for (IAEItemStack itemStack : fuzzy) { if (itemStack.getStackSize() > 0) { @@ -134,7 +153,7 @@ public class JEIMissingItem implements IRecipeTransferError { } } } else { - IAEItemStack ext = ir.findPrecise(AEItemStack.fromItemStack(stack)); + IAEItemStack ext = available.findPrecise(AEItemStack.fromItemStack(stack)); if (ext != null) { IAEItemStack usedStack = used.findPrecise(ext); if (ext.getStackSize() > 0 && (usedStack == null || usedStack.getStackSize() < ext.getStackSize())) { @@ -144,7 +163,6 @@ public class JEIMissingItem implements IRecipeTransferError { } valid.add(ext.copy().setStackSize(1).createItemStack()); found = true; - break; } else if (ext.isCraftable()) { valid.add(ext.copy().setStackSize(1).createItemStack()); craftable = true; @@ -178,4 +196,16 @@ public class JEIMissingItem implements IRecipeTransferError { public boolean errored() { return this.errored; } + + + IItemList wrapPlayerInv(InventoryPlayer inventory) { + IItemList used = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList(); + + PlayerMainInvWrapper invWrapper = new PlayerMainInvWrapper(inventory); + for (int i = 0; i < invWrapper.getSlots(); i++) { + used.addStorage(AEItemStack.fromItemStack(invWrapper.getStackInSlot(i))); + } + + return used; + } }