Microsoft accounts can now use Geyser, while maintaining full backwards compatibility with Mojang accounts.
Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com>
Client-side block animations and reach checks are now added.
This commit also includes cleanup in BlockChangeTranslator as well as proper Netherite tool support for calculating block breaking.
Co-authored-by: rtm516 <rtm516@users.noreply.github.com>
* Dimension switching cleanup
Cleans up dimension switching logic that should no longer be needed. Also fixes above Nether Bedrock building dimension switching.
* Clear thunder on dimension switch too
* Clarify fake dimension switch function name
* Javadoc that
* Fix boat movement on land
1.16.100 appears to now take advantage of two newer entity metadata properties, IS_BUOYANT and BUOYANCY_DATA. Without the former, moving on land will not work properly. With the former and without the latter, moving in water no longer works.
* Use offset kind of
Custom skulls are now implemented within the world when placed as a block. This is achieved by placing a fake player entity in the same spot.
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
Co-authored-by: bundabrg <brendan@grieve.com.au>
Co-authored-by: bundabrg <bundabrg@grieve.com.au>
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
Movement is now significant better, especially on slabs, stairs, and other half-blocks.
Co-authored-by: RednedEpic <redned235@gmail.com>
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
Co-authored-by: Tim203 <mctim203@gmail.com>
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
* Add more interactive tags (mobile buttons)
This expands our support for showing the interactive tags on touchscreen and console setups. This is not complete - specifically, the food compatibility of creatures needs to be expanded upon (I will work on this later and does not stop this PR from being mergable). This also includes:
- Creepers who are ignited with flint and steel now show up properly
- Zombie villagers now shake properly when converting and show their region outfits
* Add more food choices and add more panda entity metadata
* Re-add eating flag
* Remove debug line
* Refactor dimension usage, finish interactive tag usage, bees
* Print statements... ._.
* Don't make eating item packet data a non-constant
* Move BAMBOO to ItemRegistry
* Add missing break
* Make changes
* Minor final changes
* Fix crash with GSit lay and use Java bed position data
* Fix GSit's lay position
* Move Bed Position metadata to the right class
* Actually fix lay for PosePlugin
* Revert "Actually fix lay for PosePlugin"
This reverts commit 3f21261162.
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
* Predict the trajectory of projectiles and add particles
* Correct lingering potion gravity
* Update last position on move absolute
* Clean up
* Add egg to ItemRegistry and update mappings
* Fix mob mount positions
Uses offsets from Java Edition.
* Fix Boat mount pos for multiple passengers and Fix Ravager
Remove unnecessary horse metadata
* Fix Minecart & Boat Mount Pos, Fix Player Height Offset
* Use offset of EntityType.PLAYER
* Add back metadata
Fishing rods pulling players is a clientside feature on Java. On Bedrock, a SetEntityMotionPacket is sent to the client. Therefore this PR implements the Java fishing rod pulling mechanics and sends it off to Bedrock, which sends MovePlayerPackets that are sent to the server.
* 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
* 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>
* JavaEntityMetadataTranslator: replace stack trace with concise warning
Removes the stack trace given when a ClassCastException occurs and replaces it with a friendlier message. Class cast errors will happen since some servers send incorrect values, and apparently it is default Minecraft behavior to ignore them.
* Update languages submodule
* 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
* Add rabbit jumping animation
This isn't perfect as Bedrock uses a duration and Java just sends the jumping animation. There may be something else missing from the puzzle piece.
* Remove debug line
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 1.9+ PvP 'Cooldown'
This commit adds a subtitle that acts as the Java cooldown. This is an optional feature disabled in the config with `show-cooldown`. This does not appear on plugins that use OldCombatMechanics.
* No need to bump up the config version; I was just tested with OldCombatMechanics
* Use simpler casting
* Use session variable of lastHitTime for theoretically better performance
* Reuse attribute value calculation from AttributeUtils
* Remove unused imports
* Revert config version update in config.yml
* 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
Bedrock knows its own UUID and when it receives the Java uuid it will either crash (MCEE) or add a ghost player onto the playerlist (Bedrock).
This change will check if an entity is the client and if so replace the entities UUID with the AuthData UUID.
A refactor of JavaPlayerListEntryTranslator was also done as I got confused each time what it was doing so it is now hopefully a bit clearer and also fixes the case where an entity is removed but still exists on the server (Vanished).
- Merged ItemTranslator and ItemStackTranslator together.
- Split ItemTranslator into two classes: ItemTranslator and ItemRegistry. The registry is where items are registered, and the translator class is where item translation takes place.
- Made most of ItemTranslator's methods static and removed the initialization in Toolbox.
- Moved a handful of registry classes previously ending with 'Utils' to a 'Registry' class to be more fitting for the term.
- Moved inventory and block entity registration out of Translators.
- Renamed Translators to PacketTranslatorRegistry.
- Yeeted Toolbox.
- Minor cleanups and small refactors.
* 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>