From 93b1a8115897e862b100e1dd735d7019b5887bea Mon Sep 17 00:00:00 2001 From: Frederik van der Els Date: Wed, 31 Jan 2024 00:35:10 +0100 Subject: [PATCH] Add the cclearchat command --- .../clientcommands/ClientCommands.java | 1 + .../command/ClearChatCommand.java | 26 +++++++++++++++++++ .../clientcommands/mixin/MixinChatHud.java | 8 ++++++ 3 files changed, 35 insertions(+) create mode 100644 src/main/java/net/earthcomputer/clientcommands/command/ClearChatCommand.java diff --git a/src/main/java/net/earthcomputer/clientcommands/ClientCommands.java b/src/main/java/net/earthcomputer/clientcommands/ClientCommands.java index e6e5fb33..5c0b9be5 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 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 00000000..44820968 --- /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 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 8322e832..4a1cb4ec 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 instance, Collection collection) { + return false; + } }