@Override
 public void screenTargetMoved(
     final ScreenTarget target, final int x, final int y, final int height) {
   if (this.m_useTargetPositionning) {
     final Point2i position = this.getComputedPosition(x, y, height);
     super.setPosition(position.getX(), position.getY(), false);
   }
 }
 @Override
 protected void execute(final int screenX, final int screenY) {
   final AbstractBuildingDefinition buildingDefinition =
       BuildingDefinitionHelper.getFirstBuildingFor(this.m_havenCatalogEntry);
   final Point2i cell = this.m_worldEditor.getCellCoordFromMouse(screenX, screenY);
   final Point2i cellOffset =
       this.m_worldEditor
           .getHavenWorldImages()
           .getBuildingCellOffset(buildingDefinition.getEditorGroupId());
   final int cellX = cell.getX() + cellOffset.getX();
   final int cellY = cell.getY() + cellOffset.getY();
   final InsertBuildingValidator validator =
       new InsertBuildingValidator(
           this.m_worldEditor.getWorkingHavenWorld(), ClientPartitionPatchLibrary.INSTANCE);
   final BuildingStruct info =
       new BuildingStruct(
           InsertBuilding.UID_GENERATOR,
           buildingDefinition.getId(),
           0,
           (short) cellX,
           (short) cellY);
   validator.validate(info);
   final BuildingItem item = this.m_worldEditor.createBuilding(info);
   (this.m_modification = new AddBuildingModification(item)).addErrors(validator.getErrors());
 }
 /**
  * Add vector to a point: r = this + p.
  *
  * @param p the point
  * @return the result.
  * @see Point2i#add(Point2i, Vector2i)
  */
 @Pure
 public Point2i operator_plus(Point2i p) {
   Point2i r = new Point2i();
   r.add(p, this);
   return r;
 }
 /**
  * Sets the value of this tuple to the difference of tuples t1 and t2 (this = t1 - t2).
  *
  * @param t1 the first tuple
  * @param t2 the second tuple
  */
 public void sub(Point2i t1, Point2i t2) {
   this.x = t1.getX() - t2.getX();
   this.y = t1.getY() - t2.getY();
 }