diff --git a/build.gradle b/build.gradle
index fe6d0ea..4f5e65f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,9 +2,6 @@ plugins {
 	id 'fabric-loom' version '1.9-SNAPSHOT'
 }
 
-sourceCompatibility = JavaVersion.VERSION_21
-targetCompatibility = JavaVersion.VERSION_21
-
 base.archivesName = project.archives_base_name
 version = project.mod_version
 group = project.maven_group
@@ -22,15 +19,10 @@ dependencies {
 	// Fabric API. This is technically optional, but you probably want it anyway.
 	modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
 
-	include(modImplementation("net.kyori:adventure-platform-fabric:5.14.1")) // for Minecraft 1.21-1.21.1
-	include(implementation("net.kyori:adventure-text-serializer-gson:4.17.0"))
-	include(implementation("net.kyori:adventure-text-serializer-legacy:4.17.0"))
+	include(modImplementation("net.kyori:adventure-platform-fabric:6.2.0"))
+	include(implementation("net.kyori:adventure-text-serializer-gson:4.18.0"))
+	include(implementation("net.kyori:adventure-text-serializer-legacy:4.18.0"))
 	include(implementation("org.luaj:luaj-jse:3.0.1"))
-
-	// Uncomment the following line to enable the deprecated Fabric API modules. 
-	// These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time.
-
-	// modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}"
 }
 
 processResources {
@@ -44,10 +36,13 @@ processResources {
 tasks.withType(JavaCompile).configureEach {
 	// Minecraft 1.18 (1.18-pre2) upwards uses Java 17.
 	it.options.release = 21
+
+	sourceCompatibility = JavaVersion.VERSION_21
+	targetCompatibility = JavaVersion.VERSION_21
 }
 
 jar {
 	from("LICENSE") {
-		rename { "${it}_${project.archivesBaseName}"}
+		rename { "${it}_${base.archivesName}"}
 	}
 }
diff --git a/gradle.properties b/gradle.properties
index 3ae78b1..eb60e16 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,9 +4,9 @@ org.gradle.parallel=true
 
 # Fabric Properties
 	# check these on https://fabricmc.net/develop
-	minecraft_version=1.21.1
-	yarn_mappings=1.21.1+build.3
-	loader_version=0.16.5
+	minecraft_version=1.21.4
+	yarn_mappings=1.21.4+build.2
+	loader_version=0.16.9
 
 # Mod Properties
 	mod_version = 1.0.0
@@ -14,6 +14,6 @@ org.gradle.parallel=true
 	archives_base_name = chipmunkmod
 
 # Dependencies
-	fabric_version=0.105.0+1.21.1
+	fabric_version=0.113.0+1.21.4
 
 
diff --git a/src/main/java/land/chipmunk/chipmunkmod/ChipmunkMod.java b/src/main/java/land/chipmunk/chipmunkmod/ChipmunkMod.java
index 478002f..f62f0b2 100644
--- a/src/main/java/land/chipmunk/chipmunkmod/ChipmunkMod.java
+++ b/src/main/java/land/chipmunk/chipmunkmod/ChipmunkMod.java
@@ -2,7 +2,6 @@ package land.chipmunk.chipmunkmod;
 
 import com.google.gson.GsonBuilder;
 import land.chipmunk.chipmunkmod.modules.KaboomCheck;
-import land.chipmunk.chipmunkmod.modules.Players;
 import land.chipmunk.chipmunkmod.modules.SelfCare;
 import land.chipmunk.chipmunkmod.util.gson.BlockPosTypeAdapter;
 import net.fabricmc.api.ModInitializer;
@@ -45,7 +44,6 @@ public class ChipmunkMod implements ModInitializer {
       throw new RuntimeException("Could not load the config", exception);
     }
 
-    Players.INSTANCE.init();
     KaboomCheck.INSTANCE.init();
     SelfCare.INSTANCE.init();
 
diff --git a/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientConnectionMixin.java b/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientConnectionMixin.java
index a81600f..43bd234 100644
--- a/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientConnectionMixin.java
+++ b/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientConnectionMixin.java
@@ -28,13 +28,6 @@ public class ClientConnectionMixin {
   @Unique
   private static final Pattern CUSTOM_PITCH_PATTERN = Pattern.compile(".*\\.pitch\\.(.*)");
 
-  @Inject(at = @At("HEAD"), method = "disconnect", cancellable = true)
-  public void disconnect (Text disconnectReason, CallbackInfo ci) {
-    if (disconnectReason == ClientPlayNetworkHandlerAccessor.chatValidationFailedText()) {
-      ci.cancel();
-    }
-  }
-
   @Inject(method = "exceptionCaught", at = @At("HEAD"), cancellable = true)
   private void exceptionCaught (ChannelHandlerContext context, Throwable ex, CallbackInfo ci) {
     ci.cancel();
@@ -60,7 +53,7 @@ public class ClientConnectionMixin {
     } else if (packet instanceof PlaySoundS2CPacket t_packet) {
       final SoundEvent soundEvent = t_packet.getSound().value();
 
-      final Identifier sound = soundEvent.getId();
+      final Identifier sound = soundEvent.id();
 
       final Matcher matcher = CUSTOM_PITCH_PATTERN.matcher(sound.getPath());
 
diff --git a/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientPlayNetworkHandlerAccessor.java b/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientPlayNetworkHandlerAccessor.java
index c01f236..6ef7342 100644
--- a/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientPlayNetworkHandlerAccessor.java
+++ b/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientPlayNetworkHandlerAccessor.java
@@ -1,11 +1,8 @@
 package land.chipmunk.chipmunkmod.mixin;
 
 import net.minecraft.client.network.PlayerListEntry;
-import net.minecraft.network.ClientConnection;
-import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.gen.Accessor;
-import net.minecraft.text.Text;
 
 import java.util.Map;
 import java.util.Set;
@@ -13,9 +10,6 @@ import java.util.UUID;
 
 @Mixin(net.minecraft.client.network.ClientPlayNetworkHandler.class)
 public interface ClientPlayNetworkHandlerAccessor {
-  @Accessor("CHAT_VALIDATION_FAILED_TEXT")
-  static Text chatValidationFailedText () { throw new AssertionError(); }
-
   @Accessor("playerListEntries")
   Map<UUID, PlayerListEntry> playerListEntries();
 
diff --git a/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientPlayNetworkHandlerMixin.java
index 461c713..9145dd8 100644
--- a/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientPlayNetworkHandlerMixin.java
+++ b/src/main/java/land/chipmunk/chipmunkmod/mixin/ClientPlayNetworkHandlerMixin.java
@@ -5,9 +5,6 @@ import land.chipmunk.chipmunkmod.command.CommandManager;
 import land.chipmunk.chipmunkmod.listeners.Listener;
 import land.chipmunk.chipmunkmod.listeners.ListenerManager;
 import land.chipmunk.chipmunkmod.modules.*;
-import net.kyori.adventure.platform.fabric.FabricAudiences;
-import net.kyori.adventure.text.Component;
-import net.kyori.adventure.text.TextComponent;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.command.CommandRegistryAccess;
 import net.minecraft.network.encryption.NetworkEncryptionUtils;
diff --git a/src/main/java/land/chipmunk/chipmunkmod/modules/CustomChat.java b/src/main/java/land/chipmunk/chipmunkmod/modules/CustomChat.java
index 1451a9a..bbeed8d 100644
--- a/src/main/java/land/chipmunk/chipmunkmod/modules/CustomChat.java
+++ b/src/main/java/land/chipmunk/chipmunkmod/modules/CustomChat.java
@@ -88,7 +88,7 @@ public class CustomChat {
         try {
             final Matcher racistMatcher = RACIST_PATTERN.matcher(message);
             if (racistMatcher.matches()) {
-                player.sendMessage(Text.literal("racism bad"));
+                player.sendMessage(Text.literal("racism bad"), false);
 
                 return;
             }
diff --git a/src/main/java/land/chipmunk/chipmunkmod/modules/Players.java b/src/main/java/land/chipmunk/chipmunkmod/modules/Players.java
deleted file mode 100644
index 39591aa..0000000
--- a/src/main/java/land/chipmunk/chipmunkmod/modules/Players.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package land.chipmunk.chipmunkmod.modules;
-
-import com.mojang.brigadier.Message;
-import com.mojang.brigadier.suggestion.Suggestion;
-import com.mojang.brigadier.suggestion.Suggestions;
-import land.chipmunk.chipmunkmod.data.MutablePlayerListEntry;
-import land.chipmunk.chipmunkmod.listeners.Listener;
-import land.chipmunk.chipmunkmod.listeners.ListenerManager;
-import land.chipmunk.chipmunkmod.mixin.ClientPlayNetworkHandlerAccessor;
-import land.chipmunk.chipmunkmod.mixin.PlayerListEntryAccessor;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.network.PlayerListEntry;
-import net.minecraft.network.packet.Packet;
-import net.minecraft.network.packet.s2c.play.CommandSuggestionsS2CPacket;
-import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket;
-import net.minecraft.network.packet.s2c.play.PlayerRemoveS2CPacket;
-import net.minecraft.text.Text;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.CompletableFuture;
-
-import static land.chipmunk.chipmunkmod.util.ServerUtilities.serverHasCommand;
-
-public class Players extends Listener {
-    public List<MutablePlayerListEntry> list = new ArrayList<>();
-
-    public static Players INSTANCE = new Players(MinecraftClient.getInstance());
-
-    private final MinecraftClient client;
-
-    public Players (MinecraftClient client) {
-        this.client = client;
-        ListenerManager.addListener(this);
-
-        TabComplete.INSTANCE.init();
-    }
-
-    public void init () {}
-
-    @Override
-    public void packetReceived (Packet<?> packet) {
-        if (packet instanceof PlayerListS2CPacket) packetReceived((PlayerListS2CPacket) packet);
-        else if (packet instanceof PlayerRemoveS2CPacket) packetReceived((PlayerRemoveS2CPacket) packet);
-    }
-
-    public void packetReceived (PlayerListS2CPacket packet) {
-        try {
-            for (PlayerListS2CPacket.Action action : packet.getActions()) {
-                for (PlayerListS2CPacket.Entry entry : packet.getEntries()) {
-                    if (action == PlayerListS2CPacket.Action.ADD_PLAYER) addPlayer(entry);
-//                else if (action == PlayerListS2CPacket.Action.INITIALIZE_CHAT) initializeChat(entry);
-                    else if (action == PlayerListS2CPacket.Action.UPDATE_GAME_MODE) updateGamemode(entry);
-//                else if (action == PlayerListS2CPacket.Action.UPDATE_LISTED) updateListed(entry);
-                    else if (action == PlayerListS2CPacket.Action.UPDATE_LATENCY) updateLatency(entry);
-                    else if (action == PlayerListS2CPacket.Action.UPDATE_DISPLAY_NAME) updateDisplayName(entry);
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void packetReceived (PlayerRemoveS2CPacket packet) {
-        try {
-            for (UUID uuid : packet.profileIds()) {
-                removePlayer(uuid);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public final MutablePlayerListEntry getEntry (UUID uuid) {
-        try {
-            for (MutablePlayerListEntry candidate : list) {
-                if (candidate.profile.getId().equals(uuid)) {
-                    return candidate;
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return null;
-    }
-
-    public final MutablePlayerListEntry getEntry (String username) {
-        for (MutablePlayerListEntry candidate : list) {
-            if (candidate.profile.getName().equals(username)) {
-                return candidate;
-            }
-        }
-
-        return null;
-    }
-
-    public final MutablePlayerListEntry getEntry (Text displayName) {
-        for (MutablePlayerListEntry candidate : list) {
-            if (candidate.displayName != null && candidate.displayName.equals(displayName)) {
-                return candidate;
-            }
-        }
-
-        return null;
-    }
-
-    private MutablePlayerListEntry getEntry (PlayerListS2CPacket.Entry other) {
-        return getEntry(other.profileId());
-    }
-
-    private void addPlayer (PlayerListS2CPacket.Entry newEntry) {
-        try {
-            final MutablePlayerListEntry duplicate = getEntry(newEntry);
-            if (duplicate != null) {
-                removeFromPlayerList(duplicate.profile.getId());
-                list.remove(duplicate);
-            }
-
-            final MutablePlayerListEntry entry = new MutablePlayerListEntry(newEntry);
-
-            list.add(entry);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private void updateGamemode (PlayerListS2CPacket.Entry newEntry) {
-        try {
-            final MutablePlayerListEntry target = getEntry(newEntry);
-            if (target == null) return;
-
-            target.gamemode = newEntry.gameMode();
-
-            final ClientPlayNetworkHandlerAccessor accessor = ((ClientPlayNetworkHandlerAccessor) MinecraftClient.getInstance().getNetworkHandler());
-
-            if (accessor == null) return;
-
-            final PlayerListEntryAccessor entryAccessor = (PlayerListEntryAccessor) accessor.playerListEntries().get(newEntry.profileId());
-
-            entryAccessor.setGameMode(newEntry.gameMode());
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private void updateLatency (PlayerListS2CPacket.Entry newEntry) {
-        final MutablePlayerListEntry target = getEntry(newEntry);
-        if (target == null) return;
-
-        target.latency = newEntry.latency();
-
-        final ClientPlayNetworkHandlerAccessor accessor = ((ClientPlayNetworkHandlerAccessor) MinecraftClient.getInstance().getNetworkHandler());
-
-        if (accessor == null) return;
-
-        final PlayerListEntryAccessor entryAccessor = (PlayerListEntryAccessor) accessor.playerListEntries().get(newEntry.profileId());
-
-        entryAccessor.setLatency(newEntry.latency());
-    }
-
-    private void updateDisplayName (PlayerListS2CPacket.Entry newEntry) {
-        final MutablePlayerListEntry target = getEntry(newEntry);
-        if (target == null) return;
-
-        target.displayName = newEntry.displayName();
-
-        final ClientPlayNetworkHandlerAccessor accessor = ((ClientPlayNetworkHandlerAccessor) MinecraftClient.getInstance().getNetworkHandler());
-
-        if (accessor == null) return;
-
-        accessor.playerListEntries().get(newEntry.profileId()).setDisplayName(newEntry.displayName());
-    }
-
-    private void removePlayer (UUID uuid) {
-        try {
-            final MutablePlayerListEntry target = getEntry(uuid);
-            if (target == null) return;
-
-            if (!serverHasCommand("scoreboard")) {
-                removeFromPlayerList(uuid);
-                return;
-            }
-
-            final CompletableFuture<CommandSuggestionsS2CPacket> future = TabComplete.INSTANCE.complete("/scoreboard players add ");
-
-            if (future == null) return;
-
-            future.thenApply(packet -> {
-                final Suggestions matches = packet.getSuggestions();
-                final String username = target.profile.getName();
-
-                for (int i = 0; i < matches.getList().size(); i++) {
-                    final Suggestion suggestion = matches.getList().get(i);
-
-                    final Message tooltip = suggestion.getTooltip();
-                    if (tooltip != null || !suggestion.getText().equals(username)) continue;
-
-                    return true;
-                }
-
-                list.remove(target);
-
-                removeFromPlayerList(uuid);
-
-                for (MutablePlayerListEntry entry : list) {
-                    if (!entry.profile.getId().equals(uuid)) continue;
-
-                    addToPlayerList(new PlayerListEntry(entry.profile, false));
-                }
-
-                return true;
-            });
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void addToPlayerList (PlayerListEntry entry) {
-        client.getSocialInteractionsManager().setPlayerOnline(entry);
-
-        final ClientPlayNetworkHandlerAccessor accessor = ((ClientPlayNetworkHandlerAccessor) MinecraftClient.getInstance().getNetworkHandler());
-
-        if (accessor == null) return;
-
-        accessor.playerListEntries().put(entry.getProfile().getId(), entry);
-
-        accessor.listedPlayerListEntries().add(entry);
-    }
-
-    private void removeFromPlayerList (UUID uuid) {
-        client.getSocialInteractionsManager().setPlayerOffline(uuid);
-
-        final ClientPlayNetworkHandlerAccessor accessor = ((ClientPlayNetworkHandlerAccessor) MinecraftClient.getInstance().getNetworkHandler());
-
-        if (accessor == null) return;
-
-        final PlayerListEntry playerListEntry = accessor.playerListEntries().remove(uuid);
-
-        if (playerListEntry != null) {
-            accessor.listedPlayerListEntries().remove(playerListEntry);
-        }
-    }
-}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index e49dbe2..d0078f8 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -30,9 +30,9 @@
   ],
 
   "depends": {
-    "fabricloader": ">=0.16.5",
+    "fabricloader": ">=0.16.9",
     "fabric-api": "*",
-    "minecraft": ">=1.21",
+    "minecraft": "1.21.4",
     "java": ">=21"
   }
 }