@Override public Object clone() throws CloneNotSupportedException { LevelScene c = (LevelScene) super.clone(); c.mario = (Mario) this.mario.clone(); c.level = (Level) this.level.clone(); c.mario.world = c; List<Sprite> clone = new ArrayList<Sprite>(this.sprites.size()); for (Sprite item : this.sprites) { if (item == mario) { clone.add(c.mario); } else { Sprite s = (Sprite) item.clone(); if (s.kind == Sprite.KIND_SHELL && ((Shell) s).carried && c.mario.carried != null) c.mario.carried = s; s.world = c; clone.add(s); } } c.sprites = clone; return c; }