          {
              this.selectServer(i);
          }
+diff --git a/src/net/minecraft/client/gui/GuiNewChat.java b/src/net/minecraft/client/gui/GuiNewChat.java
+index b43a7c5..f5ca79d 100644
+--- a/src/net/minecraft/client/gui/GuiNewChat.java
++++ b/src/net/minecraft/client/gui/GuiNewChat.java
+@@ -3,17 +3,23 @@ package net.minecraft.client.gui;
+ import com.google.common.base.Joiner;
+ import com.google.common.base.Splitter;
+ import com.google.common.collect.Lists;
++
+ import java.util.Iterator;
+ import java.util.List;
++
+ import net.minecraft.client.Minecraft;
+ import net.minecraft.client.renderer.GlStateManager;
+ import net.minecraft.entity.player.EntityPlayer;
+ import net.minecraft.util.math.MathHelper;
+ import net.minecraft.util.text.ITextComponent;
+ import net.minecraft.util.text.TextComponentString;
++
+ import org.apache.logging.log4j.LogManager;
+ import org.apache.logging.log4j.Logger;
+ 
++import tk.wurst_client.WurstClient;
++import tk.wurst_client.events.ChatInputEvent;
++
+ public class GuiNewChat extends Gui
+ {
+     private static final Splitter field_184061_a = Splitter.on('\n');
+@@ -137,6 +143,13 @@ public class GuiNewChat extends Gui
+      */
+     public void printChatMessageWithOptionalDeletion(ITextComponent chatComponent, int chatLineId)
+     {
++    	//TODO: Client
++    	ChatInputEvent event = new ChatInputEvent(chatComponent, drawnChatLines);
++    	WurstClient.INSTANCE.events.fireEvent(ChatInputEvent.class, event);
++    	if(event.isCancelled())
++    		return;
++    	chatComponent = event.getComponent();
++    	
+         this.setChatLine(chatComponent, chatLineId, this.mc.ingameGUI.getUpdateCounter(), false);
+         logger.info("[CHAT] " + field_184062_f.join(field_184061_a.split(chatComponent.getUnformattedText())));
+     }
 diff --git a/src/net/minecraft/client/gui/GuiScreenBook.java b/src/net/minecraft/client/gui/GuiScreenBook.java
 index 884aeb0..36eb022 100644
 --- a/src/net/minecraft/client/gui/GuiScreenBook.java

 src/net/minecraft/entity/EntityLivingBase.java     |   6 +-
 src/net/minecraft/entity/monster/EntityZombie.java |   2 +-
 src/net/minecraft/entity/player/EntityPlayer.java  |   7 +-
 src/net/minecraft/realms/Realms.java               |   4 +-
 33 files changed, 441 insertions(+), 121 deletions(-)

diff --git a/src/net/minecraft/block/state/BlockStateContainer.java b/src/net/minecraft/block/state/BlockStateContainer.java
index 72ab5aa..7148dae 100644

     }
 
     public Scoreboard getWorldScoreboard()
diff --git a/src/net/minecraft/network/NetworkManager.java b/src/net/minecraft/network/NetworkManager.java
index 0d831b0..31ff3d6 100644
--- a/src/net/minecraft/network/NetworkManager.java
+++ b/src/net/minecraft/network/NetworkManager.java
@@ -2,6 +2,7 @@ package net.minecraft.network;
 
 import com.google.common.collect.Queues;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
+
 import io.netty.bootstrap.Bootstrap;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelException;
@@ -27,17 +28,21 @@ import io.netty.handler.timeout.TimeoutException;
 import io.netty.util.AttributeKey;
 import io.netty.util.concurrent.Future;
 import io.netty.util.concurrent.GenericFutureListener;
+
 import java.net.InetAddress;
 import java.net.SocketAddress;
 import java.util.Queue;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+
 import javax.crypto.SecretKey;
+
 import net.minecraft.util.CryptManager;
 import net.minecraft.util.ITickable;
 import net.minecraft.util.LazyLoadBase;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.TextComponentString;
 import net.minecraft.util.text.TextComponentTranslation;
+
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.logging.log4j.LogManager;
@@ -45,6 +50,9 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
 
+import tk.wurst_client.WurstClient;
+import tk.wurst_client.events.PacketInputEvent;
+
 public class NetworkManager extends SimpleChannelInboundHandler < Packet<? >>
 {
     private static final Logger logger = LogManager.getLogger();
@@ -130,9 +138,21 @@ public class NetworkManager extends SimpleChannelInboundHandler < Packet<? >>
     {
         TextComponentTranslation textcomponenttranslation;
 
+
         if (p_exceptionCaught_2_ instanceof TimeoutException)
         {
             textcomponenttranslation = new TextComponentTranslation("disconnect.timeout", new Object[0]);
+            
+			// TODO: Client
+		}else if(p_exceptionCaught_2_ instanceof NullPointerException)
+		{
+			textcomponenttranslation =
+				new TextComponentTranslation(
+					"disconnect.genericReason",
+					"c[6Wurstc]r\n"
+						+ "You are using a ocrackedr alt on a opremiumr server."
+						+ "\ncDon't do that!");
+			
 		}
         else
         {
@@ -147,6 +167,12 @@ public class NetworkManager extends SimpleChannelInboundHandler < Packet<? >>
     {
         if (this.channel.isOpen())
         {
+			//TODO: Client
+			PacketInputEvent event = new PacketInputEvent(p_channelRead0_2_);
+			WurstClient.INSTANCE.events.fireEvent(PacketInputEvent.class, event);
+			if(event.isCancelled())
+				return;
+			
             try
             {
                 ((Packet<INetHandler>)p_channelRead0_2_).processPacket(this.packetListener);
diff --git a/src/net/minecraft/realms/Realms.java b/src/net/minecraft/realms/Realms.java
index 3cba0d7..3243c19 100644
--- a/src/net/minecraft/realms/Realms.java
