public double requestResource(String name, double amount, boolean acceptPartial) {
   if (cockpit != null && cockpit != body) {
     if (cockpit.getUserData() instanceof ControlledBodyData) {
       ControlledBodyData data = (ControlledBodyData) cockpit.getUserData();
       return data.requestResource(name, amount, acceptPartial);
     }
   }
   if (acceptPartial) {
     double collected = removeResource(name, amount);
     int size = subparts.size();
     for (int a = 0; a < size && collected < amount; a++) {
       Body subpart = subparts.get(a);
       if (subpart.getUserData() instanceof ControlledBodyData) {
         ControlledBodyData data = (ControlledBodyData) subpart.getUserData();
         collected += data.removeResource(name, amount);
       }
     }
     return collected;
   } else {
     if (getResource(name).amount >= amount) return removeResource(name, amount);
     int size = subparts.size();
     for (int a = 0; a < size; a++) {
       Body subpart = subparts.get(a);
       if (subpart.getUserData() instanceof ControlledBodyData) {
         ControlledBodyData data = (ControlledBodyData) subpart.getUserData();
         if (data.getResource(name).amount >= amount) return data.removeResource(name, amount);
       }
     }
     return 0;
   }
 }