* BlockStorage is never used concurrently, no need to synchronize
* initial, semi-functional, faster chunk conversion
* faster chunk conversion works well for every situation except spigot
* delete unused ChunkPosition class
* preallocate and pool chunk encoding buffers
* make it work correctly on spigot
* make field naming more consistent
* attempt to upgrade to latest MCProtocolLib
* remove debug code
* compile against my MCProtocolLib fork while i wait for my upstream PR to be accepted
* return to Steveice10 MCProtocolLib
* fix some NPEs caused by race conditions in chunk conversion
tbh the whole session should be read-write locked for every operation
* fix code style issues
This fixes rare (?) instances where dimension switching doesn't finish loading on the client. Ideally a proper fix would send the finishing packets in the correct order but I didn't get far in this regard.
Fixes#1154 and #1072.
Other miscellaeous chunk-related fixes have also been included here.
* Implement helper methods for sending packets, fixes an NPE when chatting before connecting to the remote server
* Change method names
* Add a space between doc comment lines
* Add debug messages
The refactors in this commit go a bit beyond the scope of what the sound/effects branch was meant to accomplish, however most of these changes are necessary so chunk caching could be reintroduced for the standalone version. The chunk caching here allows for us to get the block ID before the block was broken, and in the future allow us to implement newer features. Chunk caching is optional (and disabled by default) as on non-Bukkit versions, it can eat up a lot of RAM with many players online.
* Initial attempt
* Rewrite of the rewrite
* First working implementation
* Far better working implementation
* Clean up imports
* Remove commented code
* Cleanup code; change things
* Remove unused imports
* Cleanup code
* Add licenses; add comment
* More cleanup
* Clarifications
* It complained about a JavaDoc comment
* Update access permissions
* Switch from reflections to iteration over BlockEntityTranslators
Java Edition includes the bed color in the namespaced ID; in Bedrock edition it's one of the tag values as a block entity. This code involves creating a table between block states and bed color numbers and looking that up on chunk load or block update.
Since signs are not sent as block (tile) entities in chunks when it comes to later Minecraft versions, caching and sending the signs after the chunk packet has been sent was the only way to fix this. Sign data sending has intentionally been delayed in JavaUpdateTileEntityTranslator in the event that a chunk takes a long time to send and the block entity data is sent first.
Most block entities should now *show up*. Some like signs will not as of yet, however when another player places one, they will display. Block entities are not yet fully functional and may only just be visible for the time being.
This does not fix chunks on its own, they're still very much a work in progress, however this commit should hopefully resolve a few issues. The client might still crash due to some invalid mappings (most likely), but this should bring us one step closer.
With hardcoded values for the chunks, the client wouldn't crash (which leads me to the conclusion stated above) and on the occasions that it would not time out, the chunks were empty.
Co-authored-by: SupremeMortal <suprememortal@users.noreply.github.com>