- Fix self-assigned player skins getting overwritten
- Fix players with no skin silently throwing an exception, and properly handle it instead
- CRITICAL bug fix of handling Deadmau5's skin - it's not handled by his UUID but by his username
* Send message to Java if command is Bedrock-only
If a Java player attempts to use a Bedrock-only command, such as `geyser statistics`, they will get an error message stating that this command is only for Bedrock players.
This commit also cleans up Velocity Adventure dependency usage. Issues were caused because of the way relocation works and because Velocity also uses Adventure.
* Only look for a session if we have to
* Update languages submodule
Using /geyser advancements, Bedrock clients can get a visual on their progress.
Co-authored-by: yehudahrrs <47502993+yehudahrrs@users.noreply.github.com>
Co-authored-by: Olivia <chew@chew.pw>
Co-authored-by: rtm516 <rtm516@users.noreply.github.com>
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
Co-authored-by: rtm516 <ryantmilner@hotmail.co.uk>
Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com>
Microsoft accounts can now use Geyser, while maintaining full backwards compatibility with Mojang accounts.
Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com>
* Prevent server pong from appearing if MOTDs are too long
If the server MOTDs are 340 characters or longer, they will not appear. If this is the case, we trim each.
* Implement a more exact fix
* Add Ender Dragon effects and sounds
* Add proper death effect and clean up
* Add Ender Dragon respawn sound
* Possibly fix dragon breath direction?
* Update mappings
* Fix death animation triggering at low health
* Trigger death event when health is 0 and add explosions back
* Add comment
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>
* Implement book editing
Updates the PR created by @ForceUpdate1 for 1.16 support. Seems to work fine now that hand support is in MCProtocolLib.
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
* Remove debug line
* Simplify code
Currently still borked for creative mode.
* Fix books on creative
* Bug fixes
* Fix NPE?
* Blind fixes
* Send Book update before any player actions
* Remove debug prints
* Fix out of bounds for page replace and add
* Fix editing desync and remove empty pages from the end
* Send edit packet after signing
* Refactor
* Clean up and fix creative
* Apply suggestions from code review
Co-authored-by: rtm516 <rtm516@users.noreply.github.com>
Co-authored-by: ForceUpdate1 <mneuhaus44@gmail.com>
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
Co-authored-by: David Choo <davchoo3@gmail.com>
Co-authored-by: rtm516 <rtm516@users.noreply.github.com>
* Add Tickable interface
By having a tickable interface, we're only dedicating one thread to ticking entities and running tasks as opposed to several. This will also help with implementing world border support.
* removeEntity already clears tickableEntities for us
* Only tick the entity if it's not being ticked
* 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
* Work around there being a void floor in Bedrock
If the player's Y coordinate is -38 or below, we teleport the player below the void floor and they can safely die. :)
* Don't teleport if below Y -40
* sigh
* Have floorY be its own variable
* Add more comment
* More comments
* Finish my thought
Having an incongruency between the server render distance and the client render distance appears to cause issues, and I have not been able to encounter such a crash.
* Implement downstream PROXY protocol support
* Clarify the configuration version updating procedure
* Bump netty-resolver-dns to 4.1.56.Final
* Update Netty to .56
* Don't increase jar size by 2MB
Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com>
Previously, we wouldn't send the time if the server was sending the same time with doDaylightCycle on. However, this isn't vanilla behavior (for Bedrock nor Java) and can occasionally cause irregularities. The time is now always sent to Bedrock clients, and a daylightCycle field is added to GeyserSession to keep track of the doDaylightCycle gamerule we need to send to Bedrock. Removing the map we used to store the time may also improve memory usage since this was never cleaned up.
* Allow /help to work even if command suggestions are disabled
This sends a minimal available commands packet to permit /help sending to the server.
* Fix whitespace
* Just send an empty packet
* Change variable name
The ominous banner is a separate banner type in Bedrock. If we detect the ominous banner pattern, then we set the ominous banner type in NBT. This process is also checked vice-versa, allowing the ominous banner to be pulled from the Bedrock creative menu.
* 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
Fixes#1496 to the best of my knowledge. Any issue regarding the spawnpoint being off in terms of radius is up to the server at this point - would not be an us situation here.
Bedrock cuts off the last 3 digits consistently every time, meaning that the keepalive returned from bedrock is never fully accurate. However, if we multiply the value by 1000, then divide by 1000 when sending back to java, the proper value is returned.
* Change version in query to use a more informative string
* Fix removal of string
* Cleaner implementation of version
* Fix build
* Make more explicit what we're replacing
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
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>
Quite a lot of changes, but I was too lazy to split them in different commits (and they'll be squashed later anyway):
* Floodgate plugin message channels are now registered (because Spigot requires that, and I guess it's better practice)
* Updated the Statistics form to match the new Forms API
* The common jar is now much smaller, because Jackson isn't needed anymore in the common module
* Fixed some bugs in Forms where empty fields would lead to excluding them in the serialization (making Bedrock complain)
And a few other things, like a new boolean in RawSkin saying if the Skin is an Alex or Steve model.
* Fix regressions from 1.16.100
- Update mappings to fix recipe regressions and item differences
- Villager trading NBT now prefers the String identifier and not the integer ID
* Fix lodestone compass breaking
* Initial work on 1.16.100 - currently crashes the client
* Update runtime item states
* Use new Bedrock runtime IDs
Bedrock now hardcodes block runtime IDs in alphabetical order of the identifiers. This commit updates Geyser to accomodate.
- Remove runtime_block_states.dat and replace it with blockpalette.nbt
- Calculate the block runtime ID based on the order of the block palette
- Separate BlockTranslator.AIR into Bedrock and Java values
- Update the second layer of chunks to use air when not waterlogged
- Don't send item palette for now, as that's what crashes the game (will look into for v415)
- Other misc. changes
* Improve second layer chunk translation
* v415 support
- Add a message warning people they are on a beta version of Geyser
* Update to protocol v417
There are still some mappings changes that need to be gone through.
* Update runtime item states and clean up item frames
* Future-proof enchanment table
* Update for v418
* Update to v419
* Apply proper air ID to waterlogged chunk layer
* Fix missing import
* Remove beta warning
* Update mappings
* Manually patch runtime_item_states and send the ITEMS registry
* Update README
* Disable grindstone and smithing inventories (since they're broken)
* Use artifactory jenkins plugin (#1548)
* Use artifactory jenkins plugin
* Bump version to 1.2.0-SNAPSHOT
Co-authored-by: SupremeMortal <6178101+SupremeMortal@users.noreply.github.com>
* Rewrite message handling in MessageUtils to use Adventure
* Move to static Adventure commit to fix a bug
* Initial test implementation
* Add RGB downgrade test
* Move MessageUtils and rename
* Clean-up and fix tests
* Fixed sign and book content handling
* Fix blank signs causing NPEs
* Fix reset before message being stripped
* Add comment about the reset character
* Fix legacy style server motds
* Fix more messages being handled wrong
* Fix title packets being handled wrong
* Fix trailing formatting characters on the end of sign lines
* Add auto updating of Java locale files
* Add en_us locale updating and hash caching
* Changes to hash determining
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
* Fix GlobalPalette translation
Global palettes don't have their own internal palette, which cannot be iterated through to create a Bedrock palette. Therefore we simply iterate over the whole palette one time. This commit also fixes a regression with flowers/pistons being on multiple chunk sections.
* Don't declare bedrockPalette until after global palette check
* 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 even more entity metadata flags
* Add comment explaining magic value
* Fix horse flags and add more information
* Add more information about the Horse eating particles
* 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>
* Fixes some issues related to Scoreboard Teams
* The cached Score info should update no matter what kind of update the Team got.
* Team entities specified at the create Team packet should also be checked if they exist as Score in the registered Objectives
* Rewrote some Scoreboard code and fixed various issues
* Minor formatting changes
* Add config option for enabling achievements
* Disabled achievements by default and added warning about commands being disabled
* Update config.yml
* Rename achievements-enabled to xbox-achievements-enabled for clarity
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
* Fireball and ghast improvements
- Ghasts now visually show if they're charging a fireball
- Fireballs are now vastly better and will update better
* Add gravity and drag to projectiles
* Add check for session close and improve fireball
* Remove motion stuff from fireball
* Make fireball hittable
* Add wither skull entity
* Small changes
* Add note about laggy fireballs
Co-authored-by: David Choo <davchoo3@gmail.com>
* BlockEntity performance improvements
* Use chunk cache if possible for block caching
* Get new block state from ViaVersion if block entity
* Add Javadoc for FlowerPotBlockEntityTranslator.isFlowerBlock
* Remove debug line
* Don't add all RequiresBlockState instances if cache chunks is enabled
* Double chest map get optimization
* Last changes
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
* Fix bell sound and visuals
The bell sound now correctly plays.
Bells will also visually ring when rung by another player.
* Compress elses
* Add more whitespace to new code
* Send position update every 3 seconds if idle
Prevents timeouts in certain instances when AFK.
* Cancel position sending on dimension switching
* Remove debug lines
* Create function to centralize movement translation
* 1.16.4-pre1 support
* Update to support ViaVersion 3.2.0 (#1358)
* Update to support ViaVersion 3.2.0
This commit updates ViaVersion integration to support their recent mappings changes.
Co-authored-by: Nassim <jahnke.nassim@gmail.com>
* Send adventure settings on gamemode change after gamemode swap
* Update Velocity to 1.1.0 proper
* Update to 1.16.4
Co-authored-by: Nassim <jahnke.nassim@gmail.com>
* Add support for more recipes
- Tool repairing
- Book cloning
- Suspicious stew
- Tipped arrows
What still needs to be done:
- Map cloning/extending (though there may be item mapping mismatch getting in the way)
- Banner duplication (couldn't figure this out)
* Add some more spacing
* Explain recipe UUIDs
* Create and position Ender Dragon Bounding Box
Currently allows the player to "kill aura" target
the ender dragon.
* Use an entity to handle attacks for each hitbox
* Use the proper flag to make entities invisible
* Clean up and add some comments
* Ender dragon entity metadata improvements
* Add doc to segment functions
* Add changes
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
* Introduce CommandSender.getLocale()
This allows Geyser-specific commands (e.g. `/geyser help`) to be displayed in the (Java or Bedrock) player's default language, which stops those commands from simply being displayed in the default locale.
* Tweak Javadoc
* Set CommandManager's GeyserConnector to final
* Clean up
Usually this happened when joining from another dimension after the player exited to the main menu on the death screen. The player would not realize that they are dead.
- Added `GeyserCommand.isExecutableOnConsole()`. If this is set to false, the command will not appear as an option in the GUI.
- Added `GeyserCommand.getSubCommands()`. If not empty, the subcommand options will now appear in the GUI.
* 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
* Add statistics menu
* Changed back button text
* Add check to make sure the player requested the statistics display
* Better item translation support; misc changes
* Clean up session getting?
* Remove extra debug that is likely unnecessary
* Remove unused function
* Update languages submodule
* Clean up javadoc comment
* Fix typo
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
* 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
* 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
* make ChunkPosition use a hashCode implementation with far better hash distribution
this should improve the performance when used as a hash table key
* ChunkCache no longer uses position wrapper objects
this yields a roughly 15-20% increase in performance when converting chunk data
* fix code style issues
* 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.
* Various Scoreboard fixes
Fixes#1328 and a few other potential Scoreboard problems
* Consistent whitespacing
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
* Fix NotNull error with particles, replace incorrect string meta with int meta.
* Add back newline
* Remove debug line
* Update Protocol and prepare for merge
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
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.
* 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
* Tipped arrow translation
- Tipped arrow items are now properly translated both ways
- Tipped arrow particle effects are also translated, by having a list of all colors Java could send us and their Bedrock ID
* Remove a whitespace
This commit mainly focuses on fixing the crashing of villagers that occurred pre-1.14.
Co-authored-by: AJ Ferguson <AJ-Ferguson@users.noreply.github.com>
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
* Scoreboard: update score on UpdateType.ADD
* Actually fix
* Readd the Objective when a score changes
It looks like Objectives only update when you Remove the Objective and add it back using the SetDisplayObjective. This is hopefully a hotfix, but I think that there is no better way.
* Explain score tracking
Co-authored-by: Tim203 <mctim203@gmail.com>
* send resource packs
A lot of this code is nukkit-credits in the classes
* send resource packs
A lot of this code is nukkit-credits in the classes
* Remove unnecessary code/debugs
* use separately generated hashes
* Updated mappings and added .mcpack support
* "packs" directory auto-create (#484)
* "packs" directory auto-create
* cleaned indentation in ResourcePack.java
* Cleaned ResourcePack.java
* Another cleanup
I hate editor on github.
* Yet another
* Another indentation cleanup
* Fix resource pack loading
(cherry picked from commit f93b07491e)
* Move back to internal sha256 hashing
(cherry picked from commit 812a3d82b2)
* Add resource pack loading back after merge
* Add comments, config option and removed unused files
* Fix packs folder location and cleanup code
* Move to better options for the client
* Fix typos in comments
* Fix pack loading
* Try to make it compile
* Final touches?
* Add Javadoc for MathUtils#constrain
Co-authored-by: EOT3000 <43685885+EOT3000@users.noreply.github.com>
Co-authored-by: Vesek <61123478+Vesek@users.noreply.github.com>
Co-authored-by: Heath123 <heath.mitchell27@gmail.com>
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
* 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
* 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
* Translate CanPlaceOn/CanDestroy NBT
This commit adds support for the translation of the CanPlaceOn/CanDestroy NBT for Bedrock clients.
* Remove debug line
Mobile clients have a GUI for commands that shows if CommandPermission.OPERATOR or higher is sent. The commands present all require OP permission 2 or higher; therefore we set that command permission if the server tells us we have a OP permission level of 2 or higher.
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.
* 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
- Relocate all of our dependencies. This does not include MCProtocolLib and Nukkit dependencies at this time as there are no other known plugins that use these dependencies.
- Switch to a static commit for Adventure dependencies.
Tested working on all versions.
* GeyserSession: Always set Keep Inventory to true
This prevents the client from removing items on death in creative mode if Keep Inventory is true, but doesn't break existing behavior. Essentially, this assures full server-side behavior of the inventory during death.
* Small comment update
* OK, it was fine before the last commit, but make it better
* Downgrade reflections to 0.9.11
* Add comment explaining downgrade
* Move to pre-build reflections
* Update skins to use https and relative cache dir
* Move to https OptiFine cape url
* Add javadoc to isProduction
* Add ANDROID as a platform type
* Re-ordered PlatformType
* Change stop command to call onDisable
* 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
* Translate client-computed recipes
A handful of recipes are complex enough on Java Edition that the client simply calculates them after getting an assurance that they are valid recipes. This PR stores those recipes in a Bedrock-compatible format in mappings, then generates the CraftingData information on startup to send to the Bedrock client when called. This fixes firework rocket and star crafting, and fixes leather armor and shulker box dyeing.
The recipe information for everything except leather armor was taken right from the Bedrock server. The leather armor had to be created separately (see https://github.com/DoctorMacc/LeatherDyeingCreation). There will be a slight visual difference in the crafting result preview if the armor is not perfectly dyed to one of the sixteen colors, but this is a visual issue that will persist unless we calculate every single possbile combination.
* Revert other changes
* Register shulker box recipes properly
* Add break
* Update mappings
* Add shulker box item tooltip translating
This commit adds support for previewing the items inside of a shulker box. This does not do a full translation, and only does enough to translate the item information to the client, so as to prevent any accidental item modifying/removing on creative mode.
* Swap values
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.
* Fix dyed signs in Bedrock Edition
Add visual support (in Bedrock Edition) for signs colored with dye (in Java Edition)
* Javadoc for getBedrockSignColor(string)
* Simplified getBedrockSignColor(string)
Until 1.16, enchantment tables were impossible to implement properly in Geyser. When a user selects an enchantment in Bedrock, the client creates the book on its end and assumes the server is OK with it. Java requires a button to be pressed to select the enchantment. With 1.16, server authoritative inventories remove that on Bedrock. However, until our inventory rewrite is finished we are still stuck without enchantment table support. This commit serves as an alternative as we wait.
Enchantment table GUI support is still impossible since we are using the pre-1.16 inventory system. To solve this, this commit replaces the enchantment table GUI with a hopper GUI. The first slot serves as the spot you place the weapon. The second slot acts as the lapis slot - Geyser prevents any item from going in there that is not lapis. The final three slots act as the buttons; an enchanted book acts as each button, with the ability to show the translated text of each enchantment.
https://cdn.discordapp.com/attachments/613194828359925800/746164042359504927/unknown.png
* Auto-configure more if setting is enabled
- Geyser dumps now show if the config was automatic
- Floodgate is now automatically detected if the address is also automatically found
- If the plugin versions' servers have the listening address set to something different, set our remote address to that
* Fix Sponge config
* Remove redundant Getter
* Translate RAIN_STRENGTH to Bedrock client
Previously Geyser ignored RAIN_STRENGTH and instead relied on START_RAIN and STOP_RAIN only. This is unreliable on a vanilla server as these values are swapped around. This commit also implements thunder strength which was untranslated.
* Update rain code in JavaRespawnTranslator
The client should disallow players to join servers if they're not logged in, however this just adds a second layer of security in the event that it's somehow bypassed.
* Return permanent skins (alex/steve) when queried instead of returning an empty skin due to invalid lookup
* Fix Alex/Steve being shown incorrectly due to java signed integers
Co-authored-by: bundabrg <bundabrg@grieve.com.au>
* 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>
* Update effects mappings
* Use STOP_RECORD as the default record instead of null
* Add comments
* Update mappings submodule
* Update MCProtocolLib and effects
* Change level event used for EVAPORATE effect
The bedrock client plays an additional sound when using CAULDRON_EXPLODE.
The java client does not play any sound.
* Update mappings submodule
* 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
* Move blocking case to LivingEntity, and make other players bows animate.
This moves metadata ID 7 to LivingEntity, it's proper place. It also sets the 'USING_ITEM' flag which animates other players bows.
* Add skeleton aiming support
Skeletons don't have support of pushing their bows back on Bedrock, but this allows them to hold their arms up
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
* 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
* Added clone remote port option for bukkit, bungee and velocity
* Added clone remote port option for sponge
* Changed clone-remote-port description in config.yml
* Update config.yml
Updated config.yml to include a better description of the clone-remote-port option
* Updated GeyserSpongePlugin
An incorrect port was being edited before (remote instead of bedrock)
* Update config.yml
Co-authored-by: TeaNoDonuts <blackalegator@gmail.com>
Handshake now uses the server address directly from the config and no longer the IP from a domain (Some servers use the address that is given during the handshake)
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.
This commit supresses the NPE that was previously sent when using an invalid Mojang account. Instead, the Bedrock client is disconnected with an error message.
* Update Entity.java
* Switched to VillagerEntity.java and added indents and whitespace
* Fix indents and whitespace and changed to pattern and matcher
* Clean up indentation problems
Co-authored-by: Savagetechguy <jakehorner@gmail.com>
Co-authored-by: Redned <redned235@gmail.com>
* Fix version checking on older Java versions
We add a useragent header to stop cloudflare blocking the default Java useragent
* Explain why we need the user agent
Co-authored-by: Camotoy <20743703+DoctorMacc@users.noreply.github.com>
* Change versioning to match supported Bedrock version
Line up Geyser's versioning to match with the highest/currently supported Bedrock version for future tracking of older Geyser versions.
* Add version command
* Fix DEV check for version command
* Remove SNAPSHOT
* Update languages submodule
Co-authored-by: rtm516 <ryantmilner@hotmail.co.uk>