public double depositResource(String name, double amount, boolean acceptPartial) {
   if (cockpit != null && cockpit != body) {
     if (cockpit.getUserData() instanceof ControlledBodyData) {
       ControlledBodyData data = (ControlledBodyData) cockpit.getUserData();
       return data.depositResource(name, amount, acceptPartial);
     }
   }
   if (acceptPartial) {
     double collected = addResource(name, amount, true);
     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.addResource(name, amount - collected, true);
       }
     }
     return collected;
   } else {
     double deposited = addResource(name, amount, false);
     if (deposited != 0) return 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.allowedResource(name)) {
           deposited = data.addResource(name, amount, false);
           if (deposited != 0) return amount;
         }
       }
     }
     return 0;
   }
 }