diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index d965f05bf..36ed3f02e 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -255,7 +255,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final EventLoop eventLoop; @Setter private AuthData authData; - @Setter private BedrockClientData clientData; /** * Used for Floodgate skin uploading @@ -1411,6 +1410,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.cameraData.handleGameModeChange(currentlySpectator, newGamemode); } + public void setClientData(BedrockClientData data) { + this.clientData = data; + this.inputCache.setInputMode( + org.cloudburstmc.protocol.bedrock.data.InputMode.values()[data.getCurrentInputMode().ordinal()]); + } + /** * Convenience method to reduce amount of duplicate code. Sends ServerboundUseItemPacket. */ @@ -2124,7 +2129,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public @NonNull InputMode inputMode() { - return InputMode.values()[clientData.getCurrentInputMode().ordinal()]; //todo + return InputMode.values()[inputCache.getInputMode().ordinal()]; //todo } @Override diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java index 79c37a5a8..f12c4d3c8 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.session.cache; import lombok.Getter; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.protocol.bedrock.data.InputMode; import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; @@ -45,6 +46,8 @@ public final class InputCache { private int jumpingTicks; @Getter @Setter private float jumpScale; + @Getter @Setter + private @MonotonicNonNull InputMode inputMode; public InputCache(GeyserSession session) { this.session = session; @@ -54,9 +57,10 @@ public final class InputCache { // Input is sent to the server before packet positions, as of 1.21.2 Set<PlayerAuthInputData> bedrockInput = packet.getInputData(); var oldInputPacket = this.inputPacket; + this.inputMode = packet.getInputMode(); boolean up, down, left, right; - if (packet.getInputMode() == InputMode.MOUSE) { + if (this.inputMode == InputMode.MOUSE) { up = bedrockInput.contains(PlayerAuthInputData.UP); down = bedrockInput.contains(PlayerAuthInputData.DOWN); left = bedrockInput.contains(PlayerAuthInputData.LEFT); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundResourcePackPushPacket.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundResourcePackPushPacket.java index 9e7306ab1..4091405e4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundResourcePackPushPacket.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundResourcePackPushPacket.java @@ -40,6 +40,8 @@ public class JavaClientboundResourcePackPushPacket extends PacketTranslator<Clie // We need to "answer" this to avoid timeout issues related to resource packs // If packs are required, we need to lie to the server that we accepted them, as we get kicked otherwise. if (packet.isRequired()) { + session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.ACCEPTED)); + session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.DOWNLOADED)); session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.SUCCESSFULLY_LOADED)); } else { session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.DECLINED));