diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/rumble/useitem/ClientPacketListenerMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/rumble/useitem/ClientPacketListenerMixin.java new file mode 100644 index 0000000..bf7b59d --- /dev/null +++ b/src/main/java/dev/isxander/controlify/mixins/feature/rumble/useitem/ClientPacketListenerMixin.java @@ -0,0 +1,26 @@ +package dev.isxander.controlify.mixins.feature.rumble.useitem; + +import dev.isxander.controlify.rumble.ContinuousRumbleEffect; +import dev.isxander.controlify.rumble.effects.UseItemEffectHolder; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.protocol.game.ClientboundRespawnPacket; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +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; + +@Mixin(ClientPacketListener.class) +public class ClientPacketListenerMixin { + @Shadow @Final private Minecraft minecraft; + + @Inject(method = "handleRespawn", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;player:Lnet/minecraft/client/player/LocalPlayer;", opcode = Opcodes.PUTFIELD, shift = At.Shift.BEFORE)) + private void clearUseItemRumble(ClientboundRespawnPacket packet, CallbackInfo ci) { + ContinuousRumbleEffect effect = ((UseItemEffectHolder) minecraft.player).controlify$getUseItemEffect(); + if (effect != null) effect.stop(); + } + +} diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/rumble/useitem/LocalPlayerMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/rumble/useitem/LocalPlayerMixin.java index 78fcc7b..8ad27a2 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/rumble/useitem/LocalPlayerMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/rumble/useitem/LocalPlayerMixin.java @@ -1,21 +1,20 @@ package dev.isxander.controlify.mixins.feature.rumble.useitem; import dev.isxander.controlify.api.ControlifyApi; -import dev.isxander.controlify.rumble.BasicRumbleEffect; -import dev.isxander.controlify.rumble.ContinuousRumbleEffect; -import dev.isxander.controlify.rumble.RumbleSource; -import dev.isxander.controlify.rumble.RumbleState; +import dev.isxander.controlify.rumble.*; +import dev.isxander.controlify.rumble.effects.UseItemEffectHolder; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.BowItem; import net.minecraft.world.item.CrossbowItem; import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(LocalPlayer.class) -public abstract class LocalPlayerMixin extends LivingEntityMixin { +public abstract class LocalPlayerMixin extends LivingEntityMixin implements UseItemEffectHolder { @Unique private ContinuousRumbleEffect useItemRumble; @Override @@ -74,4 +73,9 @@ public abstract class LocalPlayerMixin extends LivingEntityMixin { useItemRumble = effect; }); } + + @Override + public @Nullable ContinuousRumbleEffect controlify$getUseItemEffect() { + return useItemRumble; + } } diff --git a/src/main/java/dev/isxander/controlify/rumble/effects/UseItemEffectHolder.java b/src/main/java/dev/isxander/controlify/rumble/effects/UseItemEffectHolder.java new file mode 100644 index 0000000..2b8daeb --- /dev/null +++ b/src/main/java/dev/isxander/controlify/rumble/effects/UseItemEffectHolder.java @@ -0,0 +1,8 @@ +package dev.isxander.controlify.rumble.effects; + +import dev.isxander.controlify.rumble.ContinuousRumbleEffect; +import org.jetbrains.annotations.Nullable; + +public interface UseItemEffectHolder { + @Nullable ContinuousRumbleEffect controlify$getUseItemEffect(); +} diff --git a/src/main/resources/controlify.mixins.json b/src/main/resources/controlify.mixins.json index cafcbc7..39bcd8b 100644 --- a/src/main/resources/controlify.mixins.json +++ b/src/main/resources/controlify.mixins.json @@ -54,6 +54,7 @@ "feature.rumble.itembreak.LivingEntityMixin", "feature.rumble.itembreak.LocalPlayerMixin", "feature.rumble.levelevents.LevelRendererMixin", + "feature.rumble.useitem.ClientPacketListenerMixin", "feature.rumble.useitem.LivingEntityMixin", "feature.rumble.useitem.LocalPlayerMixin", "feature.screenop.ContainerEventHandlerMixin",