* Improve InventoryHolder handling
* Don't snapshot holder on Paper
* Ensure viewer has silent enabled first to reduce impact on Spigot
* Remove BlockState reflection
Instead of reading every single player file from disk when doing a fuzzy match, we now do a single lookup from a SQLite database. The database is populated once with all existing players' names on startup, then maintained when players join. This is a massive performance boost for servers that have high player counts or run on spinning disks.
Lookups now require that the first character of the target player's name be correct (case-insensitive). For Geyser-like names, this extends to the first character of their real name. For example, "XxXJohnMinecraftXxX" can no longer be located by a "johnminecraft" search. A search for "xjohnminecraft" could be used instead. A Geyser player ".FranMinecraft" would require ".f" to be eligible, i.e. "franmc" cannot produce the correct result while ".franmc" might.
* Extract common chest code, expose view-only state
* Add prefix for view-only state
* Add nodes for behavior of accessing equal
* Include permission-based denial feedback
Boy, and I thought having to make the first commit was embarrassing, wait till people see that I realized that was missing and didn't think about the counterpart. At least I did think about it though, I wasn't even testing on 1.20 where it would break things.
* Add fallthrough to "parent" language
* I am aware that the "correct" parent for Portuguese is likely `pt_pt`, but as no one has submitted it, welcome to Brazil.
* Use English for lowercasing locale name
* Fixes potential issues locating translations for certain languages on systems in other languages
* Migrate locales to "locale" subdirectory to reduce clutter
* Fix container settings getting clobbered/not suggested correctly/not editable
* This was due to a quirk of the YAML parser - OpenInv was looking for `'on'` and `'off'` but translation files provided `'true'` and `'false'` due to the paths being interpreted as truthy. The built-in translations have had their paths quoted to fix this. You will need to manually relocate these if you have custom translations.
This is a from-scratch rewrite of the SpecialPlayerInventory.
* Prettify layout
* Reorganized contents
* Uses client-side placeholders in nonstandard slots to clarify usage
* Add cursor and crafting slots
* Remove duplicate slots from own inventory
* Reimplement shift-clicking, improve drag support
* Prioritize equipping gear with quick-move
* Use client translations for title
* Update off-hand when in other containers
* Modifications to the off-hand would not be sent to clients while they had another container open. Updates occurred immediately on container exit.
* Move to API method for shulker expansion check
* Update to 1.20.6
* Drop 1.20.2 support
* Fix containment check
* Drop 1.19.4 to compile without redoing Actions