public void explainSecondarySelection(LocalPlayer player, LocalSession session, Vector pos) {
    player.print("Added point #" + region.size() + " at " + pos + ".");

    session.dispatchCUIEvent(player, new SelectionPoint2DEvent(region.size() - 1, pos, getArea()));
    session.dispatchCUIEvent(
        player, new SelectionMinMaxEvent(region.getMinimumY(), region.getMaximumY()));
  }
  public void explainPrimarySelection(LocalPlayer player, LocalSession session, Vector pos) {
    player.print("Starting a new polygon at " + pos + ".");

    session.dispatchCUIEvent(player, new SelectionShapeEvent(getTypeID()));
    session.dispatchCUIEvent(player, new SelectionPoint2DEvent(0, pos, getArea()));
    session.dispatchCUIEvent(
        player, new SelectionMinMaxEvent(region.getMinimumY(), region.getMaximumY()));
  }
  public void describeCUI(LocalSession session, LocalPlayer player) {
    final List<BlockVector2D> points = region.getPoints();
    for (int id = 0; id < points.size(); id++) {
      session.dispatchCUIEvent(player, new SelectionPoint2DEvent(id, points.get(id), getArea()));
    }

    session.dispatchCUIEvent(
        player, new SelectionMinMaxEvent(region.getMinimumY(), region.getMaximumY()));
  }