Fix online mode no auth token dimension setting on login

This commit is contained in:
Camotoy 2024-07-28 12:56:41 -04:00
parent 258d6aadb4
commit 45f96a03e7
No known key found for this signature in database
GPG key ID: 7EEFB66FE798081F
2 changed files with 16 additions and 11 deletions

View file

@ -26,28 +26,25 @@
package org.geysermc.geyser.translator.protocol.java; package org.geysermc.geyser.translator.protocol.java;
import net.kyori.adventure.key.Key; import net.kyori.adventure.key.Key;
import org.geysermc.erosion.Constants;
import org.geysermc.geyser.level.JavaDimension;
import org.geysermc.geyser.util.MinecraftKey;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerSpawnInfo;
import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundCustomPayloadPacket;
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundLoginPacket;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.GameRuleData; import org.cloudburstmc.protocol.bedrock.data.GameRuleData;
import org.cloudburstmc.protocol.bedrock.data.LevelEvent;
import org.cloudburstmc.protocol.bedrock.packet.GameRulesChangedPacket; import org.cloudburstmc.protocol.bedrock.packet.GameRulesChangedPacket;
import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket;
import org.cloudburstmc.protocol.bedrock.packet.SetPlayerGameTypePacket; import org.cloudburstmc.protocol.bedrock.packet.SetPlayerGameTypePacket;
import org.geysermc.erosion.Constants;
import org.geysermc.floodgate.pluginmessage.PluginMessageChannels; import org.geysermc.floodgate.pluginmessage.PluginMessageChannels;
import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.network.AuthType;
import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity;
import org.geysermc.geyser.erosion.GeyserboundHandshakePacketHandler; import org.geysermc.geyser.erosion.GeyserboundHandshakePacketHandler;
import org.geysermc.geyser.level.JavaDimension;
import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator;
import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.protocol.Translator;
import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.ChunkUtils;
import org.geysermc.geyser.util.DimensionUtils; import org.geysermc.geyser.util.DimensionUtils;
import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.EntityUtils;
import org.geysermc.geyser.util.MinecraftKey;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerSpawnInfo;
import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundCustomPayloadPacket;
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundLoginPacket;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Arrays; import java.util.Arrays;
@ -83,6 +80,13 @@ public class JavaLoginTranslator extends PacketTranslator<ClientboundLoginPacket
// Remove extra hearts, hunger, etc. // Remove extra hearts, hunger, etc.
entity.resetAttributes(); entity.resetAttributes();
entity.resetMetadata(); entity.resetMetadata();
} else if (session.getUpstream().isInitialized()) {
if (newDimension.bedrockId() == 0) {
// A dimension switch will not happen, so make sure we initialized the dimension choice.
// Otherwise, the dimension switch will fill these values in.
session.setDimensionType(newDimension);
DimensionUtils.setBedrockDimension(session, newDimension.bedrockId());
}
} }
session.setWorldName(spawnInfo.getWorldName()); session.setWorldName(spawnInfo.getWorldName());

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.util; package org.geysermc.geyser.util;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.math.vector.Vector3i;
import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEvent;
@ -61,7 +62,7 @@ public class DimensionUtils {
} }
public static void switchDimension(GeyserSession session, JavaDimension javaDimension, int bedrockDimension) { public static void switchDimension(GeyserSession session, JavaDimension javaDimension, int bedrockDimension) {
JavaDimension previousDimension = session.getDimensionType(); // previous java dimension @Nullable JavaDimension previousDimension = session.getDimensionType(); // previous java dimension; can be null if an online player with no saved auth token logs in.
Entity player = session.getPlayerEntity(); Entity player = session.getPlayerEntity();
@ -109,7 +110,7 @@ public class DimensionUtils {
if (isCustomBedrockNetherId()) { if (isCustomBedrockNetherId()) {
if (javaDimension.isNetherLike()) { if (javaDimension.isNetherLike()) {
session.camera().sendFog(BEDROCK_FOG_HELL); session.camera().sendFog(BEDROCK_FOG_HELL);
} else if (previousDimension.isNetherLike()) { } else if (previousDimension != null && previousDimension.isNetherLike()) {
session.camera().removeFog(BEDROCK_FOG_HELL); session.camera().removeFog(BEDROCK_FOG_HELL);
} }
} }