diff --git a/src/main/java/net/earthcomputer/clientcommands/ClientCommands.java b/src/main/java/net/earthcomputer/clientcommands/ClientCommands.java
index e6e5fb338..5c0b9be5b 100644
--- a/src/main/java/net/earthcomputer/clientcommands/ClientCommands.java
+++ b/src/main/java/net/earthcomputer/clientcommands/ClientCommands.java
@@ -160,6 +160,7 @@ public static void registerCommands(CommandDispatcher<FabricClientCommandSource>
         CrackRNGCommand.register(dispatcher);
         WeatherCommand.register(dispatcher);
         PluginsCommand.register(dispatcher);
+        ClearChatCommand.register(dispatcher);
 
         Calendar calendar = Calendar.getInstance();
         boolean registerChatCommand = calendar.get(Calendar.MONTH) == Calendar.APRIL && calendar.get(Calendar.DAY_OF_MONTH) == 1;
diff --git a/src/main/java/net/earthcomputer/clientcommands/command/ClearChatCommand.java b/src/main/java/net/earthcomputer/clientcommands/command/ClearChatCommand.java
new file mode 100644
index 000000000..44820968f
--- /dev/null
+++ b/src/main/java/net/earthcomputer/clientcommands/command/ClearChatCommand.java
@@ -0,0 +1,26 @@
+package net.earthcomputer.clientcommands.command;
+
+import com.mojang.brigadier.Command;
+import com.mojang.brigadier.CommandDispatcher;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+
+import static com.mojang.brigadier.arguments.BoolArgumentType.*;
+import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.*;
+
+public class ClearChatCommand {
+    public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher) {
+        dispatcher.register(literal("cclearchat")
+            .executes(ctx -> clearChat(ctx.getSource()))
+            .then(argument("clearHistory", bool())
+                .executes(ctx -> clearChat(ctx.getSource(), getBool(ctx, "clearHistory")))));
+    }
+
+    private static int clearChat(FabricClientCommandSource source) {
+        return clearChat(source, false);
+    }
+
+    private static int clearChat(FabricClientCommandSource source, boolean clearHistory) {
+        source.getClient().inGameHud.getChatHud().clear(clearHistory);
+        return Command.SINGLE_SUCCESS;
+    }
+}
diff --git a/src/main/java/net/earthcomputer/clientcommands/mixin/MixinChatHud.java b/src/main/java/net/earthcomputer/clientcommands/mixin/MixinChatHud.java
index 8322e8325..4a1cb4ec5 100644
--- a/src/main/java/net/earthcomputer/clientcommands/mixin/MixinChatHud.java
+++ b/src/main/java/net/earthcomputer/clientcommands/mixin/MixinChatHud.java
@@ -12,16 +12,19 @@
 import net.minecraft.text.HoverEvent;
 import net.minecraft.text.Text;
 import net.minecraft.util.Formatting;
+import net.minecraft.util.collection.ArrayListDeque;
 import org.spongepowered.asm.mixin.Final;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
 import org.spongepowered.asm.mixin.Unique;
 import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.Redirect;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 import java.security.PrivateKey;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Optional;
 
 @Mixin(ChatHud.class)
@@ -114,4 +117,9 @@ private static boolean handleC2CPacket(String content) {
         }
         return true;
     }
+
+    @Redirect(method = "clear", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/collection/ArrayListDeque;addAll(Ljava/util/Collection;)Z"))
+    private boolean preventAddAll(ArrayListDeque<String> instance, Collection<String> collection) {
+        return false;
+    }
 }