Support BE emotes with Geyser
KosmX opened this issue ยท 13 comments
Feature to see Bedrock emotes with Geyser and vice-versa.
There are multiple issues with this idea, but not impossible.
Recently I asked Geyser developers to implement a packet API, so I can solve this from a Geyser extension.
In the GeyserMC Discord server:
https://discord.com/channels/613163671870242838/613170125696270357/1058045365812723812
GeyserMC/Geyser@c60a4d0
We have an implementation in GeyserMC! ๐
Last PR and it can finally work in production
GeyserMC/Geyser#3554
With the latest build GeyserMC/Geyser@ee754c5 Geyser does support emote events!
This issue can be finally closed.
https://bundabrg.github.io/Geyser/extensions/
Geyser does support extensions. I don't have to edit its code
Working on a plugin to solve the geyser-side issue
kosmx/geyser-emote-extension
issues with this:
Geyser doesn't send the BE data to the Java server and can't receive it from the Java server
Geyser is a proxy between the Bedrock client (BE) and Java server.
And it doesn't send anything about the emotes to the Java server. Emotecraft is a Server-side mod/plugin, it can't access the BE communication. It doesn't even know who is a Geyser or Java player.
Geyser itself has to be modified to let the java server know about emote plays in a plugin channel like geysermc:emote
BE has a different emote streaming format
As soon as Geyser tries to send the raw BE emote to the server, Emotecraft can listen to this channel.
Emotecraft does send the emote data itself (wiki page needed), allowing custom emotes to be played.
BE only sends an emote identifier XUID (similar to Java UUID)
Fortunately, BE emote ids are static, always the same for the same emote.
To make Emotecraft see BE emotes, it has to have a dictionary, to convert from BE ids to Emotecraft emotes.
And if an Emotecraft emote perfectly matches with an entry in the dictionary, send that id to Geyser->BE.
BE emotes have to be converted/replicated in Emotecraft format.
Unfortunately, BE encrypts all of its emotes, making it impossible to load these in Emotecraft.
Someone has to recreate every BE emotes with Emotecraft tools.
If I were able to decode these emotes, I would be able to load and convert these to Emotecraft format.
Limitations.
Even if I can modify JE's code however I want, I can't modify or even see BE's code.
BE doesn't support custom emote play, it can only see its own built-in emotes, while Emotecraft users can create any custom emotes.
(However, it can emulate that a paid emote was played)
JE Emotecraft is fully customizable, it doesn't have these limitations.