Emotecraft (Forge)

Emotecraft (Forge)

1M Downloads

Support BE emotes with Geyser

KosmX opened this issue ยท 13 comments

commented

Feature to see Bedrock emotes with Geyser and vice-versa.
There are multiple issues with this idea, but not impossible.

commented

Keep it open until Geyser merge/add the emote channel feature

commented

Recently I asked Geyser developers to implement a packet API, so I can solve this from a Geyser extension.

commented

Did this get any further?

commented

They (Geyser) promised me an API, but I haven't seen anything done.

commented
commented

GeyserMC/Geyser@c60a4d0
We have an implementation in GeyserMC! ๐ŸŽ‰

commented

Last PR and it can finally work in production
GeyserMC/Geyser#3554

commented

With the latest build GeyserMC/Geyser@ee754c5 Geyser does support emote events!

This issue can be finally closed.

commented

https://bundabrg.github.io/Geyser/extensions/
Geyser does support extensions. I don't have to edit its code

commented

Working on a plugin to solve the geyser-side issue
kosmx/geyser-emote-extension

commented

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.