diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index 50483cf8..5caffc82 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -120,7 +120,7 @@
com.comphenix.protocol
ProtocolLib
- 4.5.0
+ 4.5.1
provided
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
index 42b6673e..0bd10708 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
@@ -4,6 +4,7 @@ import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
+import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.github.games647.fastlogin.core.shared.LoginSource;
@@ -48,9 +49,17 @@ class ProtocolLibLoginSource implements LoginSource {
PacketContainer newPacket = new PacketContainer(ENCRYPTION_BEGIN);
newPacket.getStrings().write(0, serverId);
- newPacket.getSpecificModifier(PublicKey.class).write(0, publicKey);
+ StructureModifier keyModifier = newPacket.getSpecificModifier(PublicKey.class);
+ int verifyField = 0;
+ if (keyModifier.getFields().isEmpty()) {
+ // Since 1.16.4 this is now a byte field
+ newPacket.getByteArrays().write(0, publicKey.getEncoded());
+ verifyField++;
+ } else {
+ keyModifier.write(0, publicKey);
+ }
- newPacket.getByteArrays().write(0, verifyToken);
+ newPacket.getByteArrays().write(verifyField, verifyToken);
//serverId is a empty string
ProtocolLibrary.getProtocolManager().sendServerPacket(player, newPacket);