diff --git a/dependencies.gradle b/dependencies.gradle index b67bc761..9b3c2c1c 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") diff --git a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java index f95a741a..3bbd20f7 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 f758ad9f..66fbf66b 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)), + ADD_MOD_ITEM_STATS(new Builder("Add stats for modded items").addMixinClasses("fml.MixinGameRegistry") .addTargetedMod(TargetedMod.VANILLA).setApplyIf(() -> TweaksConfig.addModItemStats).setPhase(Phase.EARLY) .setSide(Side.BOTH)), 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; + } + +}