Fix meshswap orientations
There are several blocks which are not correctly oriented when meshswapped. Below are the breakdowns of these:
- [ ] Doors; rotate based on average face material location (ie which edge closer to)
- [ ] Pumpkins (lit, carved, jack O'lantern). More complex than others, logic being:
- Place Jack O'lantern if jack-o-lantern material found, and orient block based on this material location
- Same, but carved face instead
- If pumpkin side material found, plan to spawn standard pumpkin - but skip if later during the mesh analysis we find a carved or jack o'lantern in the same block space.
- [ ] Double chests; trickier, but could use the orientation of the front left panel for instance to orient the double wide. Implementation will vary on jmc2obj, vs mineways separated, vs mineways combined textures.
- [ ] Single chests; rotate based on front face material location
- [ ] Ender chest (same deal; not yet added as a meshswap block though)
- [ ] Furnace; rotate based on front face material location
- [ ] Hanging versus sitting (soul) lanterns. If any face of the lantern found above a certain height, place a hanging lantern with a chain instead.
- Implement either as separate models, or separately add the chains as an additional model and add the same lantern group but raised slightly
- [ ] Rail orientations. Requires looking at UVs and checking placement (rotation) versus local coordinates. Rail corners being the most complex. Lower priority due to complexity.
- [ ] Sunflower orientation; could infer Y-up orientation from direction of the sunflower's face for the same given block location (if selected)
- [ ] Banner orientation, and hanging versus standing banners. Low priority as both importers largely make good models already.
- [ ] Any plants placed in a pot; this will be tricky to check against unless detecting those that are 'pottable' and looking for slight increases in center origins Y-axis
- [ ] Dispenser (or at least, remove false flag of removing furnace side if there is no furnace front within the same block)
For those depending on extra logic based on a given face orientation, utilize the similar logic as used for vines. For Mineways combined textures, where an entire block may have the sam material name, it may require additional detection of a given face's UV offset and some hardcoded assumptions on this.
Several of these fixes require carrying logic through on whether other materials are present in the same block unit or not (furnace, pumpkins, etc). To support this, we must move to processing ALL blocks at once and generating the list of replacement locations and faces, and then iterating over these. Should not change processing time substantially, but might increase memory usage as references to faces may need to be kept (or at worst, re-processed).