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; } }