CVE-2021-39177: Improper Authentication (CWE-287)
value: Geyser is a bridge between Minecraft: Bedrock Edition and Minecraft: Java Edition. Versions of Geyser prior to 1.4.2-SNAPSHOT allow anyone that can connect to the server to forge a LoginPacket with manipulated JWT token allowing impersonation as any user. Version 1.4.2-SNAPSHOT contains a patch for the issue. There are no known workarounds aside from upgrading.
CWE description: When an actor claims to have a given identity, the product does not prove or insufficiently proves that the claim is correct.
CVSS v3 base score: 9.8
Published: 2021-08-30T23:15Z
Repository: https://github.com/GeyserMC/Geyser
Language: Java
Files changed: Jenkinsfile, ap/pom.xml, bootstrap/bungeecord/pom.xml, bootstrap/pom.xml, bootstrap/spigot/pom.xml, bootstrap/sponge/pom.xml, bootstrap/standalone/pom.xml, bootstrap/velocity/pom.xml, common/pom.xml, connector/pom.xml, connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java, connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAdventureSettingsTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAnimateTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockEntityDataTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockPickRequestTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBookEditTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandBlockUpdateTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandRequestTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockContainerCloseTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEmoteListTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityPickRequestTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockFilterTextTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemFrameDropItemTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemStackRequestTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMobEquipmentTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMoveEntityAbsoluteTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockNetworkStackLatencyTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPacketViolationWarningTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPlayerInputTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockRespawnTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockServerSettingsRequestTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockShowCreditsTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockTextTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/BedrockEntityEventTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockActionTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockEmoteTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockInteractTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockRiderJumpTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/bedrock/world/BedrockLevelSoundEventTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTabTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaBossBarTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareTagsTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDifficultyTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDisconnectPacket.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaJoinGameTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaKeepAliveTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginDisconnectTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginPluginRequestTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginSuccessTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPingPacket.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaRespawnTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaStatisticsTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/JavaUnlockRecipesTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAnimationTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAttachTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityCollectItemTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEffectTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEquipmentTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityHeadLookTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityMetadataTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionRotationTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPropertiesTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRemoveEffectTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRotationTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityStatusTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityTeleportTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityVelocityTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaRemoveEntitiesTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerAbilitiesTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerActionAckTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerChangeHeldItemTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerHealthTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerListEntryTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerPositionRotationTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerSetExperienceTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnEntityTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnExpOrbTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnLivingEntityTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPaintingTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPlayerTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaDisplayScoreboardTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaTeamTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaClearTitlesTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetActionBarTextTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetSubtitleTextTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitleTextTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitlesAnimationTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaCloseWindowTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenHorseWindowTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenWindowTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaSetSlotTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowItemsTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowPropertyTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockBreakAnimTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockChangeTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockValueTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaExplosionTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMultiBlockChangeTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaNotifyClientTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayBuiltinSoundTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayEffectTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlaySoundTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnParticleTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnPositionTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaStopSoundTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUnloadChunkTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTileEntityTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTimeTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewDistanceTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewPositionTranslator.java, connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaVehicleMoveTranslator.java, connector/src/main/java/org/geysermc/connector/utils/LoginEncryptionUtils.java, pom.xml
Commit date: 2021-08-30 13:55:01 -0400
Commit message: Bump version to try and fix deploying; other nitpicks

Diff: diff --git a/Jenkinsfile b/Jenkinsfile
index 325fb977..0b77fa9c 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -18,11 +18,11 @@ pipeline {
                     archiveArtifacts artifacts: 'bootstrap/**/target/*.jar', excludes: 'bootstrap/**/target/original-*.jar', fingerprint: true
                 }
             }
         }
 
-        /*stage ('Deploy') {
+        stage ('Deploy') {
             when {
                 branch "master"
             }
 
             steps {
@@ -46,11 +46,11 @@ pipeline {
                 )
                 rtPublishBuildInfo(
                         serverId: "opencollab-artifactory"
                 )
             }
-        }*/
+        }
     }
 
     post {
         always {
             script {
diff --git a/ap/pom.xml b/ap/pom.xml
index 7e263c0d..f8cc2dd1 100644
--- a/ap/pom.xml
+++ b/ap/pom.xml
@@ -4,11 +4,11 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>geyser-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
 
     <artifactId>ap</artifactId>
-    <version>1.4.1-SNAPSHOT</version>
+    <version>1.4.2-SNAPSHOT</version>
 </project>
\ No newline at end of file
diff --git a/bootstrap/bungeecord/pom.xml b/bootstrap/bungeecord/pom.xml
index f49f5f40..b01ac798 100644
--- a/bootstrap/bungeecord/pom.xml
+++ b/bootstrap/bungeecord/pom.xml
@@ -4,19 +4,19 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>bootstrap-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
     <artifactId>bootstrap-bungeecord</artifactId>
 
     <dependencies>
         <dependency>
             <groupId>org.geysermc</groupId>
             <artifactId>connector</artifactId>
-            <version>1.4.1-SNAPSHOT</version>
+            <version>1.4.2-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <!-- Used for better working with internals without reflection -->
         <dependency>
             <groupId>com.github.SpigotMC.BungeeCord</groupId>
diff --git a/bootstrap/pom.xml b/bootstrap/pom.xml
index 6bbd1a0b..c54d489f 100644
--- a/bootstrap/pom.xml
+++ b/bootstrap/pom.xml
@@ -4,11 +4,11 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>geyser-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
     <artifactId>bootstrap-parent</artifactId>
     <packaging>pom</packaging>
 
     <repositories>
@@ -32,11 +32,11 @@
 
     <dependencies>
         <dependency>
             <groupId>org.geysermc</groupId>
             <artifactId>ap</artifactId>
-            <version>1.4.1-SNAPSHOT</version>
+            <version>1.4.2-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>
 
     <modules>
diff --git a/bootstrap/spigot/pom.xml b/bootstrap/spigot/pom.xml
index 4277dc23..cc2a73ff 100644
--- a/bootstrap/spigot/pom.xml
+++ b/bootstrap/spigot/pom.xml
@@ -4,11 +4,11 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>bootstrap-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
     <artifactId>bootstrap-spigot</artifactId>
 
     <repositories>
         <repository>
@@ -19,11 +19,11 @@
 
     <dependencies>
         <dependency>
             <groupId>org.geysermc</groupId>
             <artifactId>connector</artifactId>
-            <version>1.4.1-SNAPSHOT</version>
+            <version>1.4.2-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.spigotmc</groupId>
             <artifactId>spigot-api</artifactId>
diff --git a/bootstrap/sponge/pom.xml b/bootstrap/sponge/pom.xml
index 77f4fe78..4991e8aa 100644
--- a/bootstrap/sponge/pom.xml
+++ b/bootstrap/sponge/pom.xml
@@ -4,19 +4,19 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>bootstrap-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
     <artifactId>bootstrap-sponge</artifactId>
 
     <dependencies>
         <dependency>
             <groupId>org.geysermc</groupId>
             <artifactId>connector</artifactId>
-            <version>1.4.1-SNAPSHOT</version>
+            <version>1.4.2-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.spongepowered</groupId>
             <artifactId>spongeapi</artifactId>
diff --git a/bootstrap/standalone/pom.xml b/bootstrap/standalone/pom.xml
index e338f953..e39097b4 100644
--- a/bootstrap/standalone/pom.xml
+++ b/bootstrap/standalone/pom.xml
@@ -4,19 +4,19 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>bootstrap-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
     <artifactId>bootstrap-standalone</artifactId>
 
     <dependencies>
         <dependency>
             <groupId>org.geysermc</groupId>
             <artifactId>connector</artifactId>
-            <version>1.4.1-SNAPSHOT</version>
+            <version>1.4.2-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>net.minecrell</groupId>
             <artifactId>terminalconsoleappender</artifactId>
diff --git a/bootstrap/velocity/pom.xml b/bootstrap/velocity/pom.xml
index 5c12b6a4..1e74bafb 100644
--- a/bootstrap/velocity/pom.xml
+++ b/bootstrap/velocity/pom.xml
@@ -4,19 +4,19 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>bootstrap-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
     <artifactId>bootstrap-velocity</artifactId>
 
     <dependencies>
         <dependency>
             <groupId>org.geysermc</groupId>
             <artifactId>connector</artifactId>
-            <version>1.4.1-SNAPSHOT</version>
+            <version>1.4.2-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>com.velocitypowered</groupId>
             <artifactId>velocity-api</artifactId>
diff --git a/common/pom.xml b/common/pom.xml
index 2dfa63a4..edf31c2b 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -4,11 +4,11 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>geyser-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
     <artifactId>common</artifactId>
 
     <dependencies>
         <dependency>
diff --git a/connector/pom.xml b/connector/pom.xml
index 371a09a5..6b955ca2 100644
--- a/connector/pom.xml
+++ b/connector/pom.xml
@@ -4,11 +4,11 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.geysermc</groupId>
         <artifactId>geyser-parent</artifactId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.4.2-SNAPSHOT</version>
     </parent>
     <artifactId>connector</artifactId>
 
     <properties>
         <adventure.version>4.8.0</adventure.version>
@@ -19,17 +19,17 @@
 
     <dependencies>
         <dependency>
             <groupId>org.geysermc</groupId>
             <artifactId>ap</artifactId>
-            <version>1.4.1-SNAPSHOT</version>
+            <version>1.4.2-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.geysermc</groupId>
             <artifactId>common</artifactId>
-            <version>1.4.1-SNAPSHOT</version>
+            <version>1.4.2-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <!-- Jackson JSON and YAML serialization -->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -113,11 +113,11 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>com.github.CloudburstMC.Protocol</groupId>
             <artifactId>bedrock-v448</artifactId>
-            <version>690a545d</version>
+            <version>6ce2f6e</version>
             <scope>compile</scope>
             <exclusions>
                 <exclusion>
                     <groupId>com.nukkitx.network</groupId>
                     <artifactId>raknet</artifactId>
diff --git a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java
index 84bb63b9..6915e457 100644
--- a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java
+++ b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java
@@ -78,11 +78,11 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
 
         // Set the block translation based off of version
         session.setBlockMappings(BlockRegistries.BLOCKS.forVersion(loginPacket.getProtocolVersion()));
         session.setItemMappings(Registries.ITEMS.forVersion(loginPacket.getProtocolVersion()));
 
-        LoginEncryptionUtils.encryptPlayerConnection(connector, session, loginPacket);
+        LoginEncryptionUtils.encryptPlayerConnection(session, loginPacket);
 
         PlayStatusPacket playStatus = new PlayStatusPacket();
         playStatus.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS);
         session.sendUpstreamPacket(playStatus);
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslator.java
index 8bb3eb33..f59f747d 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslator.java
@@ -27,8 +27,8 @@ package org.geysermc.connector.network.translators;
 
 import org.geysermc.connector.network.session.GeyserSession;
 
 public abstract class PacketTranslator<T> {
 
-    public abstract void translate(T packet, GeyserSession session);
+    public abstract void translate(GeyserSession session, T packet);
 
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java b/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java
index 7bd0e66a..49f299d5 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java
@@ -110,11 +110,11 @@ public class PacketTranslatorRegistry<T> {
         if (session.isClosed()) {
             return;
         }
 
         try {
-            translator.translate(packet, session);
+            translator.translate(session, packet);
         } catch (Throwable ex) {
             GeyserConnector.getInstance().getLogger().error(LanguageUtils.getLocaleStringLog("geyser.network.translator.packet.failed", packet.getClass().getSimpleName()), ex);
             ex.printStackTrace();
         }
     }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAdventureSettingsTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAdventureSettingsTranslator.java
index e868eede..a9ae9db6 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAdventureSettingsTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAdventureSettingsTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = AdventureSettingsPacket.class)
 public class BedrockAdventureSettingsTranslator extends PacketTranslator<AdventureSettingsPacket> {
 
     @Override
-    public void translate(AdventureSettingsPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, AdventureSettingsPacket packet) {
         boolean isFlying = packet.getSettings().contains(AdventureSetting.FLYING);
         if (!isFlying && session.getGameMode() == GameMode.SPECTATOR) {
             // We should always be flying in spectator mode
             session.sendAdventureSettings();
             return;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAnimateTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAnimateTranslator.java
index 4d915b61..53912bf4 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAnimateTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockAnimateTranslator.java
@@ -37,11 +37,11 @@ import java.util.concurrent.TimeUnit;
 
 @Translator(packet = AnimatePacket.class)
 public class BedrockAnimateTranslator extends PacketTranslator<AnimatePacket> {
 
     @Override
-    public void translate(AnimatePacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, AnimatePacket packet) {
         // Stop the player sending animations before they have fully spawned into the server
         if (!session.isSpawned()) {
             return;
         }
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockEntityDataTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockEntityDataTranslator.java
index f9db86d8..a5575bb8 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockEntityDataTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockEntityDataTranslator.java
@@ -37,11 +37,11 @@ import org.geysermc.connector.utils.SignUtils;
 
 @Translator(packet = BlockEntityDataPacket.class)
 public class BedrockBlockEntityDataTranslator extends PacketTranslator<BlockEntityDataPacket> {
 
     @Override
-    public void translate(BlockEntityDataPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, BlockEntityDataPacket packet) {
         NbtMap tag = packet.getData();
         if (tag.getString("id").equals("Sign")) {
             // This is the reason why this all works - Bedrock sends packets every time you update the sign, Java only wants the final packet
             // But Bedrock sends one final packet when you're done editing the sign, which should be equal to the last message since there's no edits
             // So if the latest update does not match the last cached update then it's still being edited
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockPickRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockPickRequestTranslator.java
index 3a3a4bbe..add16e9c 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockPickRequestTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBlockPickRequestTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.utils.InventoryUtils;
 
 @Translator(packet = BlockPickRequestPacket.class)
 public class BedrockBlockPickRequestTranslator extends PacketTranslator<BlockPickRequestPacket> {
 
     @Override
-    public void translate(BlockPickRequestPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, BlockPickRequestPacket packet) {
         Vector3i vector = packet.getBlockPosition();
         int blockToPick = session.getConnector().getWorldManager().getBlockAt(session, vector.getX(), vector.getY(), vector.getZ());
         
         // Block is air - chunk caching is probably off
         if (blockToPick == BlockStateValues.JAVA_AIR_ID) {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBookEditTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBookEditTranslator.java
index 67dcb40c..53e945c5 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBookEditTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockBookEditTranslator.java
@@ -47,11 +47,11 @@ import java.util.List;
 public class BedrockBookEditTranslator extends PacketTranslator<BookEditPacket> {
     private static final int MAXIMUM_PAGE_LENGTH = 8192 * 4;
     private static final int MAXIMUM_TITLE_LENGTH = 128 * 4;
 
     @Override
-    public void translate(BookEditPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, BookEditPacket packet) {
         if (packet.getText() != null && !packet.getText().isEmpty() && packet.getText().getBytes(StandardCharsets.UTF_8).length > MAXIMUM_PAGE_LENGTH) {
             session.getConnector().getLogger().warning("Page length greater than server allowed!");
             return;
         }
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandBlockUpdateTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandBlockUpdateTranslator.java
index 634ba0c5..f8f50338 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandBlockUpdateTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandBlockUpdateTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = CommandBlockUpdatePacket.class)
 public class BedrockCommandBlockUpdateTranslator extends PacketTranslator<CommandBlockUpdatePacket> {
 
     @Override
-    public void translate(CommandBlockUpdatePacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, CommandBlockUpdatePacket packet) {
         String command = packet.getCommand();
         boolean outputTracked = packet.isOutputTracked();
         if (packet.isBlock()) {
             CommandBlockMode mode;
             switch (packet.getMode()) {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandRequestTranslator.java
index a9ed15ce..b73048d3 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandRequestTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockCommandRequestTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.network.translators.chat.MessageTranslator;
 
 @Translator(packet = CommandRequestPacket.class)
 public class BedrockCommandRequestTranslator extends PacketTranslator<CommandRequestPacket> {
 
     @Override
-    public void translate(CommandRequestPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, CommandRequestPacket packet) {
         String command = packet.getCommand().replace("/", "");
         CommandManager commandManager = GeyserConnector.getInstance().getCommandManager();
         if (session.getConnector().getPlatformType() == PlatformType.STANDALONE && command.trim().startsWith("geyser ") && commandManager.getCommands().containsKey(command.split(" ")[1])) {
             commandManager.runCommand(session, command);
         } else {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockContainerCloseTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockContainerCloseTranslator.java
index 88c2206d..935dde46 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockContainerCloseTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockContainerCloseTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.connector.utils.InventoryUtils;
 
 @Translator(packet = ContainerClosePacket.class)
 public class BedrockContainerCloseTranslator extends PacketTranslator<ContainerClosePacket> {
 
     @Override
-    public void translate(ContainerClosePacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, ContainerClosePacket packet) {
         byte windowId = packet.getId();
 
         //Client wants close confirmation
         session.sendUpstreamPacket(packet);
         session.setClosingInventory(false);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEmoteListTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEmoteListTranslator.java
index 2519aa44..4a005082 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEmoteListTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEmoteListTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = EmoteListPacket.class)
 public class BedrockEmoteListTranslator extends PacketTranslator<EmoteListPacket> {
 
     @Override
-    public void translate(EmoteListPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, EmoteListPacket packet) {
         if (session.getConnector().getConfig().getEmoteOffhandWorkaround() == EmoteOffhandWorkaroundOption.NO_EMOTES) {
             return;
         }
 
         session.refreshEmotes(packet.getPieceIds());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityPickRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityPickRequestTranslator.java
index 3910fd7f..c6677dbd 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityPickRequestTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityPickRequestTranslator.java
@@ -40,11 +40,11 @@ import org.geysermc.connector.utils.InventoryUtils;
  */
 @Translator(packet = EntityPickRequestPacket.class)
 public class BedrockEntityPickRequestTranslator extends PacketTranslator<EntityPickRequestPacket> {
 
     @Override
-    public void translate(EntityPickRequestPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, EntityPickRequestPacket packet) {
         if (session.getGameMode() != GameMode.CREATIVE) return; // Apparently Java behavior
         Entity entity = session.getEntityCache().getEntityByGeyserId(packet.getRuntimeEntityId());
         if (entity == null) return;
 
         // Get the corresponding item
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockFilterTextTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockFilterTextTranslator.java
index 3b017dfb..681ca432 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockFilterTextTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockFilterTextTranslator.java
@@ -39,11 +39,11 @@ import org.geysermc.connector.network.translators.Translator;
  */
 @Translator(packet = FilterTextPacket.class)
 public class BedrockFilterTextTranslator extends PacketTranslator<FilterTextPacket> {
 
     @Override
-    public void translate(FilterTextPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, FilterTextPacket packet) {
         if (session.getOpenInventory() instanceof CartographyContainer) {
             // We don't want to be able to rename in the cartography table
             return;
         }
         packet.setFromServer(true);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java
index 72cbdbd5..45135d90 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java
@@ -68,11 +68,11 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
     private static final int CREATIVE_EYE_HEIGHT_PLACE_DISTANCE = 49;
     private static final int SURVIVAL_EYE_HEIGHT_PLACE_DISTANCE = 36;
     private static final float MAXIMUM_BLOCK_DESTROYING_DISTANCE = 36f;
 
     @Override
-    public void translate(InventoryTransactionPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, InventoryTransactionPacket packet) {
         // Send book updates before opening inventories
         session.getBookEditCache().checkForSend();
 
         ItemMappings mappings = session.getItemMappings();
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemFrameDropItemTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemFrameDropItemTranslator.java
index ac61f2f9..e4c4ff95 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemFrameDropItemTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemFrameDropItemTranslator.java
@@ -42,11 +42,11 @@ import org.geysermc.connector.network.translators.Translator;
  */
 @Translator(packet = ItemFrameDropItemPacket.class)
 public class BedrockItemFrameDropItemTranslator extends PacketTranslator<ItemFrameDropItemPacket> {
 
     @Override
-    public void translate(ItemFrameDropItemPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, ItemFrameDropItemPacket packet) {
         Entity entity = ItemFrameEntity.getItemFrameEntity(session, packet.getBlockPosition());
         if (entity != null) {
             ClientPlayerInteractEntityPacket interactPacket = new ClientPlayerInteractEntityPacket((int) entity.getEntityId(),
                     InteractAction.ATTACK, Hand.MAIN_HAND, session.isSneaking());
             session.sendDownstreamPacket(interactPacket);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemStackRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemStackRequestTranslator.java
index b5e0dd2c..80d5e809 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemStackRequestTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockItemStackRequestTranslator.java
@@ -37,11 +37,11 @@ import org.geysermc.connector.network.translators.inventory.InventoryTranslator;
  */
 @Translator(packet = ItemStackRequestPacket.class)
 public class BedrockItemStackRequestTranslator extends PacketTranslator<ItemStackRequestPacket> {
 
     @Override
-    public void translate(ItemStackRequestPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, ItemStackRequestPacket packet) {
         Inventory inventory = session.getOpenInventory();
         if (inventory == null)
             return;
 
         InventoryTranslator translator = session.getInventoryTranslator();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java
index f693ade9..ea30099f 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java
@@ -43,11 +43,11 @@ import org.geysermc.connector.utils.InventoryUtils;
  */
 @Translator(packet = LecternUpdatePacket.class)
 public class BedrockLecternUpdateTranslator extends PacketTranslator<LecternUpdatePacket> {
 
     @Override
-    public void translate(LecternUpdatePacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, LecternUpdatePacket packet) {
         if (packet.isDroppingBook()) {
             // Bedrock drops the book outside of the GUI. Java drops it in the GUI
             // So, we enter the GUI and then drop it! :)
             session.setDroppingLecternBook(true);
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java
index b997644c..4b4c5b20 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java
@@ -36,11 +36,11 @@ import java.util.concurrent.TimeUnit;
 
 @Translator(packet = MapInfoRequestPacket.class)
 public class BedrockMapInfoRequestTranslator extends PacketTranslator<MapInfoRequestPacket> {
 
     @Override
-    public void translate(MapInfoRequestPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, MapInfoRequestPacket packet) {
         long mapId = packet.getUniqueMapId();
 
         ClientboundMapItemDataPacket mapPacket = session.getStoredMaps().remove(mapId);
         if (mapPacket != null) {
             // Delay the packet 100ms to prevent the client from ignoring the packet
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMobEquipmentTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMobEquipmentTranslator.java
index 3102c622..4e53e0c4 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMobEquipmentTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMobEquipmentTranslator.java
@@ -40,11 +40,11 @@ import java.util.concurrent.TimeUnit;
 
 @Translator(packet = MobEquipmentPacket.class)
 public class BedrockMobEquipmentTranslator extends PacketTranslator<MobEquipmentPacket> {
 
     @Override
-    public void translate(MobEquipmentPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, MobEquipmentPacket packet) {
         if (!session.isSpawned() || packet.getHotbarSlot() > 8 ||
                 packet.getContainerId() != ContainerId.INVENTORY || session.getPlayerInventory().getHeldItemSlot() == packet.getHotbarSlot()) {
             // For the last condition - Don't update the slot if the slot is the same - not Java Edition behavior and messes with plugins such as Grief Prevention
             return;
         }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMoveEntityAbsoluteTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMoveEntityAbsoluteTranslator.java
index fbfaafb4..00fa6a1f 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMoveEntityAbsoluteTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMoveEntityAbsoluteTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.network.translators.Translator;
  */
 @Translator(packet = MoveEntityAbsolutePacket.class)
 public class BedrockMoveEntityAbsoluteTranslator extends PacketTranslator<MoveEntityAbsolutePacket> {
 
     @Override
-    public void translate(MoveEntityAbsolutePacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, MoveEntityAbsolutePacket packet) {
         session.setLastVehicleMoveTimestamp(System.currentTimeMillis());
 
         float y = packet.getPosition().getY();
         if (session.getRidingVehicleEntity() instanceof BoatEntity) {
             // Remove the offset to prevents boats from looking like they're floating in water
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockNetworkStackLatencyTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockNetworkStackLatencyTranslator.java
index cd9265c0..345c69d6 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockNetworkStackLatencyTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockNetworkStackLatencyTranslator.java
@@ -43,11 +43,11 @@ import java.util.concurrent.TimeUnit;
  */
 @Translator(packet = NetworkStackLatencyPacket.class)
 public class BedrockNetworkStackLatencyTranslator extends PacketTranslator<NetworkStackLatencyPacket> {
 
     @Override
-    public void translate(NetworkStackLatencyPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, NetworkStackLatencyPacket packet) {
         long pingId;
         // so apparently, as of 1.16.200
         // PS4 divides the network stack latency timestamp FOR US!!!
         // WTF
         if (session.getClientData().getDeviceOs().equals(DeviceOs.PS4)) {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPacketViolationWarningTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPacketViolationWarningTranslator.java
index b69cedcb..110a3f54 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPacketViolationWarningTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPacketViolationWarningTranslator.java
@@ -32,10 +32,10 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = PacketViolationWarningPacket.class)
 public class BedrockPacketViolationWarningTranslator extends PacketTranslator<PacketViolationWarningPacket> {
 
     @Override
-    public void translate(PacketViolationWarningPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, PacketViolationWarningPacket packet) {
         // Not translated since this is something that the developers need to know
         session.getConnector().getLogger().error("Packet violation warning sent from client! " + packet.toString());
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPlayerInputTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPlayerInputTranslator.java
index 1d9eb022..27289b5d 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPlayerInputTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPlayerInputTranslator.java
@@ -44,11 +44,11 @@ import org.geysermc.connector.network.translators.Translator;
  */
 @Translator(packet = PlayerInputPacket.class)
 public class BedrockPlayerInputTranslator extends PacketTranslator<PlayerInputPacket> {
 
     @Override
-    public void translate(PlayerInputPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, PlayerInputPacket packet) {
         ClientSteerVehiclePacket clientSteerVehiclePacket = new ClientSteerVehiclePacket(
                 packet.getInputMotion().getX(), packet.getInputMotion().getY(), packet.isJumping(), packet.isSneaking()
         );
 
         session.sendDownstreamPacket(clientSteerVehiclePacket);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java
index da760cdd..b8f09103 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java
@@ -40,11 +40,11 @@ import org.geysermc.connector.utils.LoadstoneTracker;
 
 @Translator(packet = PositionTrackingDBClientRequestPacket.class)
 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());
 
         // Fetch the stored Loadstone
         LoadstoneTracker.LoadstonePos pos = LoadstoneTracker.getPos(packet.getTrackingId());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockRespawnTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockRespawnTranslator.java
index 2964bd65..1257ec0d 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockRespawnTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockRespawnTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = RespawnPacket.class)
 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'
             // But I assume the new if statement below fixes that problem
             RespawnPacket respawnPacket = new RespawnPacket();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockServerSettingsRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockServerSettingsRequestTranslator.java
index 501ed446..2b2ec291 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockServerSettingsRequestTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockServerSettingsRequestTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.cumulus.CustomForm;
 import java.util.concurrent.TimeUnit;
 
 @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);
 
         // Fixes https://bugs.mojang.com/browse/MCPE-94012 because of the delay
         session.getConnector().getGeneralThreadPool().schedule(() -> {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java
index ac6f543d..c52513c4 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java
@@ -35,11 +35,11 @@ import org.geysermc.connector.skin.SkinManager;
 import org.geysermc.connector.skin.SkullSkinManager;
 
 @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);
                 session.login();
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockShowCreditsTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockShowCreditsTranslator.java
index c6c29222..0252817e 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockShowCreditsTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockShowCreditsTranslator.java
@@ -35,11 +35,11 @@ import com.nukkitx.protocol.bedrock.packet.ShowCreditsPacket;
 
 @Translator(packet = ShowCreditsPacket.class)
 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);
         }
     }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockTextTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockTextTranslator.java
index 9253372a..775a4011 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockTextTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockTextTranslator.java
@@ -35,11 +35,11 @@ import org.geysermc.connector.network.translators.chat.MessageTranslator;
 
 @Translator(packet = TextPacket.class)
 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)) {
             return;
         }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/BedrockEntityEventTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/BedrockEntityEventTranslator.java
index e5c2590d..b85f5758 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/BedrockEntityEventTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/BedrockEntityEventTranslator.java
@@ -41,11 +41,11 @@ import java.util.concurrent.TimeUnit;
 
 @Translator(packet = EntityEventPacket.class)
 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
                 session.sendUpstreamPacket(packet);
                 return;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockActionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockActionTranslator.java
index 2603f2a0..ab652434 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockActionTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockActionTranslator.java
@@ -52,11 +52,11 @@ import java.util.ArrayList;
 
 @Translator(packet = PlayerActionPacket.class)
 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
         if (packet.getAction() != PlayerActionType.RESPAWN) {
             session.getBookEditCache().checkForSend();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockEmoteTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockEmoteTranslator.java
index 890dc0c8..a20c3872 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockEmoteTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockEmoteTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.utils.BlockUtils;
 
 @Translator(packet = EmotePacket.class)
 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,
                     BlockFace.DOWN);
             session.sendDownstreamPacket(swapHandsPacket);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockInteractTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockInteractTranslator.java
index 10384d43..cb101c23 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockInteractTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockInteractTranslator.java
@@ -44,11 +44,11 @@ import org.geysermc.connector.utils.InteractiveTagManager;
 
 @Translator(packet = InteractPacket.class)
 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
             entity = session.getPlayerEntity();
         } else {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java
index 7970dbd1..6882e6e0 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java
@@ -51,11 +51,11 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack
         BEDROCK_OVERWORLD_VOID_FLOOR_UPPER_Y = GeyserConnector.getInstance().getConfig().isExtendedWorldHeight() ? -104 : -40;
         BEDROCK_OVERWORLD_VOID_FLOOR_LOWER_Y = BEDROCK_OVERWORLD_VOID_FLOOR_UPPER_Y + 2;
     }
 
     @Override
-    public void translate(MovePlayerPacket packet, GeyserSession session) {
+    public void translate(GeyserSession session, MovePlayerPacket packet) {
         SessionPlayerEntity entity = session.getPlayerEntity();
         if (!session.isSpawned()) return;
 
         if (!session.getUpstream().isInitialized()) {
             MoveEntityAbsolutePacket moveEntityBack = new MoveEntityAbsolutePacket();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockRiderJumpTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockRiderJumpTranslator.java
index 5d375dae..7f562dc6 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockRiderJumpTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockRiderJumpTranslator.java
@@ -35,11 +35,11 @@ import org.geysermc.connector.network.translators.PacketTranslator;
 import org.geysermc.connector.network.translators.Translator;
 
 @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());
             session.sendDownstreamPacket(playerStatePacket);
         }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java
index b8afe76c..1022d838 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.connector.network.translators.Translator;
  */
 @Translator(packet = SetPlayerGameTypePacket.class)
 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());
         session.sendUpstreamPacket(playerGameTypePacket);
     }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/world/BedrockLevelSoundEventTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/world/BedrockLevelSoundEventTranslator.java
index c87692b8..8b19a00e 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/world/BedrockLevelSoundEventTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/world/BedrockLevelSoundEventTranslator.java
@@ -34,11 +34,11 @@ import org.geysermc.connector.utils.CooldownUtils;
 
 @Translator(packet = LevelSoundEventPacket.class)
 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);
 
         // Yes, what even, but thankfully we can hijack this packet to send the cooldown
         if (packet.getSound() == SoundEvent.ATTACK_NODAMAGE || packet.getSound() == SoundEvent.ATTACK || packet.getSound() == SoundEvent.ATTACK_STRONG) {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTabTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTabTranslator.java
index aa22ae46..6a6d541c 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTabTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTabTranslator.java
@@ -35,11 +35,11 @@ import org.geysermc.connector.network.translators.Translator;
  * Indicates that the client should open a particular advancement tab
  */
 @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();
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTranslator.java
index 2e1057e0..01de50c2 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaAdvancementsTranslator.java
@@ -40,11 +40,11 @@ import java.util.Map;
 
 @Translator(packet = ServerAdvancementsPacket.class)
 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();
             advancementsCache.getStoredAdvancementProgress().clear();
         }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaBossBarTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaBossBarTranslator.java
index 0dd7cb95..b74c8444 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaBossBarTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaBossBarTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 import com.github.steveice10.mc.protocol.packet.ingame.server.ServerBossBarPacket;
 
 @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:
                 long entityId = session.getEntityCache().getNextEntityId().incrementAndGet();
                 bossBar = new BossBar(session, entityId, packet.getTitle(), packet.getHealth(), 0, 1, 0);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java
index a5988050..e059517d 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaChatTranslator.java
@@ -34,11 +34,11 @@ import org.geysermc.connector.network.translators.chat.MessageTranslator;
 
 @Translator(packet = ServerChatPacket.class)
 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("");
         textPacket.setXuid(session.getAuthData().getXboxUUID());
         switch (packet.getType()) {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java
index 0aec2184..e4116c6a 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java
@@ -94,11 +94,11 @@ public class JavaDeclareCommandsTranslator extends PacketTranslator<ServerDeclar
         }
         VALID_SCOREBOARD_SLOTS = teamOptions.toArray(new String[0]);
     }
 
     @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.");
 
             // Send an empty packet so Bedrock doesn't override /help with its own, built-in help command.
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java
index 807a0098..fd534759 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java
@@ -69,11 +69,11 @@ public class JavaDeclareRecipesTranslator extends PacketTranslator<ServerDeclare
             CraftingData.fromMulti(UUID.fromString("98c84b38-1085-46bd-b1ce-dd38c159e6cc"), ++LAST_RECIPE_NET_ID), // Map upgrading
             CraftingData.fromMulti(UUID.fromString("602234e4-cac1-4353-8bb7-b1ebff70024b"), ++LAST_RECIPE_NET_ID) // Map locking
     );
 
     @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;
 
         Int2ObjectMap<Recipe> recipeMap = new Int2ObjectOpenHashMap<>(Registries.RECIPES.forVersion(session.getUpstream().getProtocolVersion()));
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareTagsTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareTagsTranslator.java
index 368693bf..c72ab454 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareTagsTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareTagsTranslator.java
@@ -32,9 +32,9 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerDeclareTagsPacket.class)
 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);
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDifficultyTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDifficultyTranslator.java
index 48447fe8..b6299cc3 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDifficultyTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDifficultyTranslator.java
@@ -34,11 +34,11 @@ import com.nukkitx.protocol.bedrock.packet.SetDifficultyPacket;
 
 @Translator(packet = ServerDifficultyPacket.class)
 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);
 
         session.getWorldCache().setDifficulty(packet.getDifficulty());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDisconnectPacket.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDisconnectPacket.java
index cf6688db..3a9ca378 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDisconnectPacket.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDisconnectPacket.java
@@ -33,9 +33,9 @@ import org.geysermc.connector.network.translators.chat.MessageTranslator;
 
 @Translator(packet = ServerDisconnectPacket.class)
 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()));
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaJoinGameTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaJoinGameTranslator.java
index a84464c1..da21b7c2 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaJoinGameTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaJoinGameTranslator.java
@@ -50,11 +50,11 @@ import java.util.List;
 @Translator(packet = ServerJoinGamePacket.class)
 public class JavaJoinGameTranslator extends PacketTranslator<ServerJoinGamePacket> {
     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());
 
         // If the player is already initialized and a join game packet is sent, they
         // are swapping servers
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaKeepAliveTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaKeepAliveTranslator.java
index 8506389f..6798b191 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaKeepAliveTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaKeepAliveTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.connector.network.translators.Translator;
  */
 @Translator(packet = ServerKeepAlivePacket.class)
 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;
         }
         NetworkStackLatencyPacket latencyPacket = new NetworkStackLatencyPacket();
         latencyPacket.setFromServer(true);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginDisconnectTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginDisconnectTranslator.java
index 3433edcc..814082d0 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginDisconnectTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginDisconnectTranslator.java
@@ -33,10 +33,10 @@ import org.geysermc.connector.network.translators.chat.MessageTranslator;
 
 @Translator(packet = LoginDisconnectPacket.class)
 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()));
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginPluginRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginPluginRequestTranslator.java
index 9680188b..2ed28520 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginPluginRequestTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginPluginRequestTranslator.java
@@ -33,11 +33,11 @@ import com.github.steveice10.mc.protocol.packet.login.client.LoginPluginResponse
 import com.github.steveice10.mc.protocol.packet.login.server.LoginPluginRequestPacket;
 
 @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(
                 new LoginPluginResponsePacket(packet.getMessageId(), null)
         );
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginSuccessTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginSuccessTranslator.java
index 214ea5de..d7675bd0 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginSuccessTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaLoginSuccessTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.connector.skin.SkinManager;
 
 @Translator(packet = LoginSuccessPacket.class)
 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();
 
         // Required, or else Floodgate players break with Spigot chunk caching
         GameProfile profile = packet.getProfile();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPingPacket.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPingPacket.java
index c324a81c..c2dc3454 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPingPacket.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPingPacket.java
@@ -34,9 +34,9 @@ import org.geysermc.connector.network.translators.Translator;
 // Why does this packet exist? Whatever, we better implement it
 @Translator(packet = ServerPingPacket.class)
 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()));
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java
index 01373087..15f1f960 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java
@@ -39,11 +39,11 @@ import org.geysermc.cumulus.util.FormType;
 import java.nio.charset.StandardCharsets;
 
 @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;
         }
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaRespawnTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaRespawnTranslator.java
index 0af30c4f..8df47c7b 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaRespawnTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaRespawnTranslator.java
@@ -41,11 +41,11 @@ import org.geysermc.connector.utils.DimensionUtils;
 
 @Translator(packet = ServerRespawnPacket.class)
 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());
         entity.getAttributes().put(GeyserAttributeType.HEALTH, entity.createHealthAttribute());
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaStatisticsTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaStatisticsTranslator.java
index 24780804..15c6452e 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaStatisticsTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaStatisticsTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.utils.StatisticsUtils;
 
 @Translator(packet = ServerStatisticsPacket.class)
 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()) {
             session.setWaitingForStatistics(false);
             StatisticsUtils.buildAndSendStatisticsMenu(session);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaUnlockRecipesTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaUnlockRecipesTranslator.java
index 0a0ba4d2..d7c4053e 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaUnlockRecipesTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaUnlockRecipesTranslator.java
@@ -38,11 +38,11 @@ import java.util.Arrays;
  */
 @Translator(packet = ServerUnlockRecipesPacket.class)
 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 {
             session.getUnlockedRecipes().addAll(Arrays.asList(packet.getRecipes()));
         }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAnimationTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAnimationTranslator.java
index 255c4f46..57bacc65 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAnimationTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAnimationTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.utils.DimensionUtils;
 
 @Translator(packet = ServerEntityAnimationPacket.class)
 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();
         } else {
             entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAttachTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAttachTranslator.java
index b7ca66fe..20f5c4e5 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAttachTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityAttachTranslator.java
@@ -40,11 +40,11 @@ import org.geysermc.connector.network.translators.Translator;
  */
 @Translator(packet = ServerEntityAttachPacket.class)
 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()) {
             holderId = session.getPlayerEntity();
         } else {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityCollectItemTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityCollectItemTranslator.java
index 4711e54e..70b93472 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityCollectItemTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityCollectItemTranslator.java
@@ -42,11 +42,11 @@ import org.geysermc.connector.network.translators.Translator;
  */
 @Translator(packet = ServerEntityCollectItemPacket.class)
 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;
         // Collector is the entity 'picking up' the item
         Entity collectorEntity;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEffectTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEffectTranslator.java
index 627b3f2e..d99b11a4 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEffectTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEffectTranslator.java
@@ -35,11 +35,11 @@ import org.geysermc.connector.utils.EntityUtils;
 
 @Translator(packet = ServerEntityEffectPacket.class)
 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();
             session.getEffectCache().setEffect(packet.getEffect(), packet.getAmplifier());
         } else {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEquipmentTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEquipmentTranslator.java
index d3a1c52b..5dc01541 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEquipmentTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityEquipmentTranslator.java
@@ -37,11 +37,11 @@ import org.geysermc.connector.network.translators.item.ItemTranslator;
 
 @Translator(packet = ServerEntityEquipmentPacket.class)
 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();
         } else {
             entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityHeadLookTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityHeadLookTranslator.java
index 71801e4d..5120e8c3 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityHeadLookTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityHeadLookTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerEntityHeadLookPacket.class)
 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();
         }
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityMetadataTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityMetadataTranslator.java
index 73047d0c..c67becae 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityMetadataTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityMetadataTranslator.java
@@ -37,11 +37,11 @@ import org.geysermc.connector.utils.LanguageUtils;
 
 @Translator(packet = ServerEntityMetadataPacket.class)
 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();
         } else {
             entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionRotationTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionRotationTranslator.java
index 7f915e47..73372593 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionRotationTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionRotationTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerEntityPositionRotationPacket.class)
 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();
         }
         if (entity == null) return;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionTranslator.java
index 999b5f0e..67f8fe1b 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPositionTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerEntityPositionPacket.class)
 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();
         }
         if (entity == null) return;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPropertiesTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPropertiesTranslator.java
index 642ba3bb..c3937a1e 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPropertiesTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityPropertiesTranslator.java
@@ -34,11 +34,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerEntityPropertiesPacket.class)
 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();
         } else {
             entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRemoveEffectTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRemoveEffectTranslator.java
index 4a55f51a..131fa250 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRemoveEffectTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRemoveEffectTranslator.java
@@ -35,11 +35,11 @@ import org.geysermc.connector.utils.EntityUtils;
 
 @Translator(packet = ServerEntityRemoveEffectPacket.class)
 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();
             session.getEffectCache().removeEffect(packet.getEffect());
         } else {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRotationTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRotationTranslator.java
index 62fe6585..71e00589 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRotationTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityRotationTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerEntityRotationPacket.class)
 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();
         }
         if (entity == null) return;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java
index 66d3e388..3e9fa075 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java
@@ -41,11 +41,11 @@ import java.util.Arrays;
 
 @Translator(packet = ServerEntitySetPassengersPacket.class)
 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();
         } else {
             entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityStatusTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityStatusTranslator.java
index af1cfc45..aaa42d12 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityStatusTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityStatusTranslator.java
@@ -41,11 +41,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerEntityStatusPacket.class)
 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();
         } else {
             entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityTeleportTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityTeleportTranslator.java
index 62d2ed21..35dcacfe 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityTeleportTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityTeleportTranslator.java
@@ -35,11 +35,11 @@ import com.nukkitx.math.vector.Vector3f;
 
 @Translator(packet = ServerEntityTeleportPacket.class)
 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();
         }
         if (entity == null) return;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityVelocityTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityVelocityTranslator.java
index 3f0b69cd..28d0d977 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityVelocityTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntityVelocityTranslator.java
@@ -38,11 +38,11 @@ import com.nukkitx.protocol.bedrock.packet.SetEntityMotionPacket;
 
 @Translator(packet = ServerEntityVelocityPacket.class)
 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();
         }
         if (entity == null) return;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaRemoveEntitiesTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaRemoveEntitiesTranslator.java
index e05763ee..0b1e021e 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaRemoveEntitiesTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaRemoveEntitiesTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerRemoveEntitiesPacket.class)
 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) {
                 session.getEntityCache().removeEntity(entity, false);
             }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerAbilitiesTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerAbilitiesTranslator.java
index f97e91ed..4b0152fc 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerAbilitiesTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerAbilitiesTranslator.java
@@ -32,11 +32,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerPlayerAbilitiesPacket.class)
 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();
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerActionAckTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerActionAckTranslator.java
index f7572dd8..8c9aa014 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerActionAckTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerActionAckTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.utils.ChunkUtils;
 
 @Translator(packet = ServerPlayerActionAckPacket.class)
 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();
             stopBreak.setType(LevelEventType.BLOCK_STOP_BREAK);
             stopBreak.setPosition(Vector3f.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ()));
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerChangeHeldItemTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerChangeHeldItemTranslator.java
index 58ab3bfc..27e16ee1 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerChangeHeldItemTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerChangeHeldItemTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerPlayerChangeHeldItemPacket.class)
 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());
         hotbarPacket.setSelectHotbarSlot(true);
         session.sendUpstreamPacket(hotbarPacket);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerHealthTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerHealthTranslator.java
index 05bdfd95..20403a61 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerHealthTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerHealthTranslator.java
@@ -39,11 +39,11 @@ import java.util.List;
 
 @Translator(packet = ServerPlayerHealthPacket.class)
 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());
         SetHealthPacket setHealthPacket = new SetHealthPacket();
         setHealthPacket.setHealth(health);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerListEntryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerListEntryTranslator.java
index b8a7972c..b5a35803 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerListEntryTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerListEntryTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.network.translators.Translator;
 import org.geysermc.connector.skin.SkinManager;
 
 @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;
 
         PlayerListPacket translate = new PlayerListPacket();
         translate.setAction(packet.getAction() == PlayerListEntryAction.ADD_PLAYER ? PlayerListPacket.Action.ADD : PlayerListPacket.Action.REMOVE);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerPositionRotationTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerPositionRotationTranslator.java
index 454d23d6..6b177846 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerPositionRotationTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerPositionRotationTranslator.java
@@ -48,11 +48,11 @@ import org.geysermc.connector.utils.LanguageUtils;
 
 @Translator(packet = ServerPlayerPositionRotationPacket.class)
 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;
 
         PlayerEntity entity = session.getPlayerEntity();
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerSetExperienceTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerSetExperienceTranslator.java
index 52cd0b58..8a8636eb 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerSetExperienceTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/player/JavaPlayerSetExperienceTranslator.java
@@ -38,11 +38,11 @@ import java.util.Arrays;
 
 @Translator(packet = ServerPlayerSetExperiencePacket.class)
 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());
         entity.getAttributes().put(GeyserAttributeType.EXPERIENCE, experience);
         AttributeData experienceLevel = GeyserAttributeType.EXPERIENCE_LEVEL.getAttribute(packet.getLevel());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnEntityTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnEntityTranslator.java
index 7bce03d7..e53358ac 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnEntityTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnEntityTranslator.java
@@ -44,11 +44,11 @@ import java.lang.reflect.InvocationTargetException;
 
 @Translator(packet = ServerSpawnEntityPacket.class)
 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());
         Vector3f rotation = Vector3f.from(packet.getYaw(), packet.getPitch(), 0);
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnExpOrbTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnExpOrbTranslator.java
index a158751c..6fd0e609 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnExpOrbTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnExpOrbTranslator.java
@@ -37,11 +37,11 @@ import com.nukkitx.math.vector.Vector3f;
 
 @Translator(packet = ServerSpawnExpOrbPacket.class)
 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(
                 packet.getExp(), packet.getEntityId(), session.getEntityCache().getNextEntityId().incrementAndGet(),
                 EntityType.EXPERIENCE_ORB, position, Vector3f.ZERO, Vector3f.ZERO
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnLivingEntityTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnLivingEntityTranslator.java
index 96d93fab..46d47e80 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnLivingEntityTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnLivingEntityTranslator.java
@@ -40,11 +40,11 @@ import java.lang.reflect.InvocationTargetException;
 
 @Translator(packet = ServerSpawnLivingEntityPacket.class)
 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());
 
         EntityType type = EntityUtils.toBedrockEntity(packet.getType());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPaintingTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPaintingTranslator.java
index fea6fd3d..1d5ee473 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPaintingTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPaintingTranslator.java
@@ -35,11 +35,11 @@ import org.geysermc.connector.utils.PaintingType;
 
 @Translator(packet = ServerSpawnPaintingPacket.class)
 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(),
                 session.getEntityCache().getNextEntityId().incrementAndGet(),
                 position, PaintingType.getByPaintingType(packet.getPaintingType()), packet.getDirection().ordinal());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPlayerTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPlayerTranslator.java
index 4cb96723..6df3666b 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPlayerTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/spawn/JavaSpawnPlayerTranslator.java
@@ -37,11 +37,11 @@ import org.geysermc.connector.skin.SkinManager;
 
 @Translator(packet = ServerSpawnPlayerPacket.class)
 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());
 
         PlayerEntity entity;
         if (packet.getUuid().equals(session.getPlayerEntity().getUuid())) {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaDisplayScoreboardTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaDisplayScoreboardTranslator.java
index dc2112b6..a92cc628 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaDisplayScoreboardTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaDisplayScoreboardTranslator.java
@@ -33,10 +33,10 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerD
 
 @Translator(packet = ServerDisplayScoreboardPacket.class)
 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());
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java
index 87c842ff..d898edf9 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java
@@ -39,11 +39,11 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerS
 
 @Translator(packet = ServerScoreboardObjectivePacket.class)
 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());
         int pps = worldCache.increaseAndGetScoreboardPacketsPerSecond();
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaTeamTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaTeamTranslator.java
index 1774f12c..6ec4813d 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaTeamTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaTeamTranslator.java
@@ -45,11 +45,11 @@ import java.util.Set;
 @Translator(packet = ServerTeamPacket.class)
 public class JavaTeamTranslator extends PacketTranslator<ServerTeamPacket> {
     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()));
         }
 
         int pps = session.getWorldCache().increaseAndGetScoreboardPacketsPerSecond();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java
index b7054b1e..daf4d383 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java
@@ -45,11 +45,11 @@ public class JavaUpdateScoreTranslator extends PacketTranslator<ServerUpdateScor
     public JavaUpdateScoreTranslator() {
         logger = GeyserConnector.getInstance().getLogger();
     }
 
     @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();
 
         Objective objective = scoreboard.getObjective(packet.getObjective());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaClearTitlesTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaClearTitlesTranslator.java
index 27d760cf..16888f93 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaClearTitlesTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaClearTitlesTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerClearTitlesPacket.class)
 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);
         titlePacket.setText("");
         titlePacket.setXuid("");
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetActionBarTextTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetActionBarTextTranslator.java
index ebbfdffe..516568b3 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetActionBarTextTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetActionBarTextTranslator.java
@@ -34,11 +34,11 @@ import org.geysermc.connector.network.translators.chat.MessageTranslator;
 
 @Translator(packet = ServerSetActionBarTextPacket.class)
 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 = " ";
         } else {
             text = MessageTranslator.convertMessage(packet.getText(), session.getLocale());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetSubtitleTextTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetSubtitleTextTranslator.java
index 5411962a..ee246ea1 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetSubtitleTextTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetSubtitleTextTranslator.java
@@ -34,11 +34,11 @@ import org.geysermc.connector.network.translators.chat.MessageTranslator;
 
 @Translator(packet = ServerSetSubtitleTextPacket.class)
 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 = " ";
         } else {
             text = MessageTranslator.convertMessage(packet.getText(), session.getLocale());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitleTextTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitleTextTranslator.java
index 5e8d0557..199d05e3 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitleTextTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitleTextTranslator.java
@@ -34,11 +34,11 @@ import org.geysermc.connector.network.translators.chat.MessageTranslator;
 
 @Translator(packet = ServerSetTitleTextPacket.class)
 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 = " ";
         } else {
             text = MessageTranslator.convertMessage(packet.getText(), session.getLocale());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitlesAnimationTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitlesAnimationTranslator.java
index 69a0b2ba..7514eef4 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitlesAnimationTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/title/JavaSetTitlesAnimationTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerSetTitlesAnimationPacket.class)
 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("");
         titlePacket.setFadeInTime(packet.getFadeIn());
         titlePacket.setFadeOutTime(packet.getFadeOut());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaCloseWindowTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaCloseWindowTranslator.java
index 3c984c0a..419f4fc5 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaCloseWindowTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaCloseWindowTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.utils.InventoryUtils;
 
 @Translator(packet = ServerCloseWindowPacket.class)
 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()));
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenHorseWindowTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenHorseWindowTranslator.java
index 5016b615..ecd74332 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenHorseWindowTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenHorseWindowTranslator.java
@@ -96,11 +96,11 @@ public class JavaOpenHorseWindowTranslator extends PacketTranslator<ServerOpenHo
         saddleBuilder.putInt("slotNumber", 0);
         SADDLE_SLOT = saddleBuilder.build();
     }
 
     @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;
         }
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenWindowTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenWindowTranslator.java
index c562226c..883d792c 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenWindowTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaOpenWindowTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.utils.LocaleUtils;
 
 @Translator(packet = ServerOpenWindowPacket.class)
 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;
         }
 
         InventoryTranslator newTranslator = InventoryTranslator.INVENTORY_TRANSLATORS.get(packet.getType());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaSetSlotTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaSetSlotTranslator.java
index 68fc2df3..27f932c9 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaSetSlotTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaSetSlotTranslator.java
@@ -56,11 +56,11 @@ import java.util.concurrent.TimeUnit;
 
 @Translator(packet = ServerSetSlotPacket.class)
 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);
             InventoryUtils.updateCursor(session);
             return;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowItemsTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowItemsTranslator.java
index 7f8cea59..542001df 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowItemsTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowItemsTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.connector.utils.InventoryUtils;
 
 @Translator(packet = ServerWindowItemsPacket.class)
 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;
 
         inventory.setStateId(packet.getStateId());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowPropertyTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowPropertyTranslator.java
index c5dcc76c..512c797d 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowPropertyTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/window/JavaWindowPropertyTranslator.java
@@ -35,11 +35,11 @@ import org.geysermc.connector.utils.InventoryUtils;
 
 @Translator(packet = ServerWindowPropertyPacket.class)
 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;
 
         InventoryTranslator translator = session.getInventoryTranslator();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockBreakAnimTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockBreakAnimTranslator.java
index 4a3f60a8..1a2b5e46 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockBreakAnimTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockBreakAnimTranslator.java
@@ -39,11 +39,11 @@ import org.geysermc.connector.utils.BlockUtils;
 
 @Translator(packet = ServerBlockBreakAnimPacket.class)
 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();
         levelEventPacket.setPosition(Vector3f.from(
                 packet.getPosition().getX(),
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockChangeTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockChangeTranslator.java
index d144e99b..78ee1238 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockChangeTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockChangeTranslator.java
@@ -40,11 +40,11 @@ import org.geysermc.connector.utils.ChunkUtils;
 
 @Translator(packet = ServerBlockChangePacket.class)
 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();
         ChunkUtils.updateBlock(session, packet.getRecord().getBlock(), pos);
         if (updatePlacement) {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockValueTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockValueTranslator.java
index bb703f2e..892a4107 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockValueTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaBlockValueTranslator.java
@@ -43,11 +43,11 @@ import java.util.concurrent.TimeUnit;
 
 @Translator(packet = ServerBlockValuePacket.class)
 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()));
         if (packet.getValue() instanceof ChestValue) {
             ChestValue value = (ChestValue) packet.getValue() ;
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java
index 2ec3a15f..2cadf157 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java
@@ -50,11 +50,11 @@ import static org.geysermc.connector.utils.ChunkUtils.MINIMUM_ACCEPTED_HEIGHT_OV
 public class JavaChunkDataTranslator extends PacketTranslator<ServerChunkDataPacket> {
     // Caves and cliffs supports 3D biomes by implementing a very similar palette system to blocks
     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());
         }
 
         session.getChunkCache().addToCache(packet.getColumn());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaExplosionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaExplosionTranslator.java
index 919e14fe..5f913c91 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaExplosionTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaExplosionTranslator.java
@@ -41,11 +41,11 @@ import org.geysermc.connector.utils.ChunkUtils;
 
 @Translator(packet = ServerExplosionPacket.class)
 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());
         }
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java
index 8a67080a..984d85d0 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java
@@ -39,11 +39,11 @@ import org.geysermc.connector.utils.DimensionUtils;
 import org.geysermc.connector.utils.MapColor;
 
 @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;
 
         mapItemDataPacket.setUniqueMapId(packet.getMapId());
         mapItemDataPacket.setDimensionId(DimensionUtils.javaToBedrock(session.getDimension()));
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMultiBlockChangeTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMultiBlockChangeTranslator.java
index de1eea0b..2a4115af 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMultiBlockChangeTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMultiBlockChangeTranslator.java
@@ -35,11 +35,11 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerMultiB
 
 @Translator(packet = ServerMultiBlockChangePacket.class)
 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());
         }
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaNotifyClientTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaNotifyClientTranslator.java
index f6eb375e..1cdc09a7 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaNotifyClientTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaNotifyClientTranslator.java
@@ -47,11 +47,11 @@ import org.geysermc.connector.utils.LocaleUtils;
 
 @Translator(packet = ServerNotifyClientPacket.class)
 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()) {
             case START_RAIN:
                 LevelEventPacket startRainPacket = new LevelEventPacket();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayBuiltinSoundTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayBuiltinSoundTranslator.java
index ec7adc03..f5ae7ff0 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayBuiltinSoundTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayBuiltinSoundTranslator.java
@@ -42,11 +42,11 @@ import org.geysermc.connector.registry.type.SoundMapping;
 
 @Translator(packet = ServerPlayBuiltinSoundPacket.class)
 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);
         if (soundMapping == null) {
             session.getConnector().getLogger().debug("[Builtin] Sound mapping " + packetSound + " not found - " + packet.toString());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayEffectTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayEffectTranslator.java
index 4ba1f2d4..aca7a1f9 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayEffectTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlayEffectTranslator.java
@@ -46,11 +46,11 @@ import java.util.Locale;
 
 @Translator(packet = ServerPlayEffectPacket.class)
 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();
             SoundEvent soundEvent = Registries.RECORDS.getOrDefault(recordEffectData.getRecordId(), SoundEvent.STOP_RECORD);
             Vector3f pos = Vector3f.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ()).add(0.5f, 0.5f, 0.5f);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlaySoundTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlaySoundTranslator.java
index 8741bf24..1f1ac0d1 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlaySoundTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaPlaySoundTranslator.java
@@ -38,11 +38,11 @@ import org.geysermc.connector.registry.type.SoundMapping;
 
 @Translator(packet = ServerPlaySoundPacket.class)
 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();
         } else if (packet.getSound() instanceof CustomSound) {
             packetSound = ((CustomSound) packet.getSound()).getName();
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnParticleTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnParticleTranslator.java
index 14f433c9..df17cead 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnParticleTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnParticleTranslator.java
@@ -48,11 +48,11 @@ import java.util.function.Function;
 
 @Translator(packet = ServerSpawnParticlePacket.class)
 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) {
                 // 0 means don't apply the offset
                 Vector3f position = Vector3f.from(packet.getX(), packet.getY(), packet.getZ());
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnPositionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnPositionTranslator.java
index 7c0a2a0f..16e50744 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnPositionTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaSpawnPositionTranslator.java
@@ -36,11 +36,11 @@ import org.geysermc.connector.utils.DimensionUtils;
 
 @Translator(packet = ServerSpawnPositionPacket.class)
 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);
         spawnPositionPacket.setDimensionId(DimensionUtils.javaToBedrock(session.getDimension()));
         spawnPositionPacket.setSpawnType(SetSpawnPositionPacket.Type.WORLD_SPAWN);
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaStopSoundTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaStopSoundTranslator.java
index ebcf2234..93241310 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaStopSoundTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaStopSoundTranslator.java
@@ -37,11 +37,11 @@ import org.geysermc.connector.registry.type.SoundMapping;
 
 @Translator(packet = ServerStopSoundPacket.class)
 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();
             stopPacket.setStoppingAllSound(true);
             stopPacket.setSoundName("");
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java
index cce48f5c..8b05d046 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java
@@ -49,11 +49,11 @@ import java.util.List;
 
 @Translator(packet = ServerTradeListPacket.class)
 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;
         }
 
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUnloadChunkTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUnloadChunkTranslator.java
index 6d3efc1c..3d428327 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUnloadChunkTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUnloadChunkTranslator.java
@@ -35,11 +35,11 @@ import java.util.Iterator;
 
 @Translator(packet = ServerUnloadChunkPacket.class)
 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
         Iterator<Vector3i> iterator = session.getSkullCache().keySet().iterator();
         while (iterator.hasNext()) {
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTileEntityTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTileEntityTranslator.java
index 056e0092..25c4684b 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTileEntityTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTileEntityTranslator.java
@@ -43,11 +43,11 @@ import org.geysermc.connector.utils.BlockEntityUtils;
 
 @Translator(packet = ServerUpdateTileEntityPacket.class)
 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());
             return;
         }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTimeTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTimeTranslator.java
index 461d8139..3564177e 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTimeTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateTimeTranslator.java
@@ -33,11 +33,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerUpdateTimePacket.class)
 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();
 
         // https://minecraft.gamepedia.com/Day-night_cycle#24-hour_Minecraft_day
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewDistanceTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewDistanceTranslator.java
index 23dc2dbc..155af39b 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewDistanceTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewDistanceTranslator.java
@@ -33,9 +33,9 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdate
 
 @Translator(packet = ServerUpdateViewDistancePacket.class)
 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());
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewPositionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewPositionTranslator.java
index d304e110..a4ce170b 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewPositionTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaUpdateViewPositionTranslator.java
@@ -35,11 +35,11 @@ import com.nukkitx.math.vector.Vector3i;
 
 @Translator(packet = ServerUpdateViewPositionPacket.class)
 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));
         }
     }
 }
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaVehicleMoveTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaVehicleMoveTranslator.java
index 013c503d..2f984517 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaVehicleMoveTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaVehicleMoveTranslator.java
@@ -34,11 +34,11 @@ import org.geysermc.connector.network.translators.Translator;
 
 @Translator(packet = ServerVehicleMovePacket.class)
 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;
 
         entity.moveAbsolute(session, Vector3f.from(packet.getX(), packet.getY(), packet.getZ()), packet.getYaw(), packet.getPitch(), false, true);
     }
diff --git a/connector/src/main/java/org/geysermc/connector/utils/LoginEncryptionUtils.java b/connector/src/main/java/org/geysermc/connector/utils/LoginEncryptionUtils.java
index d3d5fa67..b9da1a43 100644
--- a/connector/src/main/java/org/geysermc/connector/utils/LoginEncryptionUtils.java
+++ b/connector/src/main/java/org/geysermc/connector/utils/LoginEncryptionUtils.java
@@ -29,10 +29,12 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 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;
 import com.nukkitx.protocol.bedrock.util.EncryptionUtils;
 import org.geysermc.connector.GeyserConnector;
@@ -47,10 +49,11 @@ import org.geysermc.cumulus.response.CustomFormResponse;
 import org.geysermc.cumulus.response.ModalFormResponse;
 import org.geysermc.cumulus.response.SimpleFormResponse;
 
 import javax.crypto.SecretKey;
 import java.io.IOException;
+import java.net.URI;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
 import java.security.PublicKey;
 import java.security.interfaces.ECPublicKey;
 import java.security.spec.ECGenParameterSpec;
@@ -60,32 +63,53 @@ public class LoginEncryptionUtils {
     private static final ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
 
     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());
         } catch (IOException ex) {
             throw new RuntimeException("Certificate JSON can not be read.");
@@ -94,15 +118,17 @@ public class LoginEncryptionUtils {
         JsonNode certChainData = certData.get("chain");
         if (certChainData.getNodeType() != JsonNodeType.ARRAY) {
             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));
 
             if (!validChain && !session.getConnector().getConfig().isEnableProxyConnections()) {
diff --git a/pom.xml b/pom.xml
index f8ab9165..43baad6e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,11 +3,11 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <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>
     <url>https://geysermc.org</url>
 

Vulnerable code:         /*stage ('Deploy') {
        }*/
        <version>1.4.1-SNAPSHOT</version>
    <version>1.4.1-SNAPSHOT</version>
        <version>1.4.1-SNAPSHOT</version>
            <version>1.4.1-SNAPSHOT</version>
        <version>1.4.1-SNAPSHOT</version>
            <version>1.4.1-SNAPSHOT</version>
        <version>1.4.1-SNAPSHOT</version>
            <version>1.4.1-SNAPSHOT</version>
        <version>1.4.1-SNAPSHOT</version>
            <version>1.4.1-SNAPSHOT</version>
        <version>1.4.1-SNAPSHOT</version>
            <version>1.4.1-SNAPSHOT</version>
        <version>1.4.1-SNAPSHOT</version>
            <version>1.4.1-SNAPSHOT</version>
        <version>1.4.1-SNAPSHOT</version>
        <version>1.4.1-SNAPSHOT</version>
            <version>1.4.1-SNAPSHOT</version>
            <version>1.4.1-SNAPSHOT</version>
            <version>690a545d</version>
        LoginEncryptionUtils.encryptPlayerConnection(connector, session, loginPacket);
    public abstract void translate(T packet, GeyserSession session);
            translator.translate(packet, session);
    public void translate(AdventureSettingsPacket packet, GeyserSession session) {
    public void translate(AnimatePacket packet, GeyserSession session) {
    public void translate(BlockEntityDataPacket packet, GeyserSession session) {
    public void translate(BlockPickRequestPacket packet, GeyserSession session) {
    public void translate(BookEditPacket packet, GeyserSession session) {
    public void translate(CommandBlockUpdatePacket packet, GeyserSession session) {
    public void translate(CommandRequestPacket packet, GeyserSession session) {
    public void translate(ContainerClosePacket packet, GeyserSession session) {
    public void translate(EmoteListPacket packet, GeyserSession session) {
    public void translate(EntityPickRequestPacket packet, GeyserSession session) {
    public void translate(FilterTextPacket packet, GeyserSession session) {
    public void translate(InventoryTransactionPacket packet, GeyserSession session) {
    public void translate(ItemFrameDropItemPacket packet, GeyserSession session) {
    public void translate(ItemStackRequestPacket packet, GeyserSession session) {
    public void translate(LecternUpdatePacket packet, GeyserSession session) {
    public void translate(MapInfoRequestPacket packet, GeyserSession session) {
    public void translate(MobEquipmentPacket packet, GeyserSession session) {
    public void translate(MoveEntityAbsolutePacket packet, GeyserSession session) {
    public void translate(NetworkStackLatencyPacket packet, GeyserSession session) {
    public void translate(PacketViolationWarningPacket packet, GeyserSession session) {
    public void translate(PlayerInputPacket packet, GeyserSession session) {
    public void translate(PositionTrackingDBClientRequestPacket packet, GeyserSession session) {
    public void translate(RespawnPacket packet, GeyserSession session) {
    public void translate(ServerSettingsRequestPacket packet, GeyserSession session) {
    public void translate(SetLocalPlayerAsInitializedPacket packet, GeyserSession session) {
    public void translate(ShowCreditsPacket packet, GeyserSession session) {
    public void translate(TextPacket packet, GeyserSession session) {
    public void translate(EntityEventPacket packet, GeyserSession session) {
    public void translate(PlayerActionPacket packet, GeyserSession session) {
    public void translate(EmotePacket packet, GeyserSession session) {
    public void translate(InteractPacket packet, GeyserSession session) {
    public void translate(MovePlayerPacket packet, GeyserSession session) {
    public void translate(RiderJumpPacket packet, GeyserSession session) {
    public void translate(SetPlayerGameTypePacket packet, GeyserSession session) {
    public void translate(LevelSoundEventPacket packet, GeyserSession session) {
    public void translate(ServerAdvancementTabPacket packet, GeyserSession session) {
    public void translate(ServerAdvancementsPacket packet, GeyserSession session) {
    public void translate(ServerBossBarPacket packet, GeyserSession session) {
    public void translate(ServerChatPacket packet, GeyserSession session) {
    public void translate(ServerDeclareCommandsPacket packet, GeyserSession session) {
    public void translate(ServerDeclareRecipesPacket packet, GeyserSession session) {
    public void translate(ServerDeclareTagsPacket packet, GeyserSession session) {
    public void translate(ServerDifficultyPacket packet, GeyserSession session) {
    public void translate(ServerDisconnectPacket packet, GeyserSession session) {
    public void translate(ServerJoinGamePacket packet, GeyserSession session) {
    public void translate(ServerKeepAlivePacket packet, GeyserSession session) {
    public void translate(LoginDisconnectPacket packet, GeyserSession session) {
    public void translate(LoginPluginRequestPacket packet, GeyserSession session) {
    public void translate(LoginSuccessPacket packet, GeyserSession session) {
    public void translate(ServerPingPacket packet, GeyserSession session) {
    public void translate(ServerPluginMessagePacket packet, GeyserSession session) {
    public void translate(ServerRespawnPacket packet, GeyserSession session) {
    public void translate(ServerStatisticsPacket packet, GeyserSession session) {
    public void translate(ServerUnlockRecipesPacket packet, GeyserSession session) {
    public void translate(ServerEntityAnimationPacket packet, GeyserSession session) {
    public void translate(ServerEntityAttachPacket packet, GeyserSession session) {
    public void translate(ServerEntityCollectItemPacket packet, GeyserSession session) {
    public void translate(ServerEntityEffectPacket packet, GeyserSession session) {
    public void translate(ServerEntityEquipmentPacket packet, GeyserSession session) {
    public void translate(ServerEntityHeadLookPacket packet, GeyserSession session) {
    public void translate(ServerEntityMetadataPacket packet, GeyserSession session) {
    public void translate(ServerEntityPositionRotationPacket packet, GeyserSession session) {
    public void translate(ServerEntityPositionPacket packet, GeyserSession session) {
    public void translate(ServerEntityPropertiesPacket packet, GeyserSession session) {
    public void translate(ServerEntityRemoveEffectPacket packet, GeyserSession session) {
    public void translate(ServerEntityRotationPacket packet, GeyserSession session) {
    public void translate(ServerEntitySetPassengersPacket packet, GeyserSession session) {
    public void translate(ServerEntityStatusPacket packet, GeyserSession session) {
    public void translate(ServerEntityTeleportPacket packet, GeyserSession session) {
    public void translate(ServerEntityVelocityPacket packet, GeyserSession session) {
    public void translate(ServerRemoveEntitiesPacket packet, GeyserSession session) {
    public void translate(ServerPlayerAbilitiesPacket packet, GeyserSession session) {
    public void translate(ServerPlayerActionAckPacket packet, GeyserSession session) {
    public void translate(ServerPlayerChangeHeldItemPacket packet, GeyserSession session) {
    public void translate(ServerPlayerHealthPacket packet, GeyserSession session) {
    public void translate(ServerPlayerListEntryPacket packet, GeyserSession session) {
    public void translate(ServerPlayerPositionRotationPacket packet, GeyserSession session) {
    public void translate(ServerPlayerSetExperiencePacket packet, GeyserSession session) {
    public void translate(ServerSpawnEntityPacket packet, GeyserSession session) {
    public void translate(ServerSpawnExpOrbPacket packet, GeyserSession session) {
    public void translate(ServerSpawnLivingEntityPacket packet, GeyserSession session) {
    public void translate(ServerSpawnPaintingPacket packet, GeyserSession session) {
    public void translate(ServerSpawnPlayerPacket packet, GeyserSession session) {
    public void translate(ServerDisplayScoreboardPacket packet, GeyserSession session) {
    public void translate(ServerScoreboardObjectivePacket packet, GeyserSession session) {
    public void translate(ServerTeamPacket packet, GeyserSession session) {
    public void translate(ServerUpdateScorePacket packet, GeyserSession session) {
    public void translate(ServerClearTitlesPacket packet, GeyserSession session) {
    public void translate(ServerSetActionBarTextPacket packet, GeyserSession session) {
    public void translate(ServerSetSubtitleTextPacket packet, GeyserSession session) {
    public void translate(ServerSetTitleTextPacket packet, GeyserSession session) {
    public void translate(ServerSetTitlesAnimationPacket packet, GeyserSession session) {
    public void translate(ServerCloseWindowPacket packet, GeyserSession session) {
    public void translate(ServerOpenHorseWindowPacket packet, GeyserSession session) {
    public void translate(ServerOpenWindowPacket packet, GeyserSession session) {
    public void translate(ServerSetSlotPacket packet, GeyserSession session) {
    public void translate(ServerWindowItemsPacket packet, GeyserSession session) {
    public void translate(ServerWindowPropertyPacket packet, GeyserSession session) {
    public void translate(ServerBlockBreakAnimPacket packet, GeyserSession session) {
    public void translate(ServerBlockChangePacket packet, GeyserSession session) {
    public void translate(ServerBlockValuePacket packet, GeyserSession session) {
    public void translate(ServerChunkDataPacket packet, GeyserSession session) {
    public void translate(ServerExplosionPacket packet, GeyserSession session) {
    public void translate(ServerMapDataPacket packet, GeyserSession session) {
    public void translate(ServerMultiBlockChangePacket packet, GeyserSession session) {
    public void translate(ServerNotifyClientPacket packet, GeyserSession session) {
    public void translate(ServerPlayBuiltinSoundPacket packet, GeyserSession session) {
    public void translate(ServerPlayEffectPacket packet, GeyserSession session) {
    public void translate(ServerPlaySoundPacket packet, GeyserSession session) {
    public void translate(ServerSpawnParticlePacket packet, GeyserSession session) {
    public void translate(ServerSpawnPositionPacket packet, GeyserSession session) {
    public void translate(ServerStopSoundPacket packet, GeyserSession session) {
    public void translate(ServerTradeListPacket packet, GeyserSession session) {
    public void translate(ServerUnloadChunkPacket packet, GeyserSession session) {
    public void translate(ServerUpdateTileEntityPacket packet, GeyserSession session) {
    public void translate(ServerUpdateTimePacket packet, GeyserSession session) {
    public void translate(ServerUpdateViewDistancePacket packet, GeyserSession session) {
    public void translate(ServerUpdateViewPositionPacket packet, GeyserSession session) {
    public void translate(ServerVehicleMovePacket packet, GeyserSession session) {
            if (!validChain) {
                validChain = EncryptionUtils.verifyJwt(jwt, EncryptionUtils.getMojangPublicKey());
            if (lastKey != null) {
                if (!EncryptionUtils.verifyJwt(jwt, lastKey)) 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());
    public static void encryptPlayerConnection(GeyserConnector connector, GeyserSession session, LoginPacket loginPacket) {
        encryptConnectionWithCert(connector, session, loginPacket.getSkinData().toString(), certChainData);
    private static void encryptConnectionWithCert(GeyserConnector connector, GeyserSession session, String clientData, JsonNode certChainData) {
    <version>1.4.1-SNAPSHOT</version>
Fixed code:         stage ('Deploy') {
        }
        <version>1.4.2-SNAPSHOT</version>
    <version>1.4.2-SNAPSHOT</version>
        <version>1.4.2-SNAPSHOT</version>
            <version>1.4.2-SNAPSHOT</version>
        <version>1.4.2-SNAPSHOT</version>
            <version>1.4.2-SNAPSHOT</version>
        <version>1.4.2-SNAPSHOT</version>
            <version>1.4.2-SNAPSHOT</version>
        <version>1.4.2-SNAPSHOT</version>
            <version>1.4.2-SNAPSHOT</version>
        <version>1.4.2-SNAPSHOT</version>
            <version>1.4.2-SNAPSHOT</version>
        <version>1.4.2-SNAPSHOT</version>
            <version>1.4.2-SNAPSHOT</version>
        <version>1.4.2-SNAPSHOT</version>
        <version>1.4.2-SNAPSHOT</version>
            <version>1.4.2-SNAPSHOT</version>
            <version>1.4.2-SNAPSHOT</version>
            <version>6ce2f6e</version>
        LoginEncryptionUtils.encryptPlayerConnection(session, loginPacket);
    public abstract void translate(GeyserSession session, T packet);
            translator.translate(session, packet);
    public void translate(GeyserSession session, AdventureSettingsPacket packet) {
    public void translate(GeyserSession session, AnimatePacket packet) {
    public void translate(GeyserSession session, BlockEntityDataPacket packet) {
    public void translate(GeyserSession session, BlockPickRequestPacket packet) {
    public void translate(GeyserSession session, BookEditPacket packet) {
    public void translate(GeyserSession session, CommandBlockUpdatePacket packet) {
    public void translate(GeyserSession session, CommandRequestPacket packet) {
    public void translate(GeyserSession session, ContainerClosePacket packet) {
    public void translate(GeyserSession session, EmoteListPacket packet) {
    public void translate(GeyserSession session, EntityPickRequestPacket packet) {
    public void translate(GeyserSession session, FilterTextPacket packet) {
    public void translate(GeyserSession session, InventoryTransactionPacket packet) {
    public void translate(GeyserSession session, ItemFrameDropItemPacket packet) {
    public void translate(GeyserSession session, ItemStackRequestPacket packet) {
    public void translate(GeyserSession session, LecternUpdatePacket packet) {
    public void translate(GeyserSession session, MapInfoRequestPacket packet) {
    public void translate(GeyserSession session, MobEquipmentPacket packet) {
    public void translate(GeyserSession session, MoveEntityAbsolutePacket packet) {
    public void translate(GeyserSession session, NetworkStackLatencyPacket packet) {
    public void translate(GeyserSession session, PacketViolationWarningPacket packet) {
    public void translate(GeyserSession session, PlayerInputPacket packet) {
    public void translate(GeyserSession session, PositionTrackingDBClientRequestPacket packet) {
    public void translate(GeyserSession session, RespawnPacket packet) {
    public void translate(GeyserSession session, ServerSettingsRequestPacket packet) {
    public void translate(GeyserSession session, SetLocalPlayerAsInitializedPacket packet) {
    public void translate(GeyserSession session, ShowCreditsPacket packet) {
    public void translate(GeyserSession session, TextPacket packet) {
    public void translate(GeyserSession session, EntityEventPacket packet) {
    public void translate(GeyserSession session, PlayerActionPacket packet) {
    public void translate(GeyserSession session, EmotePacket packet) {
    public void translate(GeyserSession session, InteractPacket packet) {
    public void translate(GeyserSession session, MovePlayerPacket packet) {
    public void translate(GeyserSession session, RiderJumpPacket packet) {
    public void translate(GeyserSession session, SetPlayerGameTypePacket packet) {
    public void translate(GeyserSession session, LevelSoundEventPacket packet) {
    public void translate(GeyserSession session, ServerAdvancementTabPacket packet) {
    public void translate(GeyserSession session, ServerAdvancementsPacket packet) {
    public void translate(GeyserSession session, ServerBossBarPacket packet) {
    public void translate(GeyserSession session, ServerChatPacket packet) {
    public void translate(GeyserSession session, ServerDeclareCommandsPacket packet) {
    public void translate(GeyserSession session, ServerDeclareRecipesPacket packet) {
    public void translate(GeyserSession session, ServerDeclareTagsPacket packet) {
    public void translate(GeyserSession session, ServerDifficultyPacket packet) {
    public void translate(GeyserSession session, ServerDisconnectPacket packet) {
    public void translate(GeyserSession session, ServerJoinGamePacket packet) {
    public void translate(GeyserSession session, ServerKeepAlivePacket packet) {
    public void translate(GeyserSession session, LoginDisconnectPacket packet) {
    public void translate(GeyserSession session, LoginPluginRequestPacket packet) {
    public void translate(GeyserSession session, LoginSuccessPacket packet) {
    public void translate(GeyserSession session, ServerPingPacket packet) {
    public void translate(GeyserSession session, ServerPluginMessagePacket packet) {
    public void translate(GeyserSession session, ServerRespawnPacket packet) {
    public void translate(GeyserSession session, ServerStatisticsPacket packet) {
    public void translate(GeyserSession session, ServerUnlockRecipesPacket packet) {
    public void translate(GeyserSession session, ServerEntityAnimationPacket packet) {
    public void translate(GeyserSession session, ServerEntityAttachPacket packet) {
    public void translate(GeyserSession session, ServerEntityCollectItemPacket packet) {
    public void translate(GeyserSession session, ServerEntityEffectPacket packet) {
    public void translate(GeyserSession session, ServerEntityEquipmentPacket packet) {
    public void translate(GeyserSession session, ServerEntityHeadLookPacket packet) {
    public void translate(GeyserSession session, ServerEntityMetadataPacket packet) {
    public void translate(GeyserSession session, ServerEntityPositionRotationPacket packet) {
    public void translate(GeyserSession session, ServerEntityPositionPacket packet) {
    public void translate(GeyserSession session, ServerEntityPropertiesPacket packet) {
    public void translate(GeyserSession session, ServerEntityRemoveEffectPacket packet) {
    public void translate(GeyserSession session, ServerEntityRotationPacket packet) {
    public void translate(GeyserSession session, ServerEntitySetPassengersPacket packet) {
    public void translate(GeyserSession session, ServerEntityStatusPacket packet) {
    public void translate(GeyserSession session, ServerEntityTeleportPacket packet) {
    public void translate(GeyserSession session, ServerEntityVelocityPacket packet) {
    public void translate(GeyserSession session, ServerRemoveEntitiesPacket packet) {
    public void translate(GeyserSession session, ServerPlayerAbilitiesPacket packet) {
    public void translate(GeyserSession session, ServerPlayerActionAckPacket packet) {
    public void translate(GeyserSession session, ServerPlayerChangeHeldItemPacket packet) {
    public void translate(GeyserSession session, ServerPlayerHealthPacket packet) {
    public void translate(GeyserSession session, ServerPlayerListEntryPacket packet) {
    public void translate(GeyserSession session, ServerPlayerPositionRotationPacket packet) {
    public void translate(GeyserSession session, ServerPlayerSetExperiencePacket packet) {
    public void translate(GeyserSession session, ServerSpawnEntityPacket packet) {
    public void translate(GeyserSession session, ServerSpawnExpOrbPacket packet) {
    public void translate(GeyserSession session, ServerSpawnLivingEntityPacket packet) {
    public void translate(GeyserSession session, ServerSpawnPaintingPacket packet) {
    public void translate(GeyserSession session, ServerSpawnPlayerPacket packet) {
    public void translate(GeyserSession session, ServerDisplayScoreboardPacket packet) {
    public void translate(GeyserSession session, ServerScoreboardObjectivePacket packet) {
    public void translate(GeyserSession session, ServerTeamPacket packet) {
    public void translate(GeyserSession session, ServerUpdateScorePacket packet) {
    public void translate(GeyserSession session, ServerClearTitlesPacket packet) {
    public void translate(GeyserSession session, ServerSetActionBarTextPacket packet) {
    public void translate(GeyserSession session, ServerSetSubtitleTextPacket packet) {
    public void translate(GeyserSession session, ServerSetTitleTextPacket packet) {
    public void translate(GeyserSession session, ServerSetTitlesAnimationPacket packet) {
    public void translate(GeyserSession session, ServerCloseWindowPacket packet) {
    public void translate(GeyserSession session, ServerOpenHorseWindowPacket packet) {
    public void translate(GeyserSession session, ServerOpenWindowPacket packet) {
    public void translate(GeyserSession session, ServerSetSlotPacket packet) {
    public void translate(GeyserSession session, ServerWindowItemsPacket packet) {
    public void translate(GeyserSession session, ServerWindowPropertyPacket packet) {
    public void translate(GeyserSession session, ServerBlockBreakAnimPacket packet) {
    public void translate(GeyserSession session, ServerBlockChangePacket packet) {
    public void translate(GeyserSession session, ServerBlockValuePacket packet) {
    public void translate(GeyserSession session, ServerChunkDataPacket packet) {
    public void translate(GeyserSession session, ServerExplosionPacket packet) {
    public void translate(GeyserSession session, ServerMapDataPacket packet) {
    public void translate(GeyserSession session, ServerMultiBlockChangePacket packet) {
    public void translate(GeyserSession session, ServerNotifyClientPacket packet) {
    public void translate(GeyserSession session, ServerPlayBuiltinSoundPacket packet) {
    public void translate(GeyserSession session, ServerPlayEffectPacket packet) {
    public void translate(GeyserSession session, ServerPlaySoundPacket packet) {
    public void translate(GeyserSession session, ServerSpawnParticlePacket packet) {
    public void translate(GeyserSession session, ServerSpawnPositionPacket packet) {
    public void translate(GeyserSession session, ServerStopSoundPacket packet) {
    public void translate(GeyserSession session, ServerTradeListPacket packet) {
    public void translate(GeyserSession session, ServerUnloadChunkPacket packet) {
    public void translate(GeyserSession session, ServerUpdateTileEntityPacket packet) {
    public void translate(GeyserSession session, ServerUpdateTimePacket packet) {
    public void translate(GeyserSession session, ServerUpdateViewDistancePacket packet) {
    public void translate(GeyserSession session, ServerUpdateViewPositionPacket packet) {
    public void translate(GeyserSession session, ServerVehicleMovePacket packet) {
import com.nimbusds.jose.shaded.json.JSONObject;
import com.nimbusds.jose.shaded.json.JSONValue;
import java.net.URI;
        if (data.size() != 3) {
            return false;
        }

            // x509 cert is expected in every claim
            URI x5u = jwt.getHeader().getX509CertURL();
            if (x5u == null) {
                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;
            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);

    public static void encryptPlayerConnection(GeyserSession session, LoginPacket loginPacket) {
        encryptConnectionWithCert(session, loginPacket.getSkinData().toString(), certChainData);
    private static void encryptConnectionWithCert(GeyserSession session, String clientData, JsonNode certChainData) {
            GeyserConnector connector = session.getConnector();

    <version>1.4.2-SNAPSHOT</version>