From c383c58a0ddbf88b7bb64cd7ed700cd5b6e8ae2b Mon Sep 17 00:00:00 2001 From: Caedis Date: Mon, 10 Mar 2025 01:20:09 -0500 Subject: [PATCH] Fix non gt item covers not working when sneaking (#4045) --- src/main/java/gregtech/mixin/Mixin.java | 5 ++++ .../mixins/early/minecraft/ItemMixin.java | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/mixin/java/gregtech/mixin/mixins/early/minecraft/ItemMixin.java diff --git a/src/main/java/gregtech/mixin/Mixin.java b/src/main/java/gregtech/mixin/Mixin.java index ecd7a7e076f..70b6f29fb9a 100644 --- a/src/main/java/gregtech/mixin/Mixin.java +++ b/src/main/java/gregtech/mixin/Mixin.java @@ -61,6 +61,11 @@ public enum Mixin { .setApplyIf(() -> true) .setPhase(Phase.EARLY) .setSide(Side.BOTH)), + ItemMixinCoverFix(new Builder("Allow cover items to bypass sneak checks").addMixinClasses("minecraft.ItemMixin") + .addTargetedMod(VANILLA) + .setApplyIf(() -> true) + .setPhase(Phase.EARLY) + .setSide(Side.BOTH)), VanillaToolChanges( new Builder("Changes wooden tools to be a little faster").addMixinClasses("minecraft.ItemToolMaterialMixin") diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ItemMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ItemMixin.java new file mode 100644 index 00000000000..d2ba807a4cf --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ItemMixin.java @@ -0,0 +1,26 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.sugar.Local; + +import gregtech.api.covers.CoverRegistry; + +@Mixin(Item.class) +public class ItemMixin { + + @ModifyReturnValue(method = "doesSneakBypassUse", at = @At("RETURN"), remap = false) + private boolean gt5u$checkCoverShift(boolean original, @Local(argsOnly = true) EntityPlayer player) { + // player.getHeldItem() has already been null checked + if (CoverRegistry.isCover(player.getHeldItem())) { + return true; + } + return original; + } + +}