* Fix inconsistencies with players and the player list
This commit makes the player list entry packet control the player cache, fixing inconsistencies that appeared when removing the override on despawning the player.
* Update comments
This commit adds support for name tag visibility in teams. If a player is set to hide their nametag, it will be hidden from the Bedrock client. Notably, this fixes most NPC nametag hiding, including Citizens. This does not fix some NPC nametag hiding - there are several NPCs in Hypixel that still have a nametag show up, and they are not a part of any team.
* Added a way to check if debug logging is enabled
* Improved scoreboard performance
* Include Teams in pps and return pending pps instead when higher then pps
Some servers have a huge amount of score packets when the player logs in, but before this commit, only after the first high pps (packets per second) the ScoreboardUpdater will be used (after pending packets per second have been moved to packets per second). But this commit fixes that the ScoreboardUpdater can be used on the second that the pps is getting high.
* Fixed team pre + suffix "null" issue and added threshold config option
Fixed team pre + suffix "null" issue.
When the prefix and/or suffix of a Team is null, "null" will be returned instead of null (Due to the way that MCProtocolLib is made and designed). This is fixed by simply checking if the prefix and/or suffix equal "null" and if that is the case, replace it with "".
Added threshold option.
Gave the person who is running Geyser an option to specify the first Scoreboard packets per second threshold to further improve performance by lowering the setting or decrease performance by relaxing the setting a bit. The value can't be higher then 250 (the second threshold), because it'll always choose the lowest threshold.
* Forgot to bump config version
* Small changes
* Reverted version bump, changed Sponge config, changed FloodgateKeyLoader
Reverted version bump
Camotoy said that you only need to bump the config version if the change is breaking, the config version bump has been reverted.
Changed Sponge config
The Sponge config has been modified to look like the other platform configurations.
Changed FloodgateKeyLoader
* Changed default-locale and (remote) address as requested by Camotoy
* Reduce bandwidth and a few final tweaks
* Made the scoreboard-packet-threshold a bit higher due to improvements
* 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>
* Entity (mostly rotation) fixes
This PR adds:
- Pig health displaying. Doesn't fix pigs being able to be controlled
- Entity rotation is *mostly* correct. Villagers and sitting cats still seem to be odd but the ender dragon works great.
* Remove debug line
* Abstract rotation updating to functions per-entity
* Don't include changes from other projects
* Minor improvements
* Make updateRotation and updatePositionAndRotation cleaner
* Javadoc
* Initial support for entity mounts*
* This only works for viewing other players on mounts/vehicles. Currently, mounting on vehicles through Geyser with bedrock does not work at all, though, you can see other Java players on mounts just fine.
* Fix Bedrock player mounting; add minecart offset
* Remove debug code
* Fix boat animation
* Remove debug code
* Add notice of possible steering flip
* Add translator for PlayerInputPacket
* Upload WIP code for BoatEntity.java
* Add animation for rowing on Bedrock side
* Clean up debug code, start on boat movement
* Add notice about flying horses
* Rename BedrockPlayerInputPacket.java to BedrockPlayerInputTranslator.java
* Delete BedrockPlayerInputPacket.java
* Use Translator Annotation again; Thanks to LegacyGamerHD
* Upload ineffective mount-on-login code
* Upload current changes with no debug code
* Change case where applicable
* Change Integer[] to int[]; Change schedule() to execute()
* Don't use Thread.Sleep() and instead call itself again
* Fix players not being linked on login/chunk load
* Little changes
* Minor improvements/fixes to boats
* Remove empty file
* Fix horse flying.
* Various entity mounting fixes
* Add mounting offsets for skeleton and zombie horses
* Another round of entity mount-related fixes
- Add offsets for skeleton and zombie horses (Thanks to tester DirtNasty)
- Boats can now be placed in survival (Thanks again to tester DirtNasty)
- Boats and minecarts can now shake
* Add translating for ServerVehicleMovePacket
* Cleaning up
* More cleaning up
* Add interactive tag support for mountable entities
* Boats move far more nicely
* Add horse heart visuals
* Update interactive tags
Co-authored-by: RednedEpic <redned235@gmail.com>
Absorption is an attribute in Bedrock and an entity metadata value in Java. This commit sends an attribute update packet when the metadata value is updated.
* Add parrots on player shoulders
Parrots on player shoulders are a separate entity in Bedrock, but part of the player metadata in Java. This commit creates a parrot entity from the NBT data given by the player's entity data.
* Remove unused import
* Nullify parrot after despawning
* Remove debug code
* 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
* fix capes
* remove gson
* clean up
* clean up
* formatting code
* Made the changes fit a bit better into the already existing code
* Throw the nullptr before the download complete message,
making debugging skins less confusing
Co-authored-by: Tim203 <mctim203@gmail.com>
This should make the process of translating entity metadata a whole lot easier and more organized. Future features involving entities and checking if they're capable of doing certain things should also be much easier now.