From 28a6e1be0ecff030fecfff308773b4bab2ed5649 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Wed, 28 Aug 2024 00:29:00 +0200 Subject: [PATCH 1/2] fix case commands + forge not checking for a `/` before running commands (#413) --- .../hodgepodge/config/FixesConfig.java | 10 ++++ .../mitchej123/hodgepodge/mixins/Mixins.java | 10 ++++ .../MixinClientCommandHandler_CommandFix.java | 36 ++++++++++++ .../MixinCommandHandler_CommandFix.java | 58 +++++++++++++++++++ 4 files changed, 114 insertions(+) create mode 100644 src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinClientCommandHandler_CommandFix.java create mode 100644 src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinCommandHandler_CommandFix.java diff --git a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java index daa18b72..e9c49054 100644 --- a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java +++ b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java @@ -342,6 +342,16 @@ public class FixesConfig { @Config.RequiresMcRestart public static boolean earlyChunkTileCoordinateCheckDestructive; + @Config.Comment("Fix forge command handler not checking for a / and also not running commands with any case") + @Config.DefaultBoolean(true) + @Config.RequiresMcRestart + public static boolean fixSlashCommands; + + @Config.Comment("Fix the command handler not allowing you to run commands typed in any case") + @Config.DefaultBoolean(true) + @Config.RequiresMcRestart + public static boolean fixCaseCommands; + // affecting multiple mods @Config.Comment("Remove old/stale/outdated update checks.") diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java index c5dc1804..33bd7211 100644 --- a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java @@ -398,6 +398,16 @@ public enum Mixins { .addMixinClasses("minecraft.MixinMinecraft_FixDuplicateSounds") .setApplyIf(() -> FixesConfig.fixDuplicateSounds)), + FIX_SLASH_COMMAND( + new Builder("Fix forge command handler not checking for a / and also not running commands with any case") + .setPhase(Phase.EARLY).setSide(Side.CLIENT).addTargetedMod(TargetedMod.VANILLA) + .addMixinClasses("minecraft.MixinClientCommandHandler_CommandFix") + .setApplyIf(() -> FixesConfig.fixSlashCommands)), + + FIX_CASE_COMMAND(new Builder("Fix the command handler not allowing you to run commands typed in any case") + .setPhase(Phase.EARLY).setSide(Side.BOTH).addTargetedMod(TargetedMod.VANILLA) + .addMixinClasses("minecraft.MixinCommandHandler_CommandFix").setApplyIf(() -> FixesConfig.fixCaseCommands)), + // Ic2 adjustments IC2_UNPROTECTED_GET_BLOCK_FIX(new Builder("IC2 Kinetic Fix").setPhase(Phase.EARLY).setSide(Side.BOTH) .addMixinClasses("ic2.MixinIc2WaterKinetic").setApplyIf(() -> FixesConfig.fixIc2UnprotectedGetBlock) diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinClientCommandHandler_CommandFix.java b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinClientCommandHandler_CommandFix.java new file mode 100644 index 00000000..3b795065 --- /dev/null +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinClientCommandHandler_CommandFix.java @@ -0,0 +1,36 @@ +package com.mitchej123.hodgepodge.mixins.early.minecraft; + +import java.util.Locale; + +import net.minecraft.command.ICommandSender; +import net.minecraftforge.client.ClientCommandHandler; + +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; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +@Mixin(ClientCommandHandler.class) +public class MixinClientCommandHandler_CommandFix { + + @Inject(method = "executeCommand", at = @At("HEAD"), cancellable = true) + private void hodgepodge$checkSlash(ICommandSender sender, String message, CallbackInfoReturnable cir) { + if (!message.trim().startsWith("/")) { + cir.setReturnValue(0); + } + } + + @ModifyExpressionValue( + method = "executeCommand", + at = @At(value = "INVOKE", target = "Ljava/lang/String;split(Ljava/lang/String;)[Ljava/lang/String;")) + private String[] hodgepodge$caseCommand(String[] original) { + final String s = original[0]; + if (s != null) { + original[0] = s.toLowerCase(Locale.ENGLISH); + } + return original; + } + +} diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinCommandHandler_CommandFix.java b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinCommandHandler_CommandFix.java new file mode 100644 index 00000000..9e26c98e --- /dev/null +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinCommandHandler_CommandFix.java @@ -0,0 +1,58 @@ +package com.mitchej123.hodgepodge.mixins.early.minecraft; + +import java.util.Locale; + +import net.minecraft.command.CommandHandler; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +@Mixin(CommandHandler.class) +public class MixinCommandHandler_CommandFix { + + @ModifyExpressionValue( + method = "executeCommand", + at = @At( + value = "INVOKE", + target = "Ljava/lang/String;split(Ljava/lang/String;)[Ljava/lang/String;", + remap = false)) + private String[] hodgepodge$caseCommand(String[] original) { + final String s = original[0]; + if (s != null) { + original[0] = s.toLowerCase(Locale.ENGLISH); + } + return original; + } + + @ModifyArg( + method = "registerCommand", + index = 0, + at = @At( + value = "INVOKE", + target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + remap = false)) + private Object hodgepodge$caseCommand(Object s) { + if (s instanceof String) { + s = ((String) s).toLowerCase(Locale.ENGLISH); + } + return s; + } + + @ModifyExpressionValue( + method = "getPossibleCommands(Lnet/minecraft/command/ICommandSender;Ljava/lang/String;)Ljava/util/List;", + at = @At( + value = "INVOKE", + target = "Ljava/lang/String;split(Ljava/lang/String;I)[Ljava/lang/String;", + remap = false)) + private String[] hodgepodge$caseCommandTabComplete(String[] original) { + final String s = original[0]; + if (s != null) { + original[0] = s.toLowerCase(Locale.ENGLISH); + } + return original; + } + +} From 380b9dc04ba6c30f16c76408005525ea77fd12ba Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Wed, 28 Aug 2024 22:38:06 +0200 Subject: [PATCH 2/2] update --- dependencies.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index d05f2a72..0d27b869 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -17,16 +17,16 @@ dependencies { compileOnly("com.gtnewhorizons.retrofuturabootstrap:RetroFuturaBootstrap:1.0.2") { transitive = false } transformedMod("com.github.GTNewHorizons:NotEnoughItems:2.6.26-GTNH:dev") // force a more up-to-date NEI version - transformedModCompileOnly("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-435-GTNH") + transformedModCompileOnly("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-440-GTNH") transformedModCompileOnly("com.github.GTNewHorizons:Baubles:1.0.4:dev") // Transitive updates to make runClient17 work transformedModCompileOnly("com.github.GTNewHorizons:ForgeMultipart:1.5.0:dev") - transformedModCompileOnly("com.github.GTNewHorizons:GT5-Unofficial:5.09.49.23:dev") + transformedModCompileOnly("com.github.GTNewHorizons:GT5-Unofficial:5.09.49.33:dev") transformedModCompileOnly("com.github.GTNewHorizons:harvestcraft:1.2.1-GTNH:dev") transformedModCompileOnly("com.github.GTNewHorizons:HungerOverhaul:1.1.0-GTNH:dev") transformedModCompileOnly("com.github.GTNewHorizons:MrTJPCore:1.2.1:dev") // Do not update, fixed afterwards transformedModCompileOnly("com.github.GTNewHorizons:Railcraft:9.15.11:dev") { exclude group: "thaumcraft", module: "Thaumcraft" } - transformedModCompileOnly("com.github.GTNewHorizons:TinkersConstruct:1.12.6-GTNH:dev") + transformedModCompileOnly("com.github.GTNewHorizons:TinkersConstruct:1.12.8-GTNH:dev") transformedModCompileOnly(rfg.deobf("curse.maven:bibliocraft-228027:2423369")) transformedModCompileOnly("curse.maven:biomes-o-plenty-220318:2499612") transformedModCompileOnly("curse.maven:cofh-core-69162:2388751")