Two main interfaces are introduced:
- Container (chest, furnace, etc)
- MenuAccessor (includes Containers but also anvils, crafting tables etc. which are not containers)
Containers have inventories, locks, and everything from MenuAccessor
MenuAccessors have obstruction checks, and openToUnchecked() for plugins to use
I opted not to include precondition checks in openTo() because it's possible
to replicate those using the provided APIs if desired.
this unblocks a variety of changes, such as positionless tiles, enhanced APIs on Blocks for inventories, and also eliminates a bunch of cyclic references within the core code.
linked to #5033
these have working inventories, and their crafting menus will 'just work' once the items for the associated recipes have been implemented (maps, netherite).