From 3a450ee1759b3df38d698daabdfafd0447d8223a Mon Sep 17 00:00:00 2001 From: Trumeet Date: Wed, 27 Jul 2022 11:04:45 -0700 Subject: feat(mod): enforce cmd response ordering and termination --- .../java/moe/ymc/acron/mixin/CommandManagerMixin.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'mod/src/main/java/moe/ymc/acron/mixin') diff --git a/mod/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java b/mod/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java index 9aaed2e..ccde6f0 100644 --- a/mod/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java +++ b/mod/src/main/java/moe/ymc/acron/mixin/CommandManagerMixin.java @@ -1,6 +1,7 @@ package moe.ymc.acron.mixin; import com.mojang.brigadier.CommandDispatcher; +import moe.ymc.acron.cmd.CmdSrc; import moe.ymc.acron.config.ConfigReloadCmd; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; @@ -12,6 +13,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import static net.minecraft.server.command.CommandManager.literal; @@ -35,4 +37,17 @@ public abstract class CommandManagerMixin { ) ); } + + @Inject(at = @At(value = "RETURN"), + method = "execute") + // Unfortunately we cannot inject into the catch blocks, so + // a cursed approach would be always sending the result if we + // haven't. + public void execute(ServerCommandSource commandSource, + String command, + CallbackInfoReturnable cir) { + if (commandSource instanceof CmdSrc src) { + src.sendResultIfNot(); + } + } } -- cgit v1.2.3