Skip to content

Commit

Permalink
Fix online mode
Browse files Browse the repository at this point in the history
  • Loading branch information
AJ-Ferguson committed May 26, 2020

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent bdfdbea commit 34b2a4a
Showing 3 changed files with 51 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -124,6 +124,7 @@ public class GeyserSession implements CommandSender {

@Setter
private boolean spawned;
private boolean started;
private boolean closed;

@Setter
@@ -166,10 +167,6 @@ public class GeyserSession implements CommandSender {
@Setter
private int craftSlot = 0;

@Getter
@Setter
private boolean started;

private MinecraftProtocol protocol;

public GeyserSession(GeyserConnector connector, BedrockServerSession bedrockServerSession) {
@@ -195,11 +192,47 @@ public GeyserSession(GeyserConnector connector, BedrockServerSession bedrockServ
}

public void connect(RemoteServer remoteServer) {
startGame();
login();
this.remoteServer = remoteServer;
if (connector.getAuthType() != AuthType.ONLINE) {
connector.getLogger().info(
"Attempting to login using " + connector.getAuthType().name().toLowerCase() + " mode... " +
(connector.getAuthType() == AuthType.OFFLINE ?
"authentication is disabled." : "authentication will be encrypted"
)
);
authenticate(authData.getName());
} else {
playerEntity.setDimension(2);
initialize();
ChunkUtils.sendEmptyChunks(this, playerEntity.getPosition().toInt(), 0, false);
start();
}
}

public void start() {
if (!started) {
started = true;
PlayStatusPacket playStatusPacket = new PlayStatusPacket();
playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN);
upstream.sendPacket(playStatusPacket);
}
}

public void initialize() {
startGame();

BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket();
biomeDefinitionListPacket.setTag(BiomeTranslator.BIOMES);
upstream.sendPacket(biomeDefinitionListPacket);

ChunkUtils.sendEmptyChunks(this, playerEntity.getPosition().toInt(), 0, false);
AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket();
entityPacket.setTag(EntityIdentifierRegistry.ENTITY_IDENTIFIERS);
upstream.sendPacket(entityPacket);

InventoryContentPacket creativePacket = new InventoryContentPacket();
creativePacket.setContainerId(ContainerId.CREATIVE);
creativePacket.setContents(ItemRegistry.CREATIVE_ITEMS);
upstream.sendPacket(creativePacket);
}

public void fetchOurSkin(PlayerListPacket.Entry entry) {
@@ -213,18 +246,6 @@ public void fetchOurSkin(PlayerListPacket.Entry entry) {
getConnector().getLogger().debug("Sending skin for " + playerEntity.getUsername() + " " + authData.getUUID());
}

public void login() {
if (connector.getAuthType() != AuthType.ONLINE) {
connector.getLogger().info(
"Attempting to login using " + connector.getAuthType().name().toLowerCase() + " mode... " +
(connector.getAuthType() == AuthType.OFFLINE ?
"authentication is disabled." : "authentication will be encrypted"
)
);
authenticate(authData.getName());
}
}

public void authenticate(String username) {
authenticate(username, "");
}
Original file line number Diff line number Diff line change
@@ -53,15 +53,21 @@ public void translate(ServerJoinGamePacket packet, GeyserSession session) {
PlayerEntity entity = session.getPlayerEntity();
entity.setEntityId(packet.getEntityId());

if (!session.getUpstream().isInitialized()) {
entity.setDimension(DimensionUtils.javaToBedrock(packet.getDimension()));
session.initialize();
} else {
if (DimensionUtils.javaToBedrock(packet.getDimension()) == entity.getDimension()) {
DimensionUtils.switchDimension(session, entity.getDimension() == 0 ? -1 : 0);
}
DimensionUtils.switchDimension(session, packet.getDimension());
}

AdventureSettingsPacket bedrockPacket = new AdventureSettingsPacket();
bedrockPacket.setUniqueEntityId(session.getPlayerEntity().getGeyserId());
bedrockPacket.setPlayerPermission(PlayerPermission.MEMBER);
session.sendUpstreamPacket(bedrockPacket);

PlayStatusPacket playStatus = new PlayStatusPacket();
playStatus.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS);
// session.sendPacket(playStatus);

SetPlayerGameTypePacket playerGameTypePacket = new SetPlayerGameTypePacket();
playerGameTypePacket.setGamemode(packet.getGameMode().ordinal());
session.sendUpstreamPacket(playerGameTypePacket);
@@ -79,9 +85,5 @@ public void translate(ServerJoinGamePacket packet, GeyserSession session) {
List<SkinPart> skinParts = Arrays.asList(SkinPart.values());
ClientSettingsPacket clientSettingsPacket = new ClientSettingsPacket(locale, (byte) session.getRenderDistance(), ChatVisibility.FULL, true, skinParts, Hand.MAIN_HAND);
session.sendDownstreamPacket(clientSettingsPacket);

if (DimensionUtils.javaToBedrock(packet.getDimension()) != entity.getDimension()) {
DimensionUtils.switchDimension(session, packet.getDimension());
}
}
}
Original file line number Diff line number Diff line change
@@ -25,19 +25,11 @@

package org.geysermc.connector.network.translators.java.entity.player;

import com.nukkitx.protocol.bedrock.data.ContainerId;
import com.nukkitx.protocol.bedrock.packet.AvailableEntityIdentifiersPacket;
import com.nukkitx.protocol.bedrock.packet.BiomeDefinitionListPacket;
import com.nukkitx.protocol.bedrock.packet.InventoryContentPacket;
import com.nukkitx.protocol.bedrock.packet.PlayStatusPacket;
import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.entity.PlayerEntity;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.BiomeTranslator;
import org.geysermc.connector.network.translators.EntityIdentifierRegistry;
import org.geysermc.connector.network.translators.PacketTranslator;
import org.geysermc.connector.network.translators.Translator;
import org.geysermc.connector.network.translators.item.ItemRegistry;
import org.geysermc.connector.utils.SkinUtils;

import com.github.steveice10.mc.protocol.data.game.PlayerListEntry;
@@ -98,24 +90,6 @@ public void translate(ServerPlayerListEntryPacket packet, GeyserSession session)
session.sendUpstreamPacket(translate);
}

if (!session.isStarted()) {
session.setStarted(true);
BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket();
biomeDefinitionListPacket.setTag(BiomeTranslator.BIOMES);
session.sendUpstreamPacket(biomeDefinitionListPacket);

AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket();
entityPacket.setTag(EntityIdentifierRegistry.ENTITY_IDENTIFIERS);
session.sendUpstreamPacket(entityPacket);

InventoryContentPacket creativePacket = new InventoryContentPacket();
creativePacket.setContainerId(ContainerId.CREATIVE);
creativePacket.setContents(ItemRegistry.CREATIVE_ITEMS);
session.sendUpstreamPacket(creativePacket);

PlayStatusPacket playStatusPacket = new PlayStatusPacket();
playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN);
session.sendUpstreamPacket(playStatusPacket);
}
session.start();
}
}

0 comments on commit 34b2a4a

Please sign in to comment.