On Bedrock, a banner must be placed in the chestplate slot in order to be visible. On Java Edition, banners are placed in the helmet slot. This commit fixes the issue by migrating banners to the chestplate spot if the chestplate spot is empty.
This commit also fixes pillager poses if they're not holding a crossbow, along with a couple other optimizations.
Conveniently enough, the minecart furnace icon still exists in the vanilla Bedrock Edition game (thanks to Kastle for this discovery). With this and the translation string still being present, we can add the item into the game with only minor issues.
- If GeyserConnector.getPlayerByUuid is given null, it will return null
- Never set a session's UUID to null if possible - but have precautions if for some reason it is
Note that this needs to be revisited to see if it's even needed, or perhaps some sort of Guava cache.
- `getCachedPlayerEntityLink` now removes the entry if found
- Skulls will not have player entity links so we shouldn't bother checking
- Clear the entity link cache on dimension switch
- Shield code is now down as the player is sneaking - it doesn't wait for the server to update our sneaking status
- Shield is now applied correctly when sneaking and then moving to the shield item
* Update Adventure from 4.5.0 to 4.7.0
* Fix test failure due to changes in Adventure color mapping
Co-authored-by: rtm516 <rtm516@users.noreply.github.com>
For whatever reason, item frames use the PlayerActionPacket in any non-creative gamemode, but creative mode keeps existing behavior. This has the benefit of fixing adventure mode item frame item dropping.
This commit implements 1.16.210 support while still keeping 1.16.100 and 1.16.210 compatibility.
Co-authored-by: AJ Ferguson <AJ-Ferguson@users.noreply.github.com>
Co-authored-by: rtm516 <rtm516@users.noreply.github.com>
* Fix logging into a server with Fabric Networking API
Turns out we prevented the response to LoginPluginRequestPacket. Fabric API 0.28 and later will not let a client join without this response.
* Switch back to Jitpack just for Protocol to prevent weird errors
* Re-add sub protocol check
* Simplify check
* Update protocol lib and fastutil
Move away from jitpack since we store each unique snapshot build in the opencollab repo.
Also, trove hasn't existed in the network repo for quite some time so the exclusion isn't needed anymore.
* Store fastutil version in a property
* Store adventure version in a property
Firework stars, unsurprisingly, share some code with fireworks. This commit adds a new FireworkBaseTranslator abstract class that both firework items extend from, in order to use the explosion translation code. Firework stars also show color.
Armor stands now show armor if invisible. This allows both names and armor to show on an armor stand, and should allow for custom models that use armor stands to show, to an extent.
Barrels are a bit more complicated to lump in with chests for the time being. It *can* be fixed, but it requires workarounds.
This reverts commit 07f36affb9.
Merge commands with the same parameters (thanks Supreme)
Add more suggestion types (blocks, items, entities)
More optimizations
Co-authored-by: SupremeMortal <6178101+SupremeMortal@users.noreply.github.com>
Co-authored-by: rtm516 <rtm516@users.noreply.github.com>
As of 1.16.210.59, the sub-MOTD cannot be blank: https://bugs.mojang.com/browse/MCPE-117979
This workaround will be implemented now so the widest range of Geyser versions will properly show a ping in 1.16.210 - better an 'outdated server' message than 'unable to connect to world.'
* Skin and skull fixes
- Handle the occasional greater-than-128-px skin
- Remove unused Jackson dependency
- Update used Jackson dependency
- Handle skin downloading on another thread
* Other small touchups
* Flush after rescaling
- Don't schedule for setting jumping on and off if cache chunks is enabled, since we don't need to know that
- Add a new setting to disable player ping forwarding. Hopefully this helps with timeouts.
With this commit, debug messages in Netty and Protocol will now show if debug mode is enabled in the Geyser standalone config.
There is also some small tuning to the PacketTranslatorRegistry for cleanliness and maybe some minor performance.
- Add the Java version being used
- Add the Minecraft server version being used, alongside the platform type that is using that version. Not used for proxies as those have to be on latest to support the latest Minecraft version
* Fix EndGateway translation issue.
* Change contains check to instanceof LongTag as requested.
* Add space after if as requested.
Co-authored-by: Brave_Chicken <bravechickengamer@gmail.com>
- 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>