Search in sources :

Example 1 with SubGuiScreen

use of logisticspipes.utils.gui.SubGuiScreen in project LogisticsPipes by RS485.

the class NewGuiHandler method openGui.

@SideOnly(Side.CLIENT)
public static void openGui(OpenGUIPacket packet, EntityPlayer player) {
    int guiID = packet.getGuiID();
    GuiProvider provider = NewGuiHandler.guilist.get(guiID).template();
    LPDataIOWrapper.provideData(packet.getGuiData(), provider::readData);
    if (provider instanceof PopupGuiProvider && packet.getWindowID() == -2) {
        if (FMLClientHandler.instance().getClient().currentScreen instanceof LogisticsBaseGuiScreen) {
            LogisticsBaseGuiScreen baseGUI = (LogisticsBaseGuiScreen) FMLClientHandler.instance().getClient().currentScreen;
            SubGuiScreen newSub;
            try {
                newSub = (SubGuiScreen) provider.getClientGui(player);
            } catch (TargetNotFoundException e) {
                throw e;
            } catch (Exception e) {
                LogisticsPipes.log.error(packet.getClass().getName());
                LogisticsPipes.log.error(packet.toString());
                throw new RuntimeException(e);
            }
            if (newSub != null) {
                if (!baseGUI.hasSubGui()) {
                    baseGUI.setSubGui(newSub);
                } else {
                    SubGuiScreen canidate = baseGUI.getSubGui();
                    while (canidate.hasSubGui()) {
                        canidate = canidate.getSubGui();
                    }
                    canidate.setSubGui(newSub);
                }
            }
        }
    } else {
        GuiContainer screen;
        try {
            screen = (GuiContainer) provider.getClientGui(player);
        } catch (TargetNotFoundException e) {
            throw e;
        } catch (Exception e) {
            LogisticsPipes.log.error(packet.getClass().getName());
            LogisticsPipes.log.error(packet.toString());
            throw new RuntimeException(e);
        }
        screen.inventorySlots.windowId = packet.getWindowID();
        FMLCommonHandler.instance().showGuiScreen(screen);
    }
}
Also used : GuiProvider(logisticspipes.network.abstractguis.GuiProvider) PopupGuiProvider(logisticspipes.network.abstractguis.PopupGuiProvider) LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) TargetNotFoundException(logisticspipes.network.exception.TargetNotFoundException) PopupGuiProvider(logisticspipes.network.abstractguis.PopupGuiProvider) GuiContainer(net.minecraft.client.gui.inventory.GuiContainer) TargetNotFoundException(logisticspipes.network.exception.TargetNotFoundException) SubGuiScreen(logisticspipes.utils.gui.SubGuiScreen) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Example 2 with SubGuiScreen

use of logisticspipes.utils.gui.SubGuiScreen in project LogisticsPipes by RS485.

the class GuiPacket method getGui.

@SideOnly(Side.CLIENT)
protected <T> T getGui(Class<T> guiClass) {
    GuiScreen currentScreen = Minecraft.getMinecraft().currentScreen;
    if (currentScreen == null) {
        return null;
    }
    if (guiClass.isAssignableFrom(currentScreen.getClass())) {
        return (T) currentScreen;
    }
    SubGuiScreen subScreen = null;
    if (currentScreen instanceof LogisticsBaseGuiScreen) {
        subScreen = ((LogisticsBaseGuiScreen) currentScreen).getSubGui();
    }
    while (subScreen != null) {
        if (guiClass.isAssignableFrom(subScreen.getClass())) {
            return (T) subScreen;
        }
        subScreen = subScreen.getSubGui();
    }
    return null;
}
Also used : LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) SubGuiScreen(logisticspipes.utils.gui.SubGuiScreen) GuiScreen(net.minecraft.client.gui.GuiScreen) LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) SubGuiScreen(logisticspipes.utils.gui.SubGuiScreen) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Example 3 with SubGuiScreen

use of logisticspipes.utils.gui.SubGuiScreen in project LogisticsPipes by RS485.

the class NewGuiHandler method openGui.

@SideOnly(Side.CLIENT)
public static void openGui(GUIPacket packet, EntityPlayer player) {
    int guiID = packet.getGuiID();
    GuiProvider provider = NewGuiHandler.guilist.get(guiID).template();
    LPDataIOWrapper.provideData(packet.getGuiData(), provider::readData);
    if (provider instanceof PopupGuiProvider && packet.getWindowID() == -2) {
        if (FMLClientHandler.instance().getClient().currentScreen instanceof LogisticsBaseGuiScreen) {
            LogisticsBaseGuiScreen baseGUI = (LogisticsBaseGuiScreen) FMLClientHandler.instance().getClient().currentScreen;
            SubGuiScreen newSub;
            try {
                newSub = (SubGuiScreen) provider.getClientGui(player);
            } catch (TargetNotFoundException e) {
                throw e;
            } catch (Exception e) {
                LogisticsPipes.log.error(packet.getClass().getName());
                LogisticsPipes.log.error(packet.toString());
                throw new RuntimeException(e);
            }
            if (newSub != null) {
                if (!baseGUI.hasSubGui()) {
                    baseGUI.setSubGui(newSub);
                } else {
                    SubGuiScreen canidate = baseGUI.getSubGui();
                    while (canidate.hasSubGui()) {
                        canidate = canidate.getSubGui();
                    }
                    canidate.setSubGui(newSub);
                }
            }
        }
    } else {
        GuiContainer screen;
        try {
            screen = (GuiContainer) provider.getClientGui(player);
        } catch (TargetNotFoundException e) {
            throw e;
        } catch (Exception e) {
            LogisticsPipes.log.error(packet.getClass().getName());
            LogisticsPipes.log.error(packet.toString());
            throw new RuntimeException(e);
        }
        screen.inventorySlots.windowId = packet.getWindowID();
        FMLCommonHandler.instance().showGuiScreen(screen);
    }
}
Also used : GuiProvider(logisticspipes.network.abstractguis.GuiProvider) PopupGuiProvider(logisticspipes.network.abstractguis.PopupGuiProvider) LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) TargetNotFoundException(logisticspipes.network.exception.TargetNotFoundException) PopupGuiProvider(logisticspipes.network.abstractguis.PopupGuiProvider) GuiContainer(net.minecraft.client.gui.inventory.GuiContainer) TargetNotFoundException(logisticspipes.network.exception.TargetNotFoundException) IOException(java.io.IOException) InvocationTargetException(java.lang.reflect.InvocationTargetException) SubGuiScreen(logisticspipes.utils.gui.SubGuiScreen) SideOnly(cpw.mods.fml.relauncher.SideOnly)

Example 4 with SubGuiScreen

use of logisticspipes.utils.gui.SubGuiScreen in project LogisticsPipes by RS485.

the class MostLikelyRecipeComponentsResponse method processPacket.

@Override
@ClientSideOnlyMethodContent
public void processPacket(EntityPlayer player) {
    GuiScreen firstGui = Minecraft.getMinecraft().currentScreen;
    LogisticsBaseGuiScreen gui;
    if (firstGui instanceof GuiLogisticsCraftingTable) {
        gui = (GuiLogisticsCraftingTable) firstGui;
    } else if (firstGui instanceof GuiRequestTable) {
        gui = (GuiRequestTable) firstGui;
    } else {
        return;
    }
    GuiRecipeImport importGui = null;
    SubGuiScreen sub = gui.getSubGui();
    while (sub != null) {
        if (sub instanceof GuiRecipeImport) {
            importGui = (GuiRecipeImport) sub;
            break;
        }
        sub = sub.getSubGui();
    }
    if (importGui == null)
        return;
    importGui.handleProposePacket(response);
}
Also used : GuiRecipeImport(logisticspipes.gui.popup.GuiRecipeImport) GuiRequestTable(logisticspipes.gui.orderer.GuiRequestTable) GuiLogisticsCraftingTable(logisticspipes.gui.GuiLogisticsCraftingTable) LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) SubGuiScreen(logisticspipes.utils.gui.SubGuiScreen) GuiScreen(net.minecraft.client.gui.GuiScreen) SubGuiScreen(logisticspipes.utils.gui.SubGuiScreen) ClientSideOnlyMethodContent(logisticspipes.asm.ClientSideOnlyMethodContent)

Example 5 with SubGuiScreen

use of logisticspipes.utils.gui.SubGuiScreen in project LogisticsPipes by RS485.

the class ClientProxy method openFluidSelectGui.

@Override
public void openFluidSelectGui(final int slotId) {
    if (Minecraft.getMinecraft().currentScreen instanceof LogisticsBaseGuiScreen) {
        final List<ItemIdentifierStack> list = new ArrayList<>();
        for (FluidIdentifier fluid : FluidIdentifier.all()) {
            if (fluid == null) {
                continue;
            }
            list.add(fluid.getItemIdentifier().makeStack(1));
        }
        SelectItemOutOfList subGui = new SelectItemOutOfList(list, slot -> {
            if (slot == -1)
                return;
            MainProxy.sendPacketToServer(PacketHandler.getPacket(DummyContainerSlotClick.class).setSlotId(slotId).setStack(list.get(slot).makeNormalStack()).setButton(0));
        });
        LogisticsBaseGuiScreen gui = (LogisticsBaseGuiScreen) Minecraft.getMinecraft().currentScreen;
        if (!gui.hasSubGui()) {
            gui.setSubGui(subGui);
        } else {
            SubGuiScreen nextGui = gui.getSubGui();
            while (nextGui.hasSubGui()) {
                nextGui = nextGui.getSubGui();
            }
            nextGui.setSubGui(subGui);
        }
    } else {
        throw new UnsupportedOperationException(String.valueOf(Minecraft.getMinecraft().currentScreen));
    }
}
Also used : LogisticsBaseGuiScreen(logisticspipes.utils.gui.LogisticsBaseGuiScreen) SelectItemOutOfList(logisticspipes.gui.popup.SelectItemOutOfList) ArrayList(java.util.ArrayList) ItemIdentifierStack(logisticspipes.utils.item.ItemIdentifierStack) FluidIdentifier(logisticspipes.utils.FluidIdentifier) SubGuiScreen(logisticspipes.utils.gui.SubGuiScreen)

Aggregations

LogisticsBaseGuiScreen (logisticspipes.utils.gui.LogisticsBaseGuiScreen)5 SubGuiScreen (logisticspipes.utils.gui.SubGuiScreen)5 GuiProvider (logisticspipes.network.abstractguis.GuiProvider)2 PopupGuiProvider (logisticspipes.network.abstractguis.PopupGuiProvider)2 TargetNotFoundException (logisticspipes.network.exception.TargetNotFoundException)2 GuiScreen (net.minecraft.client.gui.GuiScreen)2 GuiContainer (net.minecraft.client.gui.inventory.GuiContainer)2 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)2 SideOnly (cpw.mods.fml.relauncher.SideOnly)1 IOException (java.io.IOException)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 ArrayList (java.util.ArrayList)1 ClientSideOnlyMethodContent (logisticspipes.asm.ClientSideOnlyMethodContent)1 GuiLogisticsCraftingTable (logisticspipes.gui.GuiLogisticsCraftingTable)1 GuiRequestTable (logisticspipes.gui.orderer.GuiRequestTable)1 GuiRecipeImport (logisticspipes.gui.popup.GuiRecipeImport)1 SelectItemOutOfList (logisticspipes.gui.popup.SelectItemOutOfList)1 FluidIdentifier (logisticspipes.utils.FluidIdentifier)1 ItemIdentifierStack (logisticspipes.utils.item.ItemIdentifierStack)1