* Fix bucket interactions on creative mode
Bedrock uses the BLOCK_INTERACT enum of BedrockActionTranslator to truly indicate if a bucket should be used or not. In order to hook into this, we need to delay the bucket placing by about 5 milliseconds - this gives us time to cancel the interaction if needed.
Bucket sounds will now not play in this case as well.
* Forward keep alive packets to the client
Previously, MCProtocolLib (our Java protocol library) handled keep alive packets for us. This commit disables that option and 'forwards' the keep alive packets to the client, and sending the keep alive packet back once Bedrock sends us a ping response.
* Delete DataCache
* Update to latest MCProtocolLib
* Swap values around as a sanity check
In vanilla Bedrock, if you have operator status, the client sends a packet to change gamemode without confirmation from the server. Since we have a custom server option to request the gamemode, we just reset the gamemode and ignore this packet.
* Fix picking up liquids with buckets
The last fix to prevent bucket placement upon interacting with an inventory had an oversight with empty buckets, making them unusable. This commit fixes that while keeping the previous fix.
* Remove debug line
* Fix milk drinking and visual bucket item apperance
* Comment elaboration
* Make indentiation better
* Fix interaction spam bug
This references the Nukkit 1.0 fix for the client bug of spamming to interact. Holding down still works.
* Remove interaction position set at action type 1
* Remove debug line
* Implement command block and jigsaw support
- Command block UI is now fully implemented to match Java Edition.
- Command block minecarts are now supported.
- Command blocks now show the correct type of command block.
- Jigsaw blocks are translated.
Structure blocks can be implemented, but these will be trickier as there are significant GUI differences between Java and Bedrock.
* Add more detail about command block minecart color
* Set PlayerPermission.OPERATOR to allow command blocks to be destroyed
* Pick block improvements
- Creative block picking is now implemented. If the survival-styled block picking fails, then the item is created, following Java-style mechanics.
- Entity 'picking' is also implemented. The item is crafted using the same mechanics, and the same rules apply as normal block-picking (except it only works in creative mode, following Java.
* Switch some logic around
* Implement correct sign wrapping
This commit ensures that the auto-wrapping nature of Bedrock with signs is corrected. If a Bedrock player sends a sign that is auto-wrapped, it will now be interpreted by Geyser to fit on multiple lines. Additionally, Geyser will crop incoming sign text to prevent auto-wrapping.
* Don't wrap if it's the last line
* Port code from #486
Co-authored-by: Luke <32024335+lukeeey@users.noreply.github.com>
* Fix and clean code and add default gamemode changing
* Clean copyright
* Remove direct modification of server, clean up code and add player list xuid fetching.
* Move to custom settings menu
* Move sendAdventureSettings to GeyserSession
* Add javadoc comments
* Add translation support
* Remove updated copyright
* Clean up
* Clarify some javadoc comments
* Remove obsolete code
* Update languages submodule
* Fix javadoc comments
* Fix compile
Co-authored-by: Luke <32024335+lukeeey@users.noreply.github.com>
Co-authored-by: Redned <redned235@gmail.com>
* Fix Skin Caching
Changes:
* Instead of caching a skin based upon the player we cached it based upon the textureURL. This means multiple players with the same skin will benefit from the cache and more importantly will mean a player changing their skin will not get a false cache hit.
* This should fix all issues with SkinRestorer and will now correctly show the skin both to the player themselves and to other players
Closes#518
* Remove duplicated code
* Minimize playerlist updates
Changes:
* All async skin stuff will now just update skins and not be involved with sending the session to the player. This eliminates issues where the player list changes whilst an async task is occuring plus it means no invisible players while retrieving skin.
* Fix bug when retrieving cached skin
* When sending PlayerList packets ensure the skins have appropriate skinIds so the Bedrock client will cache hit/miss as needed
* Make sure to add and remove player when setting skin if they do not belong on the playerlist
* Make use of AuthData UUID when removing the player
* Revert removal of checking if entity is valid when initialized
This section is supposed to send all spawned entities in the java world to a player only after they've initialized. By removing this check it would also be sending entities that exist but are not spawned.
* Optimizations
Changes:
* Check for duplicate requests based on textureURL instead of player ID
* Don't use the PlayerSkinPacket. It duplicates the data sent in the PlayerListPacket and without it the players still get skin updates.
* Support caching of skins to disk based on configuration variable
If a skin is downloaded it will be saved to `cache/skins` using a base64 encoded filename of the textureUrl, if allowed by setting a non 0 value for the configuration variable `cache-skins`
When reading a skin we try load it from a cache file first before trying to download it.
We don't yet expire them but do update their last modification so we know which ones have been accessed.
* Update `config.yml` with cache-skins directive, defaulting to disabled
* Merge Fixes
* Cache all images instead of just skins
Changes:
* Move the image caching from skins to where images may get downloaded so this also covers capes and anything else that uses the same method of image retrieval
* Updated config value from `cache-skins` to `cache-images`
* Updated cache location from `cache/skins` to `cache/images`
* Images are stored in png format with a uuid. This may make debugging easier as they can be directly opened.
* Implement cached image expiry
If `cache-images` is set to a value greater than 0 then a scheduled task will occur once a day that will remove images with a modification date older than the value in days.
* Force skin changes as trusted
* Resolve PR queries
* Fix signed int causing issues calculating expiry time for images
* Reset Defaults to 0 and implement Google Timed Eviction cache for Images
* Add memory cache for Capes
Co-authored-by: Brendan Grieve <brendan.grieve@zepli.com.au>
Co-authored-by: bundabrg <bundabrg@grieve.com.au>
* Support immediate respawn gamerule
This commit now supports immediate respawn if the server enables it - both on the setting being applied on join and the setting being modified in-game. This also refactors the respawning process to more closely match BDS behavior - nothing broke in my testing but more testing is needed.
* Reuse spawned variable instead of creating new variable
Desktop clients send an extra item use packet for buckets whereas mobile clients dont send the second use packet causing the issue as a ClientPlayerUseItemPacket doesn't get sent to the Java server.
Buckets on mobile may still be glitchy as the player must be directly facing the block they want to place liquid on.
Sending a ClientPlayerAbilitiesPacket allows the player to successfully fly.
This commit also removes the setting of the CAN_FLY entity flag on creative mode. This did not break anything in my testing.
* Add villager interactive tag
This adds a button/controller guide for villager trading, if the villager is able to trade.
* Use a broader variable for metadata