* 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
* Fix maps not loading in sometimes
Adds a default map ID so the map item isnt invisible on bedrock.
Respond to the MapInfoRequestPacket so the image loads on first join.
* Remove debug log
* Add comments
* Fix block entities on older versions
This commit solves two problems related to block entities on older versions:
- Occasionally, tags would contain the ID under a StringTag with an empty value, and not the ID tag.
- The block entity regex did not account for block entity tags that were already in a Bedrock-compatible format (BlockEntity)
* Move BLOCK_ENTITY_TRANSLATIONS to BlockEntityTranslator
* Configuration updates
The main feature of this commit is switching Bukkit and BungeeCord to using Jackson configuration. This allows comments to load. Along with this, the Jackson configs have been consolidated into one abstract class, and a check is made to ensure auth-type cannot be set to Floodgate if Floodgate is not installed.
* Add deleted file; remove imports
* Re-add changing of Bukkit port
* Alphabetize import
* Alphabetize Bungee import
* Updates
* Swap values in GeyserJacksonConfiguration
* Add a null check for GeyserConnector in Bukkit's onDisable
This prevents changes upstream from immediately affecting Geyser workflow. This also removes the CodeMC repository in favor of Jitpack (which can use the commit hash as a version).
This adds the height of the armour stand to the position if its invisible and not a marker to counteract the scale being 0 therefore having a wrong nametag position
* Fix edge case when shift clicking an output slot
* Don't send window close packet if window is already closed
* Limit amount of window close packets sent to the client
Fixes hidden inventory bar bug
* Restrict user from unusable chest inventory slots
* Fix crafting table slot mappings
* Always send cursor update
This handles DISPLAY_ITEM and related properties separately on furnace minecarts in order to prevent overwriting furnace minecart graphics.
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
* Ignore all downstream packet errors
Instead of kicking the client off because of an error, we simply display a logger warning and suppress the error.
* If debug mode, print stacktrace
* Implement translator for AdventureSettingsPacket
The AdventureSettingsPacket is translated into ClientSettingsPacket so the MAY_FLY and FLYING flags are sent to the server. This fixes double-jumping on some servers that rely on the client sending their flying information through this packet.
* Remove top-secret code analysis
Firework NBT data might be either an int or byte and bedrock only takes it as a byte.
Co-authored-by: Arktisfox <65837019+Arktisfox@users.noreply.github.com>
Despite the Bukkit suffix being correct in terms of the API, the name causes some people to download CraftBukkit instead of Spigot or Paper. All internal references to Bukkit have been renamed to Spigot.
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).
Book pages can be sent as plain text rather than JSON. The text library doesn't use lenient parsing, so this fails, and the book isn't visible in the inventory.
This will convert the text into JSON if it's not already, before feeding it to the text library.
- 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.
* Check if firework item explosions tag is null (corresponding entity fix)
* Add null check on flight
* Add null check around Flight
* Fix newline on if statement
* Fix newline on if statement, add null check on flight, remove debug code.
* fix missing space..
Causes interacting (moving) an item in an item frame to delay by about half a second. This delay is still present on chunk load where this delay is absolutely needed in order to the item frame to show up.
* Fix ping passthrough on BungeeCord
* Initial implementation of direct ping passthrough
* Finished implementation of direct ping passthrough
* Remove test for something else entirely
* Fix standalone
* Add config option for ping passthrough interval
* Use GeyserPingInfo to reduce methods
* Add querying; modify ping passthrough
* Add separate config options for passthrough MOTD and player counts
* Convert all plugin bootstraps to use internal ping events to that other plugins can handle ping modifications
* Small changes
* Fix invalid packet spawm
* Add legacy ping passthrough option
* Fix BungeeCord
* Proper UUID for BungeeCord, thanks @theminecoder
* Update config version and messages
* Merge master... again
* Add missing javadocs and minor changes
Co-authored-by: James Harrison <james@fasttortoise.co.uk>
Co-authored-by: theminecoder <theminecoder.dev@gmail.com>
Co-authored-by: Redned <redned235@gmail.com>
* 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>
* Debugging improvements
- Added an ObjectArrayList of packets we don't anticipate ever translating. Currently only holds ServerUpdateLightPacket which we don't use and probably don't need.
- Only print debugging logs from sounds if they failed to play.
* Add space
* Add players able to sleep in beds
This commit sets the correct metadata and flags when the Java pose changes to sleeping.
* Player view while sleeping now works
* Fixed bed offset for other players
* Added ears geometry support
* Added ear fetching from mc capes
* Added support for deadmau5
* Commented, documented and cleaned code
* Allow bedrock players to see their java skin/cape/ears when joining
* Optimised Imports
* Fix missing else statement
* Moved ears and fixed elytra skins
* Added ears config option
* Fixed cape/elytra transparency
* Fixed slim skin geometry
* Fixed async ears request and added alex skin
* Fixed default elytra not showing with no cape
* Moved to normal Base64 functions
Co-authored-by: James Harrison <james@fasttortoise.co.uk>
* Add optional workaround for >Y128 Nether building
This commit adds a config option for building above the Nether by changing the Nether's dimension ID to match the End's.
* Only check for workaround application once
* Fix mappings?
* Include a bit more for the above bedrock nether building config option
Co-authored-by: Redned <redned235@gmail.com>
* Add option for disabling command suggestions; add config version
This commit adds an option for disabling command suggestions. If enabled, command suggestions will not be sent to the server so as to remove command freezing. This commit also adds a config version variable so users are notified when to regenerate their configs.
* Rename GeyserConfiguration.checkGeyserConfiguration()
* Added a docker container IP warning
* Corrected messages
* Moved to normal java file read instead of starting cat
* Fixed capitalisation on method name
- Adds the ELDER flag to all elder guardians, so they look like elder guardians and not giant regular guardians.
- Translates AFFECTED_BY_ELDER_GUARDIAN in JavaNotifyClientTranslator to add the elder guardian curse event.
This commit implements basic functionality for villager trading. This is still incomplete and is buggy in areas such as with villager trades that have more than one input and trade inputs and outputs containing NBT.
Co-authored-by: DoctorMacc <toy.fighter1@gmail.com>
* Leash fixes
- Adds visuals for leash string by translating ServerEntityAttachPacket
- Updates position offset for lead knots, making them properly appear on fences
* Add basic description of JavaEntityAttachTranslator
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.
* Fixed invisible entities nametags being displayed
* Fixed most entity collision boxes
* Fixed area effect cloud not displaying
* Fixed armour stand size and marker
* Fix baby collision boxes
* Fixed squid animation (rotation still broken)
* Fix Guardian beam for local player
* Fixed armour stand invisibility
* Fixed Wither boss data
* Fixed fishing line attach to entities
* 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
* Fix signs on everything except Paper
* Fix sign line placement
* Update shulker box block entity
Co-authored-by: James Harrison <james@fasttortoise.co.uk>
* Added legacy skin support for bedrock to bedrock clients
* Added bedrock to bedrock cape handling
* Added bedrock geometry support
* Bedrock skins now work in all auth modes
* Tonne of debug info
* Added fix to prevent customised skins from being loaded
* Added skin size to bedrock client data
* Cleaned debugging code
* Made bedrock cape take priority over third party
* Cut the customised skin image in half to hopefully get it to map
* Removed hacky conversion attempt
* Fixed bedrock skin caching on load and 1.14.60 support
* Cleaned up debug messages
* Added linked player ignore
* 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
* Made MessageUtils mimic java chat behavior
Send ClientSettingsPacket when player joins a server
* Fix comments
Set use client locale instead of hard coding
* Moved chat reset to fix some broken formatting
* Revert MessageUtil as rtm516 has implemented a better fix
* Initial work on flower pots
* Flowers work in-game, not yet chunk load
* Don't overwrite my code before merge
* Finish up flower pots; add piston support on chunk load
* Clean up
* Remove debug line; update mappings
* Added automatic git version infomation to startup
* Moved to compile time replacement
* Cleaned up old functions
* Removed redundant variable
* Added project version to version string
This prevents the block place sound (most notably buttons or blocks that don't occupy one whole block) from spamming the client if they have their place button held down.
These sound handlers had to be added since on Minecraft: Java Edition, these sounds are handled clientside whilst Minecraft: Bedrock Edition expects something from the server. To counter this, we emulate the sounds of that on Minecraft: Java Edition within Geyser and send it to the client. The code may seem a tadredundant, but there is not much of an alternative unfortunately.
The refactors in this commit go a bit beyond the scope of what the sound/effects branch was meant to accomplish, however most of these changes are necessary so chunk caching could be reintroduced for the standalone version. The chunk caching here allows for us to get the block ID before the block was broken, and in the future allow us to implement newer features. Chunk caching is optional (and disabled by default) as on non-Bukkit versions, it can eat up a lot of RAM with many players online.
* 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>
Previously, any time a block was clicked whether it be with a block in the hand or not, a sound would play. This checks if the item in the players hand is indeed a block as well as the same block in the UpdateBlockPacket, and properly plays the packet.
* Initial attempt
* Rewrite of the rewrite
* First working implementation
* Far better working implementation
* Clean up imports
* Remove commented code
* Cleanup code; change things
* Remove unused imports
* Cleanup code
* Add licenses; add comment
* More cleanup
* Clarifications
* It complained about a JavaDoc comment
* Update access permissions
* Switch from reflections to iteration over BlockEntityTranslators
* Fixed tropical fish display.
* Added base pufferfish class
* Fixed pufferfish, fish flags and cleaned up tropical fish spawning
* Fixed tropical fish model variant
* Fix tropical fish colours
This allows the description of the commands to display when listing the commands in bedrock by tab-completing. This is currently only available on Sponge and Bukkit versions as there is no support in BungeeCord and Velocity to get these values. This data is also not sent in any packet, so we cannot retrieve that from standalone either.
Might be better to eventually figure out why this is null to begin with, but for the time being considering maps are not working, we'd have to get to that step first. This just prevents the console from spamming errors, and will do until maps are fully implemented/fixed.
This was used for debugging purposes, to check if the map was correctly remapped to the client because, if it wasn't, it would've returned -1 as the map ID
This was used for debugging purposes, to check if the map was correctly remapped to the client because, if it wasn't, it would've returned -1 as the map ID
Java Edition includes the bed color in the namespaced ID; in Bedrock edition it's one of the tag values as a block entity. This code involves creating a table between block states and bed color numbers and looking that up on chunk load or block update.
This was caused because the max int size is 2,147,483,647, which is what Minecraft: Bedrock Edition uses in the time packet. In Minecraft: Java Edition, a long is used which has a max length of 9,223,372,036,854,775,807, thus causing the sky to bug out.
This commit uses the modulus operator with the max time value per-day of 24,000 to retrieve the remainder.
The normal identity UUID caused problems and caused the bedrock client to crash when using Floodgate. This was likely because on bedrock edition, it's a version 3 UUID opposed to java edition which uses version 4.