Search in sources :

Example 1 with IRecipeTransferError

use of mezz.jei.api.recipe.transfer.IRecipeTransferError in project LogisticsPipes by RS485.

the class RecipeTransferHandler method transferRecipe.

@Nullable
@Override
public IRecipeTransferError transferRecipe(@Nonnull DummyContainer container, @Nonnull IRecipeLayout recipeLayout, @Nonnull EntityPlayer player, boolean maxTransfer, boolean doTransfer) {
    LogisticsBaseGuiScreen gui = container.guiHolderForJEI;
    if (gui instanceof GuiLogisticsCraftingTable || gui instanceof GuiRequestTable) {
        TileEntity tile;
        if (gui instanceof GuiLogisticsCraftingTable) {
            tile = ((GuiLogisticsCraftingTable) gui)._crafter;
        } else {
            tile = ((GuiRequestTable) gui)._table.container;
        }
        if (tile == null) {
            return recipeTransferHandlerHelper.createInternalError();
        }
        if (!recipeLayout.getRecipeCategory().getUid().equals(VanillaRecipeCategoryUid.CRAFTING)) {
            return recipeTransferHandlerHelper.createInternalError();
        }
        NEISetCraftingRecipe packet = PacketHandler.getPacket(NEISetCraftingRecipe.class);
        NonNullList<ItemStack> stackList = packet.getStackList();
        ItemStack[][] stacks = new ItemStack[9][];
        boolean hasCanidates = false;
        IGuiItemStackGroup guiItemStackGroup = recipeLayout.getItemStacks();
        Map<Integer, ? extends IGuiIngredient<ItemStack>> guiIngredients = guiItemStackGroup.getGuiIngredients();
        if (doTransfer) {
            for (Map.Entry<Integer, ? extends IGuiIngredient<ItemStack>> ps : guiIngredients.entrySet()) {
                if (!ps.getValue().isInput())
                    continue;
                int slot = ps.getKey() - 1;
                if (slot < 9) {
                    final ItemStack displayedIngredient = ps.getValue().getDisplayedIngredient();
                    stackList.set(slot, displayedIngredient == null ? ItemStack.EMPTY : displayedIngredient);
                    NonNullList<ItemStack> itemCandidateList = NonNullList.create();
                    // add all non-null non-empty ingredients to the itemCandidateList
                    ps.getValue().getAllIngredients().stream().filter(itemStack -> Objects.nonNull(itemStack) && !itemStack.isEmpty()).forEach(itemCandidateList::add);
                    if (!itemCandidateList.isEmpty()) {
                        Iterator<ItemStack> iter = itemCandidateList.iterator();
                        while (iter.hasNext()) {
                            ItemStack wildCardCheckStack = iter.next();
                            if (wildCardCheckStack.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
                                iter.remove();
                                final CreativeTabs creativeTab = wildCardCheckStack.getItem().getCreativeTab();
                                if (creativeTab != null) {
                                    NonNullList<ItemStack> secondList = NonNullList.create();
                                    wildCardCheckStack.getItem().getSubItems(creativeTab, secondList);
                                    itemCandidateList.addAll(secondList);
                                }
                                iter = itemCandidateList.iterator();
                            }
                        }
                        stacks[slot] = itemCandidateList.toArray(new ItemStack[0]);
                        if (stacks[slot].length > 1) {
                            hasCanidates = true;
                        } else if (stacks[slot].length == 1) {
                            stackList.set(slot, stacks[slot][0]);
                        }
                    }
                }
            }
            if (hasCanidates) {
                gui.setSubGui(new GuiRecipeImport(tile, stacks));
            } else {
                MainProxy.sendPacketToServer(packet.setTilePos(tile));
            }
        }
        return null;
    }
    return recipeTransferHandlerHelper.createInternalError();
}
Also used : DummyContainer(logisticspipes.utils.gui.DummyContainer) NEISetCraftingRecipe(logisticspipes.network.packets.NEISetCraftingRecipe) GuiRecipeImport(logisticspipes.gui.popup.GuiRecipeImport) MainProxy(logisticspipes.proxy.MainProxy) LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) ItemStack(net.minecraft.item.ItemStack) OreDictionary(net.minecraftforge.oredict.OreDictionary) Map(java.util.Map) IGuiIngredient(mezz.jei.api.gui.IGuiIngredient) CreativeTabs(net.minecraft.creativetab.CreativeTabs) NonNullList(net.minecraft.util.NonNullList) IRecipeTransferHandlerHelper(mezz.jei.api.recipe.transfer.IRecipeTransferHandlerHelper) Nonnull(javax.annotation.Nonnull) IRecipeLayout(mezz.jei.api.gui.IRecipeLayout) Nullable(javax.annotation.Nullable) IRecipeTransferError(mezz.jei.api.recipe.transfer.IRecipeTransferError) Iterator(java.util.Iterator) GuiRequestTable(logisticspipes.gui.orderer.GuiRequestTable) PacketHandler(logisticspipes.network.PacketHandler) IGuiItemStackGroup(mezz.jei.api.gui.IGuiItemStackGroup) GuiLogisticsCraftingTable(logisticspipes.gui.GuiLogisticsCraftingTable) Objects(java.util.Objects) Stream(java.util.stream.Stream) VanillaRecipeCategoryUid(mezz.jei.api.recipe.VanillaRecipeCategoryUid) EntityPlayer(net.minecraft.entity.player.EntityPlayer) TileEntity(net.minecraft.tileentity.TileEntity) IRecipeTransferHandler(mezz.jei.api.recipe.transfer.IRecipeTransferHandler) GuiRecipeImport(logisticspipes.gui.popup.GuiRecipeImport) GuiLogisticsCraftingTable(logisticspipes.gui.GuiLogisticsCraftingTable) LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) IGuiItemStackGroup(mezz.jei.api.gui.IGuiItemStackGroup) CreativeTabs(net.minecraft.creativetab.CreativeTabs) TileEntity(net.minecraft.tileentity.TileEntity) GuiRequestTable(logisticspipes.gui.orderer.GuiRequestTable) NEISetCraftingRecipe(logisticspipes.network.packets.NEISetCraftingRecipe) ItemStack(net.minecraft.item.ItemStack) Map(java.util.Map) Nullable(javax.annotation.Nullable)

Aggregations

Iterator (java.util.Iterator)1 Map (java.util.Map)1 Objects (java.util.Objects)1 Stream (java.util.stream.Stream)1 Nonnull (javax.annotation.Nonnull)1 Nullable (javax.annotation.Nullable)1 GuiLogisticsCraftingTable (logisticspipes.gui.GuiLogisticsCraftingTable)1 GuiRequestTable (logisticspipes.gui.orderer.GuiRequestTable)1 GuiRecipeImport (logisticspipes.gui.popup.GuiRecipeImport)1 PacketHandler (logisticspipes.network.PacketHandler)1 NEISetCraftingRecipe (logisticspipes.network.packets.NEISetCraftingRecipe)1 MainProxy (logisticspipes.proxy.MainProxy)1 DummyContainer (logisticspipes.utils.gui.DummyContainer)1 LogisticsBaseGuiScreen (logisticspipes.utils.gui.LogisticsBaseGuiScreen)1 IGuiIngredient (mezz.jei.api.gui.IGuiIngredient)1 IGuiItemStackGroup (mezz.jei.api.gui.IGuiItemStackGroup)1 IRecipeLayout (mezz.jei.api.gui.IRecipeLayout)1 VanillaRecipeCategoryUid (mezz.jei.api.recipe.VanillaRecipeCategoryUid)1 IRecipeTransferError (mezz.jei.api.recipe.transfer.IRecipeTransferError)1 IRecipeTransferHandler (mezz.jei.api.recipe.transfer.IRecipeTransferHandler)1