Basically, I just moved the player across the tilemaps by weird intervals like 1.5 and 0.5. An easier way of doing it is just .worldtoCell() with the tilemap
For the boxes, I stored them in a dictionary and then I checked if a box was on the tile by providing a Vector3 key. I then got each box by just continuing to go one up until there wasn't a box there. I then took that array, reversed it because the dictionary got mad because of duplicate keys. moved the boxes, and changed the keys to match the new positions by just creating new entries in the dictionary. If you want, I can post the code on GitHub.