@Override
  public void decodeInto(ChannelHandlerContext ctx, ByteBuf source, MSPacket msg) {
    msg.readData(source);

    try {
      INetHandler net = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();
      EntityPlayer player = null;
      if (FMLCommonHandler.instance().getEffectiveSide().isServer())
        player = ((NetHandlerPlayServer) net).playerEntity;
      else player = Minecraft.getMinecraft().thePlayer;

      if (player == null) return;

      switch (msg.getId()) {
        case PacketIds.TILE_UPDATE:
          handleTileUpdate(player, (TileUpdatePacket) msg);
          break;
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 @Override
 public void encodeInto(ChannelHandlerContext ctx, MSPacket msg, ByteBuf target) throws Exception {
   msg.writeData(target);
 }