3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-10-03 08:21:06 +02:00

Update EmotePacket creation for 1.20 (#3841)

Include xuid and platformId in EmotePacket
Dieser Commit ist enthalten in:
Konicai 2023-06-08 23:43:45 -04:00 committet von GitHub
Ursprung ab577f66ac
Commit 53d002656f
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
2 geänderte Dateien mit 26 neuen und 7 gelöschten Zeilen

Datei anzeigen

@ -1949,8 +1949,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
} }
EmotePacket packet = new EmotePacket(); EmotePacket packet = new EmotePacket();
packet.setEmoteId(emoteId);
packet.setRuntimeEntityId(entity.getGeyserId()); packet.setRuntimeEntityId(entity.getGeyserId());
packet.setXuid("");
packet.setPlatformId(""); // BDS sends empty
packet.setEmoteId(emoteId);
sendUpstreamPacket(packet); sendUpstreamPacket(packet);
} }

Datei anzeigen

@ -56,21 +56,38 @@ public class BedrockEmoteTranslator extends PacketTranslator<EmotePacket> {
} }
int javaId = session.getPlayerEntity().getEntityId(); int javaId = session.getPlayerEntity().getEntityId();
String xuid = session.getAuthData().xuid();
String emote = packet.getEmoteId();
for (GeyserSession otherSession : session.getGeyser().getSessionManager().getSessions().values()) { for (GeyserSession otherSession : session.getGeyser().getSessionManager().getSessions().values()) {
if (otherSession != session) { if (otherSession != session) {
if (otherSession.isClosed()) continue; if (otherSession.isClosed()) continue;
if (otherSession.getEventLoop().inEventLoop()) { if (otherSession.getEventLoop().inEventLoop()) {
playEmote(otherSession, javaId, packet.getEmoteId()); playEmote(otherSession, javaId, xuid, emote);
} else { } else {
otherSession.executeInEventLoop(() -> playEmote(otherSession, javaId, packet.getEmoteId())); otherSession.executeInEventLoop(() -> playEmote(otherSession, javaId, xuid, emote));
} }
} }
} }
} }
private void playEmote(GeyserSession otherSession, int javaId, String emoteId) { /**
Entity otherEntity = otherSession.getEntityCache().getEntityByJavaId(javaId); // Must be ran on same thread * Play an emote by an emoter to the given session.
if (!(otherEntity instanceof PlayerEntity otherPlayer)) return; * This method must be called within the session's event loop.
otherSession.showEmote(otherPlayer, emoteId); *
* @param session the session to show the emote to
* @param emoterJavaId the java id of the emoter
* @param emoterXuid the xuid of the emoter
* @param emoteId the emote to play
*/
private static void playEmote(GeyserSession session, int emoterJavaId, String emoterXuid, String emoteId) {
Entity emoter = session.getEntityCache().getEntityByJavaId(emoterJavaId); // Must be ran on same thread
if (emoter instanceof PlayerEntity) {
EmotePacket packet = new EmotePacket();
packet.setRuntimeEntityId(emoter.getGeyserId());
packet.setXuid(emoterXuid);
packet.setPlatformId(""); // BDS sends empty
packet.setEmoteId(emoteId);
session.sendUpstreamPacket(packet);
}
} }
} }