So I found some old click GUI code but I can't get it to work. I have 3 classes: GuiHack, GuiHackTab and GuiHackTabs

GuiHack
 
Code:
package net.minecraft.client.gui;

import java.awt.MouseInfo;
import java.util.List;

import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;
import net.minecraft.stats.AchievementList;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiMultiplayer;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.client.Hacks;

public class GuiHack extends GuiScreen{
    
    public static int offsetX = 0, offsetY = 0;
    
    public boolean doesGuiPauseGame(){
        return false;
    }
    
    public void initGui(){
        Keyboard.enableRepeatEvents(true);
    }
    
    public void onGuiClosed(){
        Keyboard.enableRepeatEvents(true);
    }
    
    protected void keyTyped(char c, int i){
        if(i == 1){
            mc.displayGuiScreen(null);
            return;
        }
    }
    
    public void drawScreen(int i, int j, float f){
        mouseDraggedMode(i, j);
        
        GuiHackTabs.player.draw(fontRenderer); // every tab needs this
        GuiHackTabs.combat.draw(fontRenderer);
        GuiHackTabs.render.draw(fontRenderer);
        GuiHackTabs.world.draw(fontRenderer);
    }
    
    protected void mouseClicked(int i, int j, int k){
        switch(GuiHackTabs.player.clicked(i, j)){
            case 0: 
                //code to execute when first item in this tab is clicked
                GuiHackTabs.player.toggleItem(); //use this to toggle the current item (the color in the rectangle)
                Hacks.climb = !Hacks.climb;
                break;
            case 1:
                GuiHackTabs.player.toggleItem();
                Hacks.fly = !Hacks.fly;
                break;
            case 2:
                GuiHackTabs.player.toggleItem();
                Hacks.jesus = !Hacks.jesus;
                break;
            case 3:
                GuiHackTabs.player.toggleItem();
                Hacks.nofall = !Hacks.nofall;
                break;
            case 4:
                GuiHackTabs.player.toggleItem();
                Hacks.sneak = !Hacks.sneak;
                break;
            case 5:
                GuiHackTabs.player.toggleItem();
                Hacks.sprint = !Hacks.sprint;
                break;
            case 6:
                GuiHackTabs.player.toggleItem();
                Hacks.step = !Hacks.step;
                break;
        }
        
        switch(GuiHackTabs.combat.clicked(i, j)){
            case 0:
                GuiHackTabs.combat.toggleItem();
                Hacks.aimbot = !Hacks.aimbot;
                break;
            case 1:
                GuiHackTabs.combat.toggleItem();
                Hacks.animalaura = !Hacks.animalaura;
                break;
            case 2:
                GuiHackTabs.combat.toggleItem();
                Hacks.killaura = !Hacks.killaura;
                break;
            case 3:
                GuiHackTabs.combat.toggleItem();
                Hacks.mobaura = !Hacks.mobaura;
                break;
        }
        
        switch(GuiHackTabs.render.clicked(i, j)){
            case 0:
                GuiHackTabs.render.toggleItem();
                Hacks.cavefinder = !Hacks.cavefinder;
                break;
            case 1:
                GuiHackTabs.render.toggleItem();
                Hacks.chestesp = !Hacks.chestesp;
                break;
            case 2:
                GuiHackTabs.render.toggleItem();
                Hacks.fullbright = !Hacks.fullbright;
                break;
            case 3:
                GuiHackTabs.render.toggleItem();
                Hacks.playeresp = !Hacks.playeresp;
                break;
            case 4:
                GuiHackTabs.render.toggleItem();
                Hacks.tracers = !Hacks.tracers;
                break;
            case 5:
                GuiHackTabs.render.toggleItem();
                Hacks.wallhack = !Hacks.wallhack;
                break;
            case 6:
                GuiHackTabs.render.toggleItem();
                Hacks.xray = !Hacks.xray;
                break;
        }
        
        switch(GuiHackTabs.world.clicked(i, j)){
            case 0:
                GuiHackTabs.world.toggleItem();
                Hacks.autotool = !Hacks.autotool;
                break;
            case 1:
                GuiHackTabs.world.toggleItem();
                Hacks.fastbreak = !Hacks.fastbreak;
                break;
            case 2:
                GuiHackTabs.world.toggleItem();
                Hacks.fastplace = !Hacks.fastplace;
                break;
        }
    }
    
    public void mouseDraggedMode(int i, int j)
    {
        GuiHackTabs.player.drag(i+offsetX, j+offsetY); //every tab need this
        GuiHackTabs.combat.drag(i+offsetX, j+offsetY);
        GuiHackTabs.render.drag(i+offsetX, j+offsetY);
        GuiHackTabs.world.drag(i+offsetX, j+offsetY);
    }
    
    protected void mouseMovedOrUp(int i, int j, int k){
        if(k == 0){
            GuiHackTabs.player.dragging(false); //every tab need this
            GuiHackTabs.combat.dragging(false);
            GuiHackTabs.render.dragging(false);
            GuiHackTabs.world.dragging(false);
        }
    }
    
    /** utils **/
    public static boolean clickedInRect(int par0, int par1, int par2, int par3, int par4, int par5){
        if(par2 <= par0 && par3 <= par1 && par4 >= par0 && par5 >= par1) return true;
        return false;
    }

    public static void drawOutlinedRect(int x1, int y1, int x2, int y2, int rcolor, int color, int thickness){
        Gui.drawRect(x1, y1, x2, y2, rcolor);
        Gui.drawRect(x1, y1, x2, y1 + thickness, color);
        Gui.drawRect(x1, y2, x2, y2 - thickness, color);
        Gui.drawRect(x1, y1, x1 + thickness, y2, color);
        Gui.drawRect(x2, y1, x2 - thickness, y2, color);
    }
}


GuiHackTab
 
Code:
package net.minecraft.client.gui;

import java.util.ArrayList;

public class GuiHackTab {
    public int posX, posY;
    private int x, y;
    public int width;
    public boolean draggable = false;
    private boolean dragging = false;
    private String title;
    private int toptextcolor;
    private int textcolor;
    private int bgcolor;
    private int bgtopcolor;
    private int btnbordercolor;
    private ArrayList Items = new ArrayList();
    private ArrayList eItems = new ArrayList();
    private int curItem;
    private int onColor = 0xFF00FF00, offColor = 0xFFFF0000;

    public GuiHackTab(int par0, int par1, int par2, String par3, int par4, int par5, int par6, int par7, int par8, boolean par9){
        //posX, posY, width, title, toptextcolor, textcolor, bgcolor, bgtopcolor, btnbordercolor
        x = posX = par0;
        y = posY = par1;
        width = par2;
        title = par3;
        toptextcolor = par4;
        textcolor = par5;
        bgcolor = par6;
        bgtopcolor = par7;
        btnbordercolor = par8;
        draggable = par9;
    }
    
    public void setColors(int par0, int par1){
        onColor = par0;
        offColor = par1;
    }
    
    public void resetPosition(){
        posX = x;
        posY = y;
    }
    
    public void addItem(String par0, boolean par1){
        Items.add(par0);
        eItems.add(par1);
    }
    
    public void setDraggable(boolean par0){
        draggable = par0;
        if(!par0) dragging = false;
    }
    
    public void toggleItem(){
        eItems.set(curItem, !(Boolean)eItems.get(curItem));
    }
    
    public void toggleItem(int par0){
        eItems.set(par0, !(Boolean)eItems.get(par0));
    }
    
    public void toggleItem(String par0){
        for(int i = 0; i < Items.size(); i++){
                if(Items.get(i) == par0){
                    eItems.set(i, !(Boolean)eItems.get(i));
                    return;
                }
            }
    }
    
    public void setItem(int par0, boolean par1){
        eItems.set(par0, par1);
    }
    
    public void setItem(String par0, boolean par1){
        for(int i = 0; i < Items.size(); i++){
                if(Items.get(i) == par0){
                    eItems.set(i, par1);
                    return;
                   }
            }
    }
    
    public boolean getItem(int par0){
        return (Boolean)eItems.get(par0);
    }
    
    public boolean getItem(String par0){
        for(int i = 0; i < Items.size(); i++){
                if(Items.get(i) == par0){
                    return (Boolean)eItems.get(i);
                }
            }
        return false;
    }
    
    public void draw(FontRenderer f){
        Gui.drawRect(posX, posY, posX + width, posY + 12, bgtopcolor);
        f.drawString(title, posX + 2, posY + 2, toptextcolor);

        for(int i = 0; i < Items.size(); i++){
            Gui.drawRect(posX, posY+13+i*12, posX + width, posY+13+(i+1)*12, bgcolor);
            GuiHack.drawOutlinedRect(posX + width-18, posY+13+i*12+3, posX + width-3, posY+13+i*12+9, (Boolean)eItems.get(i) ? onColor : offColor, btnbordercolor, -1);
            f.drawString(Items.get(i).toString(), posX + 2, posY+13+i*12+2, textcolor);
        }
    }
    
    public int clicked(int par0, int par1){
        if(GuiHack.clickedInRect(par0, par1, posX, posY, posX + width, posY + 12)){
            GuiHack.offsetX = posX - par0;
            GuiHack.offsetY = posY - par1;
            this.dragging(true);
        }
        for(int i = 0; i < Items.size(); i++){
            if(par0 >= posX + width-19 && par1 >= posY+13+i*12+2 && par0 <= posX + width-3 && par1 <= posY+13+i*12+9){
                curItem = i;
                return i;
            }
        }
        return -1;
    }
    
    public void drag(int par0, int par1){
        if(!draggable || !dragging) return;
        posX = par0;
        posY = par1;
    }
    
    public void dragging(boolean par0){
        dragging = par0;
    }
}


GuiHackTabs
 
Code:
package net.minecraft.client.gui;

public class GuiHackTabs {

    public static GuiHackTab player;
    public static GuiHackTab combat;
    public static GuiHackTab render;
    public static GuiHackTab world;
    
    public static void createTabs(){
        player = new GuiHackTab(1, 1, 100, "Player", -16711681, -1, 2013265920, -1476395008, -3355444, true);
        player.setColors(-16711936, -65536);
        player.addItem("Climb", false);
        player.addItem("Fly", false);
        player.addItem("Jesus", false);
        player.addItem("NoFall", false);
        player.addItem("Sneak", false);
        player.addItem("Sprint", false);
        player.addItem("Step", false);

        combat = new GuiHackTab(2 + player.posX + player.width, 1, 120, "Combat", -16711681, -1, 2013265920, -1476395008, -3355444, true);
        combat.setColors(-16711936, -65536);
        combat.addItem("Aimbot", false);
        combat.addItem("AnimalAura", false);
        combat.addItem("KillAura", false);
        combat.addItem("MobAura", false);

        render = new GuiHackTab(2 + combat.posX + combat.width, 1, 120, "Render", -16711681, -1, 2013265920, -1476395008, -3355444, true);
        render.setColors(-16711936, -65536);
        render.addItem("Cavefinder", false);
        render.addItem("Chest ESP", false);
        render.addItem("Fullbright", false);
        render.addItem("Player ESP", false);
        render.addItem("Tracers", false);
        render.addItem("Wallhack", false);
        render.addItem("Xray", false);

        world = new GuiHackTab(2 + render.posX + render.width, 1, 120, "World", -16711681, -1, 2013265920, -1476395008, -3355444, true);
        world.setColors(-16711936, -65536);
        world.addItem("Autotool", false);
        world.addItem("Fastbreak", false);
        world.addItem("Fastplace", false);
    }
}


When I execute the code in-game it crashes with this crash log
 
Code:
---- Minecraft Crash Report ----
// Uh... Did I do that?

Time: 15/02/14 18:07
Description: Rendering screen

java.lang.NullPointerException
    at net.minecraft.client.gui.GuiHack.mouseDraggedMode(GuiHack.java:149)
    at net.minecraft.client.gui.GuiHack.drawScreen(GuiHack.java:40)
    at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1036)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:952)
    at net.minecraft.client.Minecraft.run(Minecraft.java:844)
    at net.minecraft.client.main.Main.main(Main.java:93)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:27)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
    at net.minecraft.client.gui.GuiHack.mouseDraggedMode(GuiHack.java:149)
    at net.minecraft.client.gui.GuiHack.drawScreen(GuiHack.java:40)

-- Screen render details --
Details:
    Screen name: net.minecraft.client.gui.GuiHack
    Mouse location: Scaled: (0, 164). Absolute: (427, 240)
    Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2

-- Affected level --
Details:
    Level name: MpServer
    All players: 1 total; [EntityClientPlayerMP['Player519'/142, l='MpServer', x=39.13, y=65.62, z=228.19]]
    Chunk stats: MultiplayerChunkCache: 441
    Level seed: 0
    Level generator: ID 00 - default, ver 1. Features enabled: false
    Level generator options: 
    Level spawn location: World: (19,64,179), Chunk: (at 3,4,3 in 1,11; contains blocks 16,0,176 to 31,255,191), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
    Level time: 53662 game time, 53662 day time
    Level dimension: 0
    Level storage version: 0x00000 - Unknown?
    Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
    Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
    Forced entities: 21 total; [EntityMinecartChest['entity.MinecartChest.name'/68, l='MpServer', x=36.50, y=64.50, z=220.50], EntityBat['Bat'/69, l='MpServer', x=37.35, y=40.60, z=263.36], EntityClientPlayerMP['Player519'/142, l='MpServer', x=39.13, y=65.62, z=228.19], EntitySquid['Squid'/76, l='MpServer', x=66.73, y=56.00, z=237.00], EntitySquid['Squid'/77, l='MpServer', x=63.95, y=57.00, z=232.71], EntitySquid['Squid'/78, l='MpServer', x=67.70, y=56.43, z=238.31], EntitySquid['Squid'/79, l='MpServer', x=68.40, y=56.00, z=234.68], EntitySquid['Squid'/73, l='MpServer', x=64.92, y=56.00, z=233.51], EntitySquid['Squid'/75, l='MpServer', x=76.34, y=56.34, z=236.84], EntitySquid['Squid'/50, l='MpServer', x=0.69, y=56.00, z=229.50], EntitySquid['Squid'/49, l='MpServer', x=2.38, y=56.34, z=236.72], EntityCreeper['Creeper'/48, l='MpServer', x=11.50, y=56.00, z=221.50], EntitySquid['Squid'/80, l='MpServer', x=65.10, y=56.42, z=232.33], EntityChicken['Chicken'/92, l='MpServer', x=103.56, y=63.00, z=256.56], EntityChicken['Chicken'/89, l='MpServer', x=106.53, y=63.00, z=234.73], EntityBat['Bat'/63, l='MpServer', x=20.51, y=48.58, z=232.80], EntitySlime['Slime'/88, l='MpServer', x=98.78, y=18.00, z=194.22], EntityBat['Bat'/62, l='MpServer', x=20.98, y=50.25, z=231.05], EntityChicken['Chicken'/91, l='MpServer', x=104.34, y=63.00, z=246.31], EntityBat['Bat'/61, l='MpServer', x=15.50, y=51.66, z=216.96], EntityChicken['Chicken'/90, l='MpServer', x=99.44, y=63.00, z=238.35]]
    Retry entities: 0 total; []
    Server brand: fml,forge
    Server type: Integrated singleplayer server
Stacktrace:
    at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:440)
    at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2326)
    at net.minecraft.client.Minecraft.run(Minecraft.java:862)
    at net.minecraft.client.main.Main.main(Main.java:93)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:27)

-- System Details --
Details:
    Minecraft Version: 1.6.4
    Operating System: Windows 7 (amd64) version 6.1
    Java Version: 1.7.0_40, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 834248816 bytes (795 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    AABB Pool Size: 8067 (451752 bytes; 0 MB) allocated, 5 (280 bytes; 0 MB) used
    Suspicious classes: FML and Forge are installed
    IntCache: cache: 0, tcache: 0, allocated: 1, tallocated: 63
    FML: MCP v8.11 FML v6.4.49.965 Minecraft Forge 9.11.1.965 3 mods loaded, 3 mods active
    mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
    FML{6.4.49.965} [Forge Mod Loader] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
    Forge{9.11.1.965} [Minecraft Forge] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
    Launched Version: 1.6
    LWJGL: 2.9.0
    OpenGL: AMD Radeon HD 7700 Series GL version 4.3.12618 Compatibility Profile Context 13.251.0.0, ATI Technologies Inc.
    Is Modded: Definitely; Client brand changed to 'fml,forge'
    Type: Client (map_client.txt)
    Resource Pack: Default
    Current Language: English (UK)
    Profiler Position: N/A (disabled)
    Vec3 Pool Size: 2994 (167664 bytes; 0 MB) allocated, 37 (2072 bytes; 0 MB) used


I'm stumped, any help would be greatly appreciated