// Path: src/main/java/modpacktweaks/client/gui/library/gui/IGuiBase.java
// public interface IGuiBase
// {
//     public ElementBase addElement(ElementBase element);
// 
//     public void addElements();
// 
//     public void addTabs();
// 
//     public void drawBackgroundTexture();
// 
//     public void drawElements();
// 
//     public ElementBase getElementAtPosition(int mouseX, int mouseY);
// 
//     public FontRenderer getFontRenderer();
// 
//     public int getGuiLeft();
// 
//     public int getGuiTop();
// 
//     public int getHeight();
// 
//     public RenderItem getItemRenderer();
// 
//     public Minecraft getMinecraft();
// 
//     public int getMouseX();
// 
//     public int getMouseY();
// 
//     public TextureManager getTextureManager();
// 
//     public int getWidth();
// 
//     public float getZLevel();
// 
//     public void handleElementButtonClick(String buttonName, int mouseButton);
// 
//     public void handleElementFakeSlotItemChange(ElementFakeItemSlot slot);
// 
//     public boolean isItemStackAllowedInFakeSlot(ElementFakeItemSlot slot, ItemStack stack);
// 
//     public void setZLevel(float zlevel);
// }
// 
// Path: src/main/java/modpacktweaks/client/gui/library/gui/Parser.java
// public class Parser
// {
//     FontRenderer fontRenderer;
//     IGuiBase parentGui;
//     ArrayList<ElementBase> parsedElements;
//     int maxWidth, currentX, currentY;
// 
//     public Parser(IGuiBase parent)
//     {
//         parsedElements = new ArrayList<ElementBase>();
//         parentGui = parent;
//         maxWidth = -1;
//         currentX = currentY = 0;
//         fontRenderer = Minecraft.getMinecraft().fontRenderer;
//     }
// 
//     public ArrayList<ElementBase> parse(String string)
//     {
//         // testing, for now
//         parsedElements.add(new ElementCrafting(parentGui, maxWidth / 2 - 5, currentY, 0).addAllGridSlots(new ItemStack[] { new ItemStack(Blocks.stone), new ItemStack(Blocks.stone), null, new ItemStack(Blocks.stone), new ItemStack(Blocks.stone), null, null, null, null }).addOutputSlot(new ItemStack(Blocks.stonebrick)));
//         parsedElements.add(new ElementCrafting(parentGui, 0, currentY, 1).addBothFurnaceSlots(new ItemStack[] { new ItemStack(Blocks.cobblestone), new ItemStack(Items.coal) }).addOutputSlot(new ItemStack(Blocks.stone)));
//         currentY += parsedElements.get(parsedElements.size() - 1).getHeight() + 5;
//         parseText(string);
//         currentY += 5;
//         parsedElements.add(new ElementCrafting(parentGui, maxWidth / 2 - 5, currentY, 0).addAllGridSlots(new ItemStack[] { new ItemStack(Blocks.stone), new ItemStack(Blocks.stone), null, new ItemStack(Blocks.stone), new ItemStack(Blocks.stone), null, null, null, null }).addOutputSlot(new ItemStack(Blocks.stonebrick)));
//         parsedElements.add(new ElementCrafting(parentGui, 0, currentY, 1).addBothFurnaceSlots(new ItemStack[] { new ItemStack(Blocks.cobblestone), new ItemStack(Items.coal) }).addOutputSlot(new ItemStack(Blocks.stone)));
//         currentY += parsedElements.get(parsedElements.size() - 1).getHeight() + 5;
//         parseText("And that's how you make Stone Bricks!");
// 
//         return parsedElements;
//     }
// 
//     @SuppressWarnings("unchecked")
//     private void parseText(String string)
//     {
//         if (maxWidth != -1 && fontRenderer.getStringWidth(string) > maxWidth)
//         {
//             List<String> list = fontRenderer.listFormattedStringToWidth(string, maxWidth);
// 
//             for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); currentY += fontRenderer.FONT_HEIGHT)
//             {
//                 parsedElements.add(new ElementText(parentGui, currentX, currentY, iterator.next(), null, 0xFFFFFF, false));
//             }
//         }
//         else
//         {
//             parsedElements.add(new ElementText(parentGui, currentX, currentY, string, null, 0xFFFFFF, false));
//             currentX += fontRenderer.getStringWidth(string);
//         }
//     }
// 
//     public Parser setMaxWidth(int width)
//     {
//         maxWidth = width;
//         return this;
//     }
// }


import java.util.ArrayList;
import java.util.List;
import modpacktweaks.client.gui.library.gui.IGuiBase;
import modpacktweaks.client.gui.library.gui.Parser;
import org.lwjgl.opengl.GL11;
                element.draw(posX + element.getRelativeX(), posY + element.getRelativeY());
                GL11.glDisable(GL11.GL_LIGHTING);
            }
        }
    }

    public ArrayList<ElementBase> getElements()
    {
        return elements;
    }

    @Override
    public boolean handleMouseClicked(int x, int y, int mouseButton)
    {
        for (ElementBase element : elements)
        {
            if (element.isVisible() && element.intersectsWith(x, y))
            {
                if (element.handleMouseClicked(x, y, mouseButton))
                {
                    return true;
                }
            }
        }

        return false;
    }

    public ElementBaseContainer parseElements(String string)
    {
// Path: src/main/java/modpacktweaks/client/gui/library/gui/IGuiBase.java
// public interface IGuiBase
// {
//     public ElementBase addElement(ElementBase element);
// 
//     public void addElements();
// 
//     public void addTabs();
// 
//     public void drawBackgroundTexture();
// 
//     public void drawElements();
// 
//     public ElementBase getElementAtPosition(int mouseX, int mouseY);
// 
//     public FontRenderer getFontRenderer();
// 
//     public int getGuiLeft();
// 
//     public int getGuiTop();
// 
//     public int getHeight();
// 
//     public RenderItem getItemRenderer();
// 
//     public Minecraft getMinecraft();
// 
//     public int getMouseX();
// 
//     public int getMouseY();
// 
//     public TextureManager getTextureManager();
// 
//     public int getWidth();
// 
//     public float getZLevel();
// 
//     public void handleElementButtonClick(String buttonName, int mouseButton);
// 
//     public void handleElementFakeSlotItemChange(ElementFakeItemSlot slot);
// 
//     public boolean isItemStackAllowedInFakeSlot(ElementFakeItemSlot slot, ItemStack stack);
// 
//     public void setZLevel(float zlevel);
// }
// 
// Path: src/main/java/modpacktweaks/client/gui/library/gui/Parser.java
// public class Parser
// {
//     FontRenderer fontRenderer;
//     IGuiBase parentGui;
//     ArrayList<ElementBase> parsedElements;
//     int maxWidth, currentX, currentY;
// 
//     public Parser(IGuiBase parent)
//     {
//         parsedElements = new ArrayList<ElementBase>();
//         parentGui = parent;
//         maxWidth = -1;
//         currentX = currentY = 0;
//         fontRenderer = Minecraft.getMinecraft().fontRenderer;
//     }
// 
//     public ArrayList<ElementBase> parse(String string)
//     {
//         // testing, for now
//         parsedElements.add(new ElementCrafting(parentGui, maxWidth / 2 - 5, currentY, 0).addAllGridSlots(new ItemStack[] { new ItemStack(Blocks.stone), new ItemStack(Blocks.stone), null, new ItemStack(Blocks.stone), new ItemStack(Blocks.stone), null, null, null, null }).addOutputSlot(new ItemStack(Blocks.stonebrick)));
//         parsedElements.add(new ElementCrafting(parentGui, 0, currentY, 1).addBothFurnaceSlots(new ItemStack[] { new ItemStack(Blocks.cobblestone), new ItemStack(Items.coal) }).addOutputSlot(new ItemStack(Blocks.stone)));
//         currentY += parsedElements.get(parsedElements.size() - 1).getHeight() + 5;
//         parseText(string);
//         currentY += 5;
//         parsedElements.add(new ElementCrafting(parentGui, maxWidth / 2 - 5, currentY, 0).addAllGridSlots(new ItemStack[] { new ItemStack(Blocks.stone), new ItemStack(Blocks.stone), null, new ItemStack(Blocks.stone), new ItemStack(Blocks.stone), null, null, null, null }).addOutputSlot(new ItemStack(Blocks.stonebrick)));
//         parsedElements.add(new ElementCrafting(parentGui, 0, currentY, 1).addBothFurnaceSlots(new ItemStack[] { new ItemStack(Blocks.cobblestone), new ItemStack(Items.coal) }).addOutputSlot(new ItemStack(Blocks.stone)));
//         currentY += parsedElements.get(parsedElements.size() - 1).getHeight() + 5;
//         parseText("And that's how you make Stone Bricks!");
// 
//         return parsedElements;
//     }
// 
//     @SuppressWarnings("unchecked")
//     private void parseText(String string)
//     {
//         if (maxWidth != -1 && fontRenderer.getStringWidth(string) > maxWidth)
//         {
//             List<String> list = fontRenderer.listFormattedStringToWidth(string, maxWidth);
// 
//             for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); currentY += fontRenderer.FONT_HEIGHT)
//             {
//                 parsedElements.add(new ElementText(parentGui, currentX, currentY, iterator.next(), null, 0xFFFFFF, false));
//             }
//         }
//         else
//         {
//             parsedElements.add(new ElementText(parentGui, currentX, currentY, string, null, 0xFFFFFF, false));
//             currentX += fontRenderer.getStringWidth(string);
//         }
//     }
// 
//     public Parser setMaxWidth(int width)
//     {
//         maxWidth = width;
//         return this;
//     }
// }


// Path: src/main/java/modpacktweaks/client/gui/library/gui/element/ElementBaseContainer.java
import java.util.ArrayList;
import java.util.List;
import modpacktweaks.client.gui.library.gui.IGuiBase;
import modpacktweaks.client.gui.library.gui.Parser;
import org.lwjgl.opengl.GL11;

                element.draw(posX + element.getRelativeX(), posY + element.getRelativeY());
                GL11.glDisable(GL11.GL_LIGHTING);
            }
        }
    }

    public ArrayList<ElementBase> getElements()
    {
        return elements;
    }

    @Override
    public boolean handleMouseClicked(int x, int y, int mouseButton)
    {
        for (ElementBase element : elements)
        {
            if (element.isVisible() && element.intersectsWith(x, y))
            {
                if (element.handleMouseClicked(x, y, mouseButton))
                {
                    return true;
                }
            }
        }

        return false;
    }

    public ElementBaseContainer parseElements(String string)
    {
        for (ElementBase element : new Parser(gui).setMaxWidth(sizeX).parse(string))