@@ -42,7 +42,7 @@
public class BedrockPositionTrackingDBClientRequestTranslator extends PacketTranslator<PositionTrackingDBClientRequestPacket> {

@Override
public void translate(PositionTrackingDBClientRequestPacket packet, GeyserSession session) {
public void translate(GeyserSession session, PositionTrackingDBClientRequestPacket packet) {
PositionTrackingDBServerBroadcastPacket broadcastPacket = new PositionTrackingDBServerBroadcastPacket();
broadcastPacket.setTrackingId(packet.getTrackingId());

@@ -40,7 +40,7 @@
public class BedrockRespawnTranslator extends PacketTranslator<RespawnPacket> {

@Override
public void translate(RespawnPacket packet, GeyserSession session) {
public void translate(GeyserSession session, RespawnPacket packet) {
if (packet.getState() == RespawnPacket.State.CLIENT_READY) {
// Previously we only sent the respawn packet before the server finished loading
// The message included was 'Otherwise when immediate respawn is on the client never loads'
@@ -38,7 +38,7 @@
@Translator(packet = ServerSettingsRequestPacket.class)
public class BedrockServerSettingsRequestTranslator extends PacketTranslator<ServerSettingsRequestPacket> {
@Override
public void translate(ServerSettingsRequestPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSettingsRequestPacket packet) {
CustomForm window = SettingsUtils.buildForm(session);
int windowId = session.getFormCache().addForm(window);

@@ -37,7 +37,7 @@
@Translator(packet = SetLocalPlayerAsInitializedPacket.class)
public class BedrockSetLocalPlayerAsInitializedTranslator extends PacketTranslator<SetLocalPlayerAsInitializedPacket> {
@Override
public void translate(SetLocalPlayerAsInitializedPacket packet, GeyserSession session) {
public void translate(GeyserSession session, SetLocalPlayerAsInitializedPacket packet) {
if (session.getPlayerEntity().getGeyserId() == packet.getRuntimeEntityId()) {
if (!session.getUpstream().isInitialized()) {
session.getUpstream().setInitialized(true);
@@ -37,7 +37,7 @@
public class BedrockShowCreditsTranslator extends PacketTranslator<ShowCreditsPacket> {

@Override
public void translate(ShowCreditsPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ShowCreditsPacket packet) {
if (packet.getStatus() == ShowCreditsPacket.Status.END_CREDITS) {
ClientRequestPacket javaRespawnPacket = new ClientRequestPacket(ClientRequest.RESPAWN);
session.sendDownstreamPacket(javaRespawnPacket);
@@ -37,7 +37,7 @@
public class BedrockTextTranslator extends PacketTranslator<TextPacket> {

@Override
public void translate(TextPacket packet, GeyserSession session) {
public void translate(GeyserSession session, TextPacket packet) {
String message = packet.getMessage();

if (MessageTranslator.isTooLong(message, session)) {
@@ -43,7 +43,7 @@
public class BedrockEntityEventTranslator extends PacketTranslator<EntityEventPacket> {

@Override
public void translate(EntityEventPacket packet, GeyserSession session) {
public void translate(GeyserSession session, EntityEventPacket packet) {
switch (packet.getType()) {
case EATING_ITEM:
// Resend the packet so we get the eating sounds
@@ -54,7 +54,7 @@
public class BedrockActionTranslator extends PacketTranslator<PlayerActionPacket> {

@Override
public void translate(PlayerActionPacket packet, GeyserSession session) {
public void translate(GeyserSession session, PlayerActionPacket packet) {
SessionPlayerEntity entity = session.getPlayerEntity();

// Send book update before any player action
@@ -40,7 +40,7 @@
public class BedrockEmoteTranslator extends PacketTranslator<EmotePacket> {

@Override
public void translate(EmotePacket packet, GeyserSession session) {
public void translate(GeyserSession session, EmotePacket packet) {
if (session.getConnector().getConfig().getEmoteOffhandWorkaround() != EmoteOffhandWorkaroundOption.DISABLED) {
// Activate the workaround - we should trigger the offhand now
ClientPlayerActionPacket swapHandsPacket = new ClientPlayerActionPacket(PlayerAction.SWAP_HANDS, BlockUtils.POSITION_ZERO,
@@ -46,7 +46,7 @@
public class BedrockInteractTranslator extends PacketTranslator<InteractPacket> {

@Override
public void translate(InteractPacket packet, GeyserSession session) {
public void translate(GeyserSession session, InteractPacket packet) {
Entity entity;
if (packet.getRuntimeEntityId() == session.getPlayerEntity().getGeyserId()) {
//Player is not in entity cache
@@ -53,7 +53,7 @@
}

@Override
public void translate(MovePlayerPacket packet, GeyserSession session) {
public void translate(GeyserSession session, MovePlayerPacket packet) {
SessionPlayerEntity entity = session.getPlayerEntity();
if (!session.isSpawned()) return;

@@ -37,7 +37,7 @@
@Translator(packet = RiderJumpPacket.class)
public class BedrockRiderJumpTranslator extends PacketTranslator<RiderJumpPacket> {
@Override
public void translate(RiderJumpPacket packet, GeyserSession session) {
public void translate(GeyserSession session, RiderJumpPacket packet) {
Entity vehicle = session.getRidingVehicleEntity();
if (vehicle instanceof AbstractHorseEntity) {
ClientPlayerStatePacket playerStatePacket = new ClientPlayerStatePacket((int) vehicle.getEntityId(), PlayerState.START_HORSE_JUMP, packet.getJumpStrength());
@@ -38,7 +38,7 @@
public class BedrockSetPlayerGameTypeTranslator extends PacketTranslator<SetPlayerGameTypePacket> {

@Override
public void translate(SetPlayerGameTypePacket packet, GeyserSession session) {
public void translate(GeyserSession session, SetPlayerGameTypePacket packet) {
// no
SetPlayerGameTypePacket playerGameTypePacket = new SetPlayerGameTypePacket();
playerGameTypePacket.setGamemode(session.getGameMode().ordinal());
@@ -36,7 +36,7 @@
public class BedrockLevelSoundEventTranslator extends PacketTranslator<LevelSoundEventPacket> {

@Override
public void translate(LevelSoundEventPacket packet, GeyserSession session) {
public void translate(GeyserSession session, LevelSoundEventPacket packet) {
// lol what even :thinking:
session.sendUpstreamPacket(packet);

@@ -37,7 +37,7 @@
@Translator(packet = ServerAdvancementTabPacket.class)
public class JavaAdvancementsTabTranslator extends PacketTranslator<ServerAdvancementTabPacket> {
@Override
public void translate(ServerAdvancementTabPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerAdvancementTabPacket packet) {
AdvancementsCache advancementsCache = session.getAdvancementsCache();
advancementsCache.setCurrentAdvancementCategoryId(packet.getTabId());
advancementsCache.buildAndShowListForm();
@@ -42,7 +42,7 @@
public class JavaAdvancementsTranslator extends PacketTranslator<ServerAdvancementsPacket> {

@Override
public void translate(ServerAdvancementsPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerAdvancementsPacket packet) {
AdvancementsCache advancementsCache = session.getAdvancementsCache();
if (packet.isReset()) {
advancementsCache.getStoredAdvancements().clear();
@@ -35,7 +35,7 @@
@Translator(packet = ServerBossBarPacket.class)
public class JavaBossBarTranslator extends PacketTranslator<ServerBossBarPacket> {
@Override
public void translate(ServerBossBarPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerBossBarPacket packet) {
BossBar bossBar = session.getEntityCache().getBossBar(packet.getUuid());
switch (packet.getAction()) {
case ADD:
@@ -36,7 +36,7 @@
public class JavaChatTranslator extends PacketTranslator<ServerChatPacket> {

@Override
public void translate(ServerChatPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerChatPacket packet) {
TextPacket textPacket = new TextPacket();
textPacket.setPlatformChatId("");
textPacket.setSourceName("");
@@ -96,7 +96,7 @@ public boolean equals(CommandParamData[][] a, CommandParamData[][] b) {
}

@Override
public void translate(ServerDeclareCommandsPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerDeclareCommandsPacket packet) {
// Don't send command suggestions if they are disabled
if (!session.getConnector().getConfig().isCommandSuggestions()) {
session.getConnector().getLogger().debug("Not sending translated command suggestions as they are disabled.");
@@ -71,7 +71,7 @@
);

@Override
public void translate(ServerDeclareRecipesPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerDeclareRecipesPacket packet) {
Map<RecipeType, List<CraftingData>> recipeTypes = Registries.CRAFTING_DATA.forVersion(session.getUpstream().getProtocolVersion());
// Get the last known network ID (first used for the pregenerated recipes) and increment from there.
int netId = InventoryUtils.LAST_RECIPE_NET_ID + 1;
@@ -34,7 +34,7 @@
public class JavaDeclareTagsTranslator extends PacketTranslator<ServerDeclareTagsPacket> {

@Override
public void translate(ServerDeclareTagsPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerDeclareTagsPacket packet) {
session.getTagCache().loadPacket(packet);
}
}
@@ -36,7 +36,7 @@
public class JavaDifficultyTranslator extends PacketTranslator<ServerDifficultyPacket> {

@Override
public void translate(ServerDifficultyPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerDifficultyPacket packet) {
SetDifficultyPacket setDifficultyPacket = new SetDifficultyPacket();
setDifficultyPacket.setDifficulty(packet.getDifficulty().ordinal());
session.sendUpstreamPacket(setDifficultyPacket);
@@ -35,7 +35,7 @@
public class JavaDisconnectPacket extends PacketTranslator<ServerDisconnectPacket> {

@Override
public void translate(ServerDisconnectPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerDisconnectPacket packet) {
session.disconnect(MessageTranslator.convertMessage(packet.getReason(), session.getLocale()));
}
}
@@ -52,7 +52,7 @@
private static final List<SkinPart> SKIN_PART_VALUES = Arrays.asList(SkinPart.values());

@Override
public void translate(ServerJoinGamePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerJoinGamePacket packet) {
PlayerEntity entity = session.getPlayerEntity();
entity.setEntityId(packet.getEntityId());

@@ -38,7 +38,7 @@
public class JavaKeepAliveTranslator extends PacketTranslator<ServerKeepAlivePacket> {

@Override
public void translate(ServerKeepAlivePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerKeepAlivePacket packet) {
if (!session.getConnector().getConfig().isForwardPlayerPing()) {
return;
}
@@ -35,7 +35,7 @@
public class JavaLoginDisconnectTranslator extends PacketTranslator<LoginDisconnectPacket> {

@Override
public void translate(LoginDisconnectPacket packet, GeyserSession session) {
public void translate(GeyserSession session, LoginDisconnectPacket packet) {
// The client doesn't manually get disconnected so we have to do it ourselves
session.disconnect(MessageTranslator.convertMessage(packet.getReason(), session.getLocale()));
}
@@ -35,7 +35,7 @@
@Translator(packet = LoginPluginRequestPacket.class)
public class JavaLoginPluginRequestTranslator extends PacketTranslator<LoginPluginRequestPacket> {
@Override
public void translate(LoginPluginRequestPacket packet, GeyserSession session) {
public void translate(GeyserSession session, LoginPluginRequestPacket packet) {
// A vanilla client doesn't know any PluginMessage in the Login state, so we don't know any either.
// Note: Fabric Networking API v1 will not let the client log in without sending this
session.sendDownstreamPacket(
@@ -38,7 +38,7 @@
public class JavaLoginSuccessTranslator extends PacketTranslator<LoginSuccessPacket> {

@Override
public void translate(LoginSuccessPacket packet, GeyserSession session) {
public void translate(GeyserSession session, LoginSuccessPacket packet) {
PlayerEntity playerEntity = session.getPlayerEntity();
AuthType remoteAuthType = session.getRemoteAuthType();

@@ -36,7 +36,7 @@
public class JavaPingPacket extends PacketTranslator<ServerPingPacket> {

@Override
public void translate(ServerPingPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPingPacket packet) {
session.sendDownstreamPacket(new ClientPongPacket(packet.getId()));
}
}
@@ -41,7 +41,7 @@
@Translator(packet = ServerPluginMessagePacket.class)
public class JavaPluginMessageTranslator extends PacketTranslator<ServerPluginMessagePacket> {
@Override
public void translate(ServerPluginMessagePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPluginMessagePacket packet) {
// The only plugin messages it has to listen for are Floodgate plugin messages
if (session.getRemoteAuthType() != AuthType.FLOODGATE) {
return;
@@ -43,7 +43,7 @@
public class JavaRespawnTranslator extends PacketTranslator<ServerRespawnPacket> {

@Override
public void translate(ServerRespawnPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerRespawnPacket packet) {
SessionPlayerEntity entity = session.getPlayerEntity();

entity.setHealth(entity.getMaxHealth());
@@ -35,7 +35,7 @@
public class JavaStatisticsTranslator extends PacketTranslator<ServerStatisticsPacket> {

@Override
public void translate(ServerStatisticsPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerStatisticsPacket packet) {
session.updateStatistics(packet.getStatistics());

if (session.isWaitingForStatistics()) {
@@ -40,7 +40,7 @@
public class JavaUnlockRecipesTranslator extends PacketTranslator<ServerUnlockRecipesPacket> {

@Override
public void translate(ServerUnlockRecipesPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerUnlockRecipesPacket packet) {
if (packet.getAction() == UnlockRecipesAction.REMOVE) {
session.getUnlockedRecipes().removeAll(Arrays.asList(packet.getRecipes()));
} else {
@@ -40,7 +40,7 @@
public class JavaEntityAnimationTranslator extends PacketTranslator<ServerEntityAnimationPacket> {

@Override
public void translate(ServerEntityAnimationPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityAnimationPacket packet) {
Entity entity;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -42,7 +42,7 @@
public class JavaEntityAttachTranslator extends PacketTranslator<ServerEntityAttachPacket> {

@Override
public void translate(ServerEntityAttachPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityAttachPacket packet) {

Entity holderId;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
@@ -44,7 +44,7 @@
public class JavaEntityCollectItemTranslator extends PacketTranslator<ServerEntityCollectItemPacket> {

@Override
public void translate(ServerEntityCollectItemPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityCollectItemPacket packet) {
// Collected entity is the other entity
Entity collectedEntity = session.getEntityCache().getEntityByJavaId(packet.getCollectedEntityId());
if (collectedEntity == null) return;
@@ -37,7 +37,7 @@
public class JavaEntityEffectTranslator extends PacketTranslator<ServerEntityEffectPacket> {

@Override
public void translate(ServerEntityEffectPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityEffectPacket packet) {
Entity entity;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -39,7 +39,7 @@
public class JavaEntityEquipmentTranslator extends PacketTranslator<ServerEntityEquipmentPacket> {

@Override
public void translate(ServerEntityEquipmentPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityEquipmentPacket packet) {
Entity entity;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -35,7 +35,7 @@
public class JavaEntityHeadLookTranslator extends PacketTranslator<ServerEntityHeadLookPacket> {

@Override
public void translate(ServerEntityHeadLookPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityHeadLookPacket packet) {
Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -39,7 +39,7 @@
public class JavaEntityMetadataTranslator extends PacketTranslator<ServerEntityMetadataPacket> {

@Override
public void translate(ServerEntityMetadataPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityMetadataPacket packet) {
Entity entity;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -35,7 +35,7 @@
public class JavaEntityPositionRotationTranslator extends PacketTranslator<ServerEntityPositionRotationPacket> {

@Override
public void translate(ServerEntityPositionRotationPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityPositionRotationPacket packet) {
Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -35,7 +35,7 @@
public class JavaEntityPositionTranslator extends PacketTranslator<ServerEntityPositionPacket> {

@Override
public void translate(ServerEntityPositionPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityPositionPacket packet) {
Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -36,7 +36,7 @@
public class JavaEntityPropertiesTranslator extends PacketTranslator<ServerEntityPropertiesPacket> {

@Override
public void translate(ServerEntityPropertiesPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityPropertiesPacket packet) {
Entity entity;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -37,7 +37,7 @@
public class JavaEntityRemoveEffectTranslator extends PacketTranslator<ServerEntityRemoveEffectPacket> {

@Override
public void translate(ServerEntityRemoveEffectPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityRemoveEffectPacket packet) {
Entity entity;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -35,7 +35,7 @@
public class JavaEntityRotationTranslator extends PacketTranslator<ServerEntityRotationPacket> {

@Override
public void translate(ServerEntityRotationPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityRotationPacket packet) {
Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -43,7 +43,7 @@
public class JavaEntitySetPassengersTranslator extends PacketTranslator<ServerEntitySetPassengersPacket> {

@Override
public void translate(ServerEntitySetPassengersPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntitySetPassengersPacket packet) {
Entity entity;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -43,7 +43,7 @@
public class JavaEntityStatusTranslator extends PacketTranslator<ServerEntityStatusPacket> {

@Override
public void translate(ServerEntityStatusPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityStatusPacket packet) {
Entity entity;
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -37,7 +37,7 @@
public class JavaEntityTeleportTranslator extends PacketTranslator<ServerEntityTeleportPacket> {

@Override
public void translate(ServerEntityTeleportPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityTeleportPacket packet) {
Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -40,7 +40,7 @@
public class JavaEntityVelocityTranslator extends PacketTranslator<ServerEntityVelocityPacket> {

@Override
public void translate(ServerEntityVelocityPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerEntityVelocityPacket packet) {
Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
if (packet.getEntityId() == session.getPlayerEntity().getEntityId()) {
entity = session.getPlayerEntity();
@@ -35,7 +35,7 @@
public class JavaRemoveEntitiesTranslator extends PacketTranslator<ServerRemoveEntitiesPacket> {

@Override
public void translate(ServerRemoveEntitiesPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerRemoveEntitiesPacket packet) {
for (int entityId : packet.getEntityIds()) {
Entity entity = session.getEntityCache().getEntityByJavaId(entityId);
if (entity != null) {
@@ -34,7 +34,7 @@
public class JavaPlayerAbilitiesTranslator extends PacketTranslator<ServerPlayerAbilitiesPacket> {

@Override
public void translate(ServerPlayerAbilitiesPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayerAbilitiesPacket packet) {
session.setCanFly(packet.isCanFly());
session.setFlying(packet.isFlying());
session.sendAdventureSettings();
@@ -40,7 +40,7 @@
public class JavaPlayerActionAckTranslator extends PacketTranslator<ServerPlayerActionAckPacket> {

@Override
public void translate(ServerPlayerActionAckPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayerActionAckPacket packet) {
ChunkUtils.updateBlock(session, packet.getNewState(), packet.getPosition());
if (packet.getAction() == PlayerAction.START_DIGGING && !packet.isSuccessful()) {
LevelEventPacket stopBreak = new LevelEventPacket();
@@ -35,7 +35,7 @@
public class JavaPlayerChangeHeldItemTranslator extends PacketTranslator<ServerPlayerChangeHeldItemPacket> {

@Override
public void translate(ServerPlayerChangeHeldItemPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayerChangeHeldItemPacket packet) {
PlayerHotbarPacket hotbarPacket = new PlayerHotbarPacket();
hotbarPacket.setContainerId(0);
hotbarPacket.setSelectedHotbarSlot(packet.getSlot());
@@ -41,7 +41,7 @@
public class JavaPlayerHealthTranslator extends PacketTranslator<ServerPlayerHealthPacket> {

@Override
public void translate(ServerPlayerHealthPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayerHealthPacket packet) {
SessionPlayerEntity entity = session.getPlayerEntity();

int health = (int) Math.ceil(packet.getHealth());
@@ -40,7 +40,7 @@
@Translator(packet = ServerPlayerListEntryPacket.class)
public class JavaPlayerListEntryTranslator extends PacketTranslator<ServerPlayerListEntryPacket> {
@Override
public void translate(ServerPlayerListEntryPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayerListEntryPacket packet) {
if (packet.getAction() != PlayerListEntryAction.ADD_PLAYER && packet.getAction() != PlayerListEntryAction.REMOVE_PLAYER)
return;

@@ -50,7 +50,7 @@
public class JavaPlayerPositionRotationTranslator extends PacketTranslator<ServerPlayerPositionRotationPacket> {

@Override
public void translate(ServerPlayerPositionRotationPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayerPositionRotationPacket packet) {
if (!session.isLoggedIn())
return;

@@ -40,7 +40,7 @@
public class JavaPlayerSetExperienceTranslator extends PacketTranslator<ServerPlayerSetExperiencePacket> {

@Override
public void translate(ServerPlayerSetExperiencePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayerSetExperiencePacket packet) {
SessionPlayerEntity entity = session.getPlayerEntity();

AttributeData experience = GeyserAttributeType.EXPERIENCE.getAttribute(packet.getExperience());
@@ -46,7 +46,7 @@
public class JavaSpawnEntityTranslator extends PacketTranslator<ServerSpawnEntityPacket> {

@Override
public void translate(ServerSpawnEntityPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSpawnEntityPacket packet) {

Vector3f position = Vector3f.from(packet.getX(), packet.getY(), packet.getZ());
Vector3f motion = Vector3f.from(packet.getMotionX(), packet.getMotionY(), packet.getMotionZ());
@@ -39,7 +39,7 @@
public class JavaSpawnExpOrbTranslator extends PacketTranslator<ServerSpawnExpOrbPacket> {

@Override
public void translate(ServerSpawnExpOrbPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSpawnExpOrbPacket packet) {
Vector3f position = Vector3f.from(packet.getX(), packet.getY(), packet.getZ());

Entity entity = new ExpOrbEntity(
@@ -42,7 +42,7 @@
public class JavaSpawnLivingEntityTranslator extends PacketTranslator<ServerSpawnLivingEntityPacket> {

@Override
public void translate(ServerSpawnLivingEntityPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSpawnLivingEntityPacket packet) {
Vector3f position = Vector3f.from(packet.getX(), packet.getY(), packet.getZ());
Vector3f motion = Vector3f.from(packet.getMotionX(), packet.getMotionY(), packet.getMotionZ());
Vector3f rotation = Vector3f.from(packet.getYaw(), packet.getPitch(), packet.getHeadYaw());
@@ -37,7 +37,7 @@
public class JavaSpawnPaintingTranslator extends PacketTranslator<ServerSpawnPaintingPacket> {

@Override
public void translate(ServerSpawnPaintingPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSpawnPaintingPacket packet) {
Vector3f position = Vector3f.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ());

PaintingEntity entity = new PaintingEntity(packet.getEntityId(),
@@ -39,7 +39,7 @@
public class JavaSpawnPlayerTranslator extends PacketTranslator<ServerSpawnPlayerPacket> {

@Override
public void translate(ServerSpawnPlayerPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSpawnPlayerPacket packet) {
Vector3f position = Vector3f.from(packet.getX(), packet.getY(), packet.getZ());
Vector3f rotation = Vector3f.from(packet.getYaw(), packet.getPitch(), packet.getYaw());

@@ -35,7 +35,7 @@
public class JavaDisplayScoreboardTranslator extends PacketTranslator<ServerDisplayScoreboardPacket> {

@Override
public void translate(ServerDisplayScoreboardPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerDisplayScoreboardPacket packet) {
session.getWorldCache().getScoreboard()
.displayObjective(packet.getName(), packet.getPosition());
}
@@ -41,7 +41,7 @@
public class JavaScoreboardObjectiveTranslator extends PacketTranslator<ServerScoreboardObjectivePacket> {

@Override
public void translate(ServerScoreboardObjectivePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerScoreboardObjectivePacket packet) {
WorldCache worldCache = session.getWorldCache();
Scoreboard scoreboard = worldCache.getScoreboard();
Objective objective = scoreboard.getObjective(packet.getName());
@@ -47,7 +47,7 @@
private static final GeyserLogger LOGGER = GeyserConnector.getInstance().getLogger();

@Override
public void translate(ServerTeamPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerTeamPacket packet) {
if (LOGGER.isDebug()) {
LOGGER.debug("Team packet " + packet.getTeamName() + " " + packet.getAction() + " " + Arrays.toString(packet.getPlayers()));
}
@@ -47,7 +47,7 @@ public JavaUpdateScoreTranslator() {
}

@Override
public void translate(ServerUpdateScorePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerUpdateScorePacket packet) {
WorldCache worldCache = session.getWorldCache();
Scoreboard scoreboard = worldCache.getScoreboard();
int pps = worldCache.increaseAndGetScoreboardPacketsPerSecond();
@@ -35,7 +35,7 @@
public class JavaClearTitlesTranslator extends PacketTranslator<ServerClearTitlesPacket> {

@Override
public void translate(ServerClearTitlesPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerClearTitlesPacket packet) {
SetTitlePacket titlePacket = new SetTitlePacket();
// TODO handle packet.isResetTimes()
titlePacket.setType(SetTitlePacket.Type.CLEAR);
@@ -36,7 +36,7 @@
public class JavaSetActionBarTextTranslator extends PacketTranslator<ServerSetActionBarTextPacket> {

@Override
public void translate(ServerSetActionBarTextPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSetActionBarTextPacket packet) {
String text;
if (packet.getText() == null) { //TODO 1.17 can this happen?
text = " ";
@@ -36,7 +36,7 @@
public class JavaSetSubtitleTextTranslator extends PacketTranslator<ServerSetSubtitleTextPacket> {

@Override
public void translate(ServerSetSubtitleTextPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSetSubtitleTextPacket packet) {
String text;
if (packet.getText() == null) { //TODO 1.17 can this happen?
text = " ";
@@ -36,7 +36,7 @@
public class JavaSetTitleTextTranslator extends PacketTranslator<ServerSetTitleTextPacket> {

@Override
public void translate(ServerSetTitleTextPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSetTitleTextPacket packet) {
String text;
if (packet.getText() == null) { //TODO 1.17 can this happen?
text = " ";
@@ -35,7 +35,7 @@
public class JavaSetTitlesAnimationTranslator extends PacketTranslator<ServerSetTitlesAnimationPacket> {

@Override
public void translate(ServerSetTitlesAnimationPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSetTitlesAnimationPacket packet) {
SetTitlePacket titlePacket = new SetTitlePacket();
titlePacket.setType(SetTitlePacket.Type.TIMES);
titlePacket.setText("");
@@ -35,7 +35,7 @@
public class JavaCloseWindowTranslator extends PacketTranslator<ServerCloseWindowPacket> {

@Override
public void translate(ServerCloseWindowPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerCloseWindowPacket packet) {
// Sometimes the server can request a window close of ID 0... when the window isn't even open
// Don't confirm in this instance
InventoryUtils.closeInventory(session, packet.getWindowId(), (session.getOpenInventory() != null && session.getOpenInventory().getId() == packet.getWindowId()));
@@ -98,7 +98,7 @@
}

@Override
public void translate(ServerOpenHorseWindowPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerOpenHorseWindowPacket packet) {
Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
if (entity == null) {
return;
@@ -40,7 +40,7 @@
public class JavaOpenWindowTranslator extends PacketTranslator<ServerOpenWindowPacket> {

@Override
public void translate(ServerOpenWindowPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerOpenWindowPacket packet) {
if (packet.getWindowId() == 0) {
return;
}
@@ -58,7 +58,7 @@
public class JavaSetSlotTranslator extends PacketTranslator<ServerSetSlotPacket> {

@Override
public void translate(ServerSetSlotPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSetSlotPacket packet) {
if (packet.getWindowId() == 255) { //cursor
GeyserItemStack newItem = GeyserItemStack.from(packet.getItem());
session.getPlayerInventory().setCursor(newItem, session);
@@ -38,7 +38,7 @@
public class JavaWindowItemsTranslator extends PacketTranslator<ServerWindowItemsPacket> {

@Override
public void translate(ServerWindowItemsPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerWindowItemsPacket packet) {
Inventory inventory = InventoryUtils.getInventory(session, packet.getWindowId());
if (inventory == null)
return;
@@ -37,7 +37,7 @@
public class JavaWindowPropertyTranslator extends PacketTranslator<ServerWindowPropertyPacket> {

@Override
public void translate(ServerWindowPropertyPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerWindowPropertyPacket packet) {
Inventory inventory = InventoryUtils.getInventory(session, packet.getWindowId());
if (inventory == null)
return;
@@ -41,7 +41,7 @@
public class JavaBlockBreakAnimTranslator extends PacketTranslator<ServerBlockBreakAnimPacket> {

@Override
public void translate(ServerBlockBreakAnimPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerBlockBreakAnimPacket packet) {
int state = session.getConnector().getWorldManager().getBlockAt(session, packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ());
int breakTime = (int) (65535 / Math.ceil(BlockUtils.getBreakTime(session, BlockRegistries.JAVA_BLOCKS.get(state), ItemMapping.AIR, new CompoundTag(""), false) * 20));
LevelEventPacket levelEventPacket = new LevelEventPacket();
@@ -42,7 +42,7 @@
public class JavaBlockChangeTranslator extends PacketTranslator<ServerBlockChangePacket> {

@Override
public void translate(ServerBlockChangePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerBlockChangePacket packet) {
Position pos = packet.getRecord().getPosition();
boolean updatePlacement = session.getConnector().getPlatformType() != PlatformType.SPIGOT && // Spigot simply listens for the block place event
session.getConnector().getWorldManager().getBlockAt(session, pos) != packet.getRecord().getBlock();
@@ -45,7 +45,7 @@
public class JavaBlockValueTranslator extends PacketTranslator<ServerBlockValuePacket> {

@Override
public void translate(ServerBlockValuePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerBlockValuePacket packet) {
BlockEventPacket blockEventPacket = new BlockEventPacket();
blockEventPacket.setBlockPosition(Vector3i.from(packet.getPosition().getX(),
packet.getPosition().getY(), packet.getPosition().getZ()));
@@ -52,7 +52,7 @@
private static final boolean NEW_BIOME_WRITE = GeyserConnector.getInstance().getConfig().isExtendedWorldHeight();

@Override
public void translate(ServerChunkDataPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerChunkDataPacket packet) {
if (session.isSpawned()) {
ChunkUtils.updateChunkPosition(session, session.getPlayerEntity().getPosition().toInt());
}
@@ -43,7 +43,7 @@
public class JavaExplosionTranslator extends PacketTranslator<ServerExplosionPacket> {

@Override
public void translate(ServerExplosionPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerExplosionPacket packet) {
for (ExplodedBlockRecord record : packet.getExploded()) {
Vector3f pos = Vector3f.from(packet.getX() + record.getX(), packet.getY() + record.getY(), packet.getZ() + record.getZ());
ChunkUtils.updateBlock(session, BlockStateValues.JAVA_AIR_ID, pos.toInt());
@@ -41,7 +41,7 @@
@Translator(packet = ServerMapDataPacket.class)
public class JavaMapDataTranslator extends PacketTranslator<ServerMapDataPacket> {
@Override
public void translate(ServerMapDataPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerMapDataPacket packet) {
ClientboundMapItemDataPacket mapItemDataPacket = new ClientboundMapItemDataPacket();
boolean shouldStore = false;

@@ -37,7 +37,7 @@
public class JavaMultiBlockChangeTranslator extends PacketTranslator<ServerMultiBlockChangePacket> {

@Override
public void translate(ServerMultiBlockChangePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerMultiBlockChangePacket packet) {
for (BlockChangeRecord record : packet.getRecords()) {
ChunkUtils.updateBlock(session, record.getBlock(), record.getPosition());
}
@@ -49,7 +49,7 @@
public class JavaNotifyClientTranslator extends PacketTranslator<ServerNotifyClientPacket> {

@Override
public void translate(ServerNotifyClientPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerNotifyClientPacket packet) {
PlayerEntity entity = session.getPlayerEntity();

switch (packet.getNotification()) {
@@ -44,7 +44,7 @@
public class JavaPlayBuiltinSoundTranslator extends PacketTranslator<ServerPlayBuiltinSoundPacket> {

@Override
public void translate(ServerPlayBuiltinSoundPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayBuiltinSoundPacket packet) {
String packetSound = packet.getSound().getName();

SoundMapping soundMapping = Registries.SOUNDS.get(packetSound);
@@ -48,7 +48,7 @@
public class JavaPlayEffectTranslator extends PacketTranslator<ServerPlayEffectPacket> {

@Override
public void translate(ServerPlayEffectPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlayEffectPacket packet) {
// Separate case since each RecordEffectData in Java is an individual track in Bedrock
if (packet.getEffect() == SoundEffect.RECORD) {
RecordEffectData recordEffectData = (RecordEffectData) packet.getData();
@@ -40,7 +40,7 @@
public class JavaPlaySoundTranslator extends PacketTranslator<ServerPlaySoundPacket> {

@Override
public void translate(ServerPlaySoundPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerPlaySoundPacket packet) {
String packetSound;
if (packet.getSound() instanceof BuiltinSound) {
packetSound = ((BuiltinSound) packet.getSound()).getName();
@@ -50,7 +50,7 @@
public class JavaSpawnParticleTranslator extends PacketTranslator<ServerSpawnParticlePacket> {

@Override
public void translate(ServerSpawnParticlePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSpawnParticlePacket packet) {
Function<Vector3f, BedrockPacket> particleCreateFunction = createParticle(session, packet.getParticle());
if (particleCreateFunction != null) {
if (packet.getAmount() == 0) {
@@ -38,7 +38,7 @@
public class JavaSpawnPositionTranslator extends PacketTranslator<ServerSpawnPositionPacket> {

@Override
public void translate(ServerSpawnPositionPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerSpawnPositionPacket packet) {
SetSpawnPositionPacket spawnPositionPacket = new SetSpawnPositionPacket();
spawnPositionPacket.setBlockPosition(Vector3i.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ()));
spawnPositionPacket.setSpawnForced(true);
@@ -39,7 +39,7 @@
public class JavaStopSoundTranslator extends PacketTranslator<ServerStopSoundPacket> {

@Override
public void translate(ServerStopSoundPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerStopSoundPacket packet) {
// Runs if all sounds are stopped
if (packet.getSound() == null) {
StopSoundPacket stopPacket = new StopSoundPacket();
@@ -51,7 +51,7 @@
public class JavaTradeListTranslator extends PacketTranslator<ServerTradeListPacket> {

@Override
public void translate(ServerTradeListPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerTradeListPacket packet) {
Inventory openInventory = session.getOpenInventory();
if (!(openInventory instanceof MerchantContainer && openInventory.getId() == packet.getWindowId())) {
return;
@@ -37,7 +37,7 @@
public class JavaUnloadChunkTranslator extends PacketTranslator<ServerUnloadChunkPacket> {

@Override
public void translate(ServerUnloadChunkPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerUnloadChunkPacket packet) {
session.getChunkCache().removeChunk(packet.getX(), packet.getZ());

//Checks if a skull is in an unloaded chunk then removes it
@@ -45,7 +45,7 @@
public class JavaUpdateTileEntityTranslator extends PacketTranslator<ServerUpdateTileEntityPacket> {

@Override
public void translate(ServerUpdateTileEntityPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerUpdateTileEntityPacket packet) {
String id = BlockEntityUtils.getBedrockBlockEntityId(packet.getType().name());
if (packet.getNbt().isEmpty()) { // Fixes errors in servers sending empty NBT
BlockEntityUtils.updateBlockEntity(session, NbtMap.EMPTY, packet.getPosition());
@@ -35,7 +35,7 @@
public class JavaUpdateTimeTranslator extends PacketTranslator<ServerUpdateTimePacket> {

@Override
public void translate(ServerUpdateTimePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerUpdateTimePacket packet) {
// Bedrock sends a GameRulesChangedPacket if there is no daylight cycle
// Java just sends a negative long if there is no daylight cycle
long time = packet.getTime();
@@ -35,7 +35,7 @@
public class JavaUpdateViewDistanceTranslator extends PacketTranslator<ServerUpdateViewDistancePacket> {

@Override
public void translate(ServerUpdateViewDistancePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerUpdateViewDistancePacket packet) {
session.setRenderDistance(packet.getViewDistance());
}
}
@@ -37,7 +37,7 @@
public class JavaUpdateViewPositionTranslator extends PacketTranslator<ServerUpdateViewPositionPacket> {

@Override
public void translate(ServerUpdateViewPositionPacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerUpdateViewPositionPacket packet) {
if (!session.isSpawned() && session.getLastChunkPosition() == null) {
ChunkUtils.updateChunkPosition(session, Vector3i.from(packet.getChunkX() << 4, 64, packet.getChunkZ() << 4));
}
@@ -36,7 +36,7 @@
public class JavaVehicleMoveTranslator extends PacketTranslator<ServerVehicleMovePacket> {

@Override
public void translate(ServerVehicleMovePacket packet, GeyserSession session) {
public void translate(GeyserSession session, ServerVehicleMovePacket packet) {
Entity entity = session.getRidingVehicleEntity();
if (entity == null) return;

@@ -31,6 +31,8 @@
import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.github.steveice10.mc.auth.service.MsaAuthenticationService;
import com.nimbusds.jose.JWSObject;
import com.nimbusds.jose.shaded.json.JSONObject;
import com.nimbusds.jose.shaded.json.JSONValue;
import com.nukkitx.network.util.Preconditions;
import com.nukkitx.protocol.bedrock.packet.LoginPacket;
import com.nukkitx.protocol.bedrock.packet.ServerToClientHandshakePacket;
@@ -49,6 +51,7 @@

import javax.crypto.SecretKey;
import java.io.IOException;
import java.net.URI;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PublicKey;
@@ -62,28 +65,49 @@
private static boolean HAS_SENT_ENCRYPTION_MESSAGE = false;

private static boolean validateChainData(JsonNode data) throws Exception {
if (data.size() != 3) {
return false;
}

ECPublicKey lastKey = null;
boolean validChain = false;
for (JsonNode node : data) {
JWSObject jwt = JWSObject.parse(node.asText());

if (!validChain) {
validChain = EncryptionUtils.verifyJwt(jwt, EncryptionUtils.getMojangPublicKey());
// x509 cert is expected in every claim
URI x5u = jwt.getHeader().getX509CertURL();
if (x5u == null) {
return false;
}

if (lastKey != null) {
if (!EncryptionUtils.verifyJwt(jwt, lastKey)) return false;
ECPublicKey expectedKey = EncryptionUtils.generateKey(jwt.getHeader().getX509CertURL().toString());
// First key is self-signed
if (lastKey == null) {
lastKey = expectedKey;
} else if (!lastKey.equals(expectedKey)) {
return false;
}

JsonNode payloadNode = JSON_MAPPER.readTree(jwt.getPayload().toString());
JsonNode ipkNode = payloadNode.get("identityPublicKey");
Preconditions.checkState(ipkNode != null && ipkNode.getNodeType() == JsonNodeType.STRING, "identityPublicKey node is missing in chain");
lastKey = EncryptionUtils.generateKey(ipkNode.asText());
if (!EncryptionUtils.verifyJwt(jwt, lastKey)) {
return false;
}

if (lastKey.equals(EncryptionUtils.getMojangPublicKey())) {
validChain = true;
}

Object payload = JSONValue.parse(jwt.getPayload().toString());
Preconditions.checkArgument(payload instanceof JSONObject, "Payload is not an object");

Object identityPublicKey = ((JSONObject) payload).get("identityPublicKey");
Preconditions.checkArgument(identityPublicKey instanceof String, "identityPublicKey node is missing in chain");
lastKey = EncryptionUtils.generateKey((String) identityPublicKey);
}

return validChain;
}

public static void encryptPlayerConnection(GeyserConnector connector, GeyserSession session, LoginPacket loginPacket) {
public static void encryptPlayerConnection(GeyserSession session, LoginPacket loginPacket) {
JsonNode certData;
try {
certData = JSON_MAPPER.readTree(loginPacket.getChainData().toByteArray());
@@ -96,11 +120,13 @@ public static void encryptPlayerConnection(GeyserConnector connector, GeyserSess
throw new RuntimeException("Certificate data is not valid");
}

encryptConnectionWithCert(connector, session, loginPacket.getSkinData().toString(), certChainData);
encryptConnectionWithCert(session, loginPacket.getSkinData().toString(), certChainData);
}

private static void encryptConnectionWithCert(GeyserConnector connector, GeyserSession session, String clientData, JsonNode certChainData) {
private static void encryptConnectionWithCert(GeyserSession session, String clientData, JsonNode certChainData) {
try {
GeyserConnector connector = session.getConnector();

boolean validChain = validateChainData(certChainData);

connector.getLogger().debug(String.format("Is player data valid? %s", validChain));
@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.geysermc</groupId>
<artifactId>geyser-parent</artifactId>
<version>1.4.1-SNAPSHOT</version>
<version>1.4.2-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Geyser</name>
<description>Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers.</description>