forked from Clones/Controlify
🐛 Fix use item rumble getting stuck on death/respawn
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
@ -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",
|
||||
|
Reference in New Issue
Block a user