1
0
forked from Clones/Controlify

🐛 Fix use item rumble getting stuck on death/respawn

This commit is contained in:
isXander
2023-08-19 20:03:34 +01:00
parent 8b2dc970cb
commit c8e100b2bc
4 changed files with 44 additions and 5 deletions

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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();
}

View File

@ -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",