public boolean execute(Robot paramRobot)
  {
    this.ArmAnimator = paramRobot.getAnimationComponent("GrabberArm");
    this.Arm = ((GrabberArm)paramRobot.getAssembly("GrabberArm"));

    switch (this.state)
    {
    case 0:
      if (this.Arm.getCarrying() != null)
      {
        Position localPosition = paramRobot.inFrontOf();
        if (paramRobot.getEnvironment().isObstructed(localPosition.getMapPoint()))
        {
          paramRobot.playSound("Robot-Deny");
          GameApplet.thisApplet.sendStatusMessage(
            "Grabber Arm on RCX: " + paramRobot.getName() + ": Cannot put down something there.\n");
          return true;
        }
        PhysicalObject localPhysicalObject = (PhysicalObject)this.Arm.getCarrying();
        localPhysicalObject.setPosition(localPosition);
        localPhysicalObject.setVisible(false);
        paramRobot.getEnvironment().addObject(localPhysicalObject);
        paramRobot.playSound("Arm-Down");
        this.ArmAnimator.setSequence(this.Arm.getAnimationSequence(1), null, false);
        this.ArmAnimator.reset();
        this.state += 1;
        return false;
      }
      paramRobot.playSound("Robot-Question");
      GameApplet.thisApplet.sendStatusMessage(
        "Grabber Arm on RCX: " + paramRobot.getName() + ": Not holding anything.\n");
      return true;
    case 1:
      if (!this.ArmAnimator.nextImage())
      {
        this.ArmAnimator.setSequence(this.Arm.getAnimationSequence(2), null, false);
        this.ArmAnimator.reset();
        ((PhysicalObject)this.Arm.getCarrying()).setVisible(true);
        ((PhysicalObject)this.Arm.getCarrying()).repaint();
        this.state += 1;
      }
      return false;
    case 2:
      if (!this.ArmAnimator.nextImage())
        this.state += 1;
      return false;
    case 3:
      this.Arm.setCarrying(null);
      this.ArmAnimator.setSequence(this.Arm.getAnimationSequence(0), null, false);
      this.ArmAnimator.reset();
      this.state = 0;
      return true;
    }

    return true;
  }