Search in sources :

Example 1 with NEISetCraftingRecipe

use of logisticspipes.network.packets.NEISetCraftingRecipe in project LogisticsPipes by RS485.

the class LogisticsCraftingOverlayHandler method overlayRecipe.

@Override
public void overlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex, boolean shift) {
    TileEntity tile;
    LogisticsBaseGuiScreen gui;
    if (firstGui instanceof GuiLogisticsCraftingTable) {
        tile = ((GuiLogisticsCraftingTable) firstGui)._crafter;
        gui = (GuiLogisticsCraftingTable) firstGui;
    } else if (firstGui instanceof GuiRequestTable) {
        tile = ((GuiRequestTable) firstGui)._table.container;
        gui = (GuiRequestTable) firstGui;
    } else {
        return;
    }
    ItemStack[] stack = new ItemStack[9];
    ItemStack[][] stacks = new ItemStack[9][];
    boolean hasCanidates = false;
    NEISetCraftingRecipe packet = PacketHandler.getPacket(NEISetCraftingRecipe.class);
    for (PositionedStack ps : recipe.getIngredientStacks(recipeIndex)) {
        int x = (ps.relx - 25) / 18;
        int y = (ps.rely - 6) / 18;
        int slot = x + y * 3;
        if (x < 0 || x > 2 || y < 0 || y > 2 || slot < 0 || slot > 8) {
            FMLClientHandler.instance().getClient().thePlayer.sendChatMessage("Internal Error. This button is broken.");
            return;
        }
        if (slot < 9) {
            stack[slot] = ps.items[0];
            List<ItemStack> list = new ArrayList<>(Arrays.asList(ps.items));
            Iterator<ItemStack> iter = list.iterator();
            while (iter.hasNext()) {
                ItemStack wildCardCheckStack = iter.next();
                if (wildCardCheckStack.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
                    iter.remove();
                    wildCardCheckStack.getItem().getSubItems(wildCardCheckStack.getItem(), wildCardCheckStack.getItem().getCreativeTab(), list);
                    iter = list.iterator();
                }
            }
            stacks[slot] = list.toArray(new ItemStack[0]);
            if (stacks[slot].length > 1) {
                hasCanidates = true;
            } else if (stacks[slot].length == 1) {
                stack[slot] = stacks[slot][0];
            }
        }
    }
    if (hasCanidates) {
        gui.setSubGui(new GuiRecipeImport(tile, stacks));
    } else {
        MainProxy.sendPacketToServer(packet.setContent(stack).setPosX(tile.xCoord).setPosY(tile.yCoord).setPosZ(tile.zCoord));
    }
}
Also used : GuiRecipeImport(logisticspipes.gui.popup.GuiRecipeImport) GuiLogisticsCraftingTable(logisticspipes.gui.GuiLogisticsCraftingTable) LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) PositionedStack(codechicken.nei.PositionedStack) ArrayList(java.util.ArrayList) TileEntity(net.minecraft.tileentity.TileEntity) GuiRequestTable(logisticspipes.gui.orderer.GuiRequestTable) NEISetCraftingRecipe(logisticspipes.network.packets.NEISetCraftingRecipe) ItemStack(net.minecraft.item.ItemStack)

Example 2 with NEISetCraftingRecipe

use of logisticspipes.network.packets.NEISetCraftingRecipe in project LogisticsPipes by RS485.

the class GuiRecipeImport method actionPerformed.

@Override
protected void actionPerformed(GuiButton button) {
    int id = button.id;
    if (id == 0) {
        NEISetCraftingRecipe packet = PacketHandler.getPacket(NEISetCraftingRecipe.class);
        NonNullList<ItemStack> stackList = packet.getStackList();
        int i = 0;
        for (Canidates canidate : grid) {
            if (canidate == null) {
                i++;
                continue;
            }
            stackList.set(i++, canidate.order.get(canidate.pos).makeNormalStack());
        }
        MainProxy.sendPacketToServer(packet.setBlockPos(tile.getPos()));
        exitGui();
    } else if (id == 1) {
        MainProxy.sendPacketToServer(PacketHandler.getPacket(FindMostLikelyRecipeComponents.class).setContent(list).setTilePos(tile));
    } else if (id >= 10 && id < 30) {
        int slot = id % 10;
        boolean up = id < 20;
        Canidates canidate = list.get(slot);
        if (up) {
            canidate.pos++;
            if (canidate.pos >= canidate.order.size()) {
                canidate.pos = 0;
            }
        } else {
            canidate.pos--;
            if (canidate.pos < 0) {
                canidate.pos = canidate.order.size() - 1;
            }
        }
    }
}
Also used : NEISetCraftingRecipe(logisticspipes.network.packets.NEISetCraftingRecipe) ItemStack(net.minecraft.item.ItemStack)

Example 3 with NEISetCraftingRecipe

use of logisticspipes.network.packets.NEISetCraftingRecipe 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

NEISetCraftingRecipe (logisticspipes.network.packets.NEISetCraftingRecipe)3 ItemStack (net.minecraft.item.ItemStack)3 GuiLogisticsCraftingTable (logisticspipes.gui.GuiLogisticsCraftingTable)2 GuiRequestTable (logisticspipes.gui.orderer.GuiRequestTable)2 GuiRecipeImport (logisticspipes.gui.popup.GuiRecipeImport)2 LogisticsBaseGuiScreen (logisticspipes.utils.gui.LogisticsBaseGuiScreen)2 TileEntity (net.minecraft.tileentity.TileEntity)2 PositionedStack (codechicken.nei.PositionedStack)1 ArrayList (java.util.ArrayList)1 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 PacketHandler (logisticspipes.network.PacketHandler)1 MainProxy (logisticspipes.proxy.MainProxy)1 DummyContainer (logisticspipes.utils.gui.DummyContainer)1 IGuiIngredient (mezz.jei.api.gui.IGuiIngredient)1 IGuiItemStackGroup (mezz.jei.api.gui.IGuiItemStackGroup)1