docs: public void start(MissionInit missionInit, IVideoProducer videoProducer, VideoProducedObserver observer, MalmoEnvServer envServer)
      {
          if (videoProducer == null)
          {
              return; // Don't start up if there is nothing to provide the video.
          }
  
          videoProducer.prepare(missionInit);
          this.missionInit = missionInit;
          this.videoProducer = videoProducer;
          this.observer = observer;
          this.envServer = envServer;
          this.buffer = BufferUtils.createByteBuffer(this.videoProducer.getRequiredBufferSize());
          this.headerbuffer = ByteBuffer.allocate(20).order(ByteOrder.BIG_ENDIAN);
          this.renderWidth = videoProducer.getWidth();
          this.renderHeight = videoProducer.getHeight();
          resizeIfNeeded();
          Display.setResizable(false); // prevent the user from resizing using the window borders
  
          ClientAgentConnection cac = missionInit.getClientAgentConnection();
          if (cac == null)
              return;	// Don't start up if we don't have any connection details.
  
          String agentIPAddress = cac.getAgentIPAddress();
          int agentPort = 0;
          switch (videoProducer.getVideoType())
          {
          case LUMINANCE:
              agentPort = cac.getAgentLuminancePort();
              break;
          case DEPTH_MAP:
              agentPort = cac.getAgentDepthPort();
              break;
          case VIDEO:
              agentPort = cac.getAgentVideoPort();
              break;
          case COLOUR_MAP:
              agentPort = cac.getAgentColourMapPort();
              break;
          }
  
          this.connection = new TCPSocketChannel(agentIPAddress, agentPort, "vid");
          this.failedTCPSendCount = 0;
  
          try
          {
              MinecraftForge.EVENT_BUS.register(this);
          }
          catch(Exception e)
          {
              System.out.println("Failed to register video hook: " + e);
          }
          this.isRunning = true;
      }