diff --git a/src/main/java/land/chipmunk/chipmunkmod/command/CommandManager.java b/src/main/java/land/chipmunk/chipmunkmod/command/CommandManager.java
index 6e438f8..5861999 100644
--- a/src/main/java/land/chipmunk/chipmunkmod/command/CommandManager.java
+++ b/src/main/java/land/chipmunk/chipmunkmod/command/CommandManager.java
@@ -38,6 +38,7 @@ public class CommandManager {
     SayCommand.register(this.dispatcher);
     AutoSkinCommand.register(this.dispatcher);
     ReloadConfigCommand.register(this.dispatcher);
+    SelfCareCommand.register(this.dispatcher);
   }
 
   public void executeCommand (String command) {
diff --git a/src/main/java/land/chipmunk/chipmunkmod/commands/SelfCareCommand.java b/src/main/java/land/chipmunk/chipmunkmod/commands/SelfCareCommand.java
new file mode 100644
index 0000000..d80e00f
--- /dev/null
+++ b/src/main/java/land/chipmunk/chipmunkmod/commands/SelfCareCommand.java
@@ -0,0 +1,65 @@
+package land.chipmunk.chipmunkmod.commands;
+
+import com.mojang.brigadier.Command;
+import com.mojang.brigadier.CommandDispatcher;
+import com.mojang.brigadier.context.CommandContext;
+import land.chipmunk.chipmunkmod.modules.SelfCare;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.minecraft.text.Text;
+
+import static com.mojang.brigadier.arguments.BoolArgumentType.bool;
+import static com.mojang.brigadier.arguments.BoolArgumentType.getBool;
+import static land.chipmunk.chipmunkmod.command.CommandManager.argument;
+import static land.chipmunk.chipmunkmod.command.CommandManager.literal;
+
+public class SelfCareCommand {
+    public static void register (CommandDispatcher<FabricClientCommandSource> dispatcher) {
+        dispatcher.register(
+                literal("selfcare")
+                        .then(
+                                literal("op")
+                                        .then(
+                                                argument("boolean", bool())
+                                                        .executes(m -> setSelfCare(m, "op"))
+                                        )
+                        )
+                        .then(
+                                literal("gamemode")
+                                        .then(
+                                                argument("boolean", bool())
+                                                        .executes(m -> setSelfCare(m, "gamemode"))
+                                        )
+                        )
+                        .then(
+                                literal("cspy")
+                                        .then(
+                                                argument("boolean", bool())
+                                                        .executes(m -> setSelfCare(m, "cspy"))
+                                        )
+                        )
+        );
+    }
+
+    // setSelfCare is probably not a good name for this
+    public static int setSelfCare (CommandContext<FabricClientCommandSource> context, String type) {
+        final FabricClientCommandSource source = context.getSource();
+        final boolean bool = getBool(context, "boolean");
+
+        switch (type) {
+            case "op" -> {
+                SelfCare.INSTANCE.opEnabled = bool;
+                source.sendFeedback(Text.literal("The op self care is now " + (bool ? "enabled" : "disabled")));
+            }
+            case "gamemode" -> {
+                SelfCare.INSTANCE.gamemodeEnabled = bool;
+                source.sendFeedback(Text.literal("The gamemode self care is now " + (bool ? "enabled" : "disabled")));
+            }
+            case "cspy" -> {
+                SelfCare.INSTANCE.cspyEnabled = bool;
+                source.sendFeedback(Text.literal("The CommandSpy self care is now " + (bool ? "enabled" : "disabled")));
+            }
+        }
+
+        return Command.SINGLE_SUCCESS;
+    }
+}
diff --git a/src/main/java/land/chipmunk/chipmunkmod/mixin/SharedConstantsMixin.java b/src/main/java/land/chipmunk/chipmunkmod/mixin/SharedConstantsMixin.java
new file mode 100644
index 0000000..ac5e810
--- /dev/null
+++ b/src/main/java/land/chipmunk/chipmunkmod/mixin/SharedConstantsMixin.java
@@ -0,0 +1,16 @@
+package land.chipmunk.chipmunkmod.mixin;
+
+import net.minecraft.SharedConstants;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+@Mixin(SharedConstants.class)
+public class SharedConstantsMixin {
+    @Inject(method = "isValidChar", at = @At("HEAD"), cancellable = true)
+    private static void isValidChar (char chr, CallbackInfoReturnable<Boolean> cir) {
+        cir.setReturnValue(chr >= ' ' && chr != '\u007f');
+        cir.cancel();
+    }
+}
diff --git a/src/main/resources/chipmunkmod.mixins.json b/src/main/resources/chipmunkmod.mixins.json
index 063bc82..53d3953 100644
--- a/src/main/resources/chipmunkmod.mixins.json
+++ b/src/main/resources/chipmunkmod.mixins.json
@@ -20,7 +20,8 @@
     "TextMixin",
     "ClientConnectionInvoker",
     "ClientConnectionAccessor",
-    "PlayerListEntryAccessor"
+    "PlayerListEntryAccessor",
+    "SharedConstantsMixin"
   ],
   "injectors": {
     "defaultRequire": 1