Oh wait I had an idea:
If I destroyed the Aircraft this should change the content of the getItems() array. This will confuse the foreach loop and it will skip some aircraft.
Obviously the aircrafts are destroyed with a small delay, that's why it is working for some aircraft and some not.
Solution: Store the aircraft to destroy in a seperate list first. Then loop over this list and destroy the aircrafts in it. This way even if the content of getItems() is changed, the content of the list stays the same
I'll check this and report back.