/* * Decompiled with CFR 0.152. */ package com.vinlanx.explosionoverhaul.mixin; import com.vinlanx.explosionoverhaul.client.LowPassConcussionEffect; import com.vinlanx.explosionoverhaul.client.SoundEngineAudioQueue; import com.vinlanx.explosionoverhaul.mixin.ChannelAccessor; import net.minecraft.client.sounds.ChannelAccess; import net.minecraft.client.sounds.SoundEngine; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(value={SoundEngine.class}) public class SoundEngineAudioQueueMixin { @Shadow @Final private ChannelAccess f_120224_; @Unique private boolean explosionoverhaul$wasActive = false; @Inject(method={"tick(Z)V"}, at={@At(value="HEAD")}) private void explosionoverhaul$drainAudioQueue(boolean paused, CallbackInfo ci) { boolean active = LowPassConcussionEffect.isActive(); boolean wasActive = this.explosionoverhaul$wasActive; this.f_120224_.m_120137_(channels -> { SoundEngineAudioQueue.drainNow(); if (active) { channels.forEach(channel -> LowPassConcussionEffect.attachFilterToSource(((ChannelAccessor)channel).explosionoverhaul$getSource())); } else if (wasActive) { channels.forEach(channel -> LowPassConcussionEffect.detachFilterFromSource(((ChannelAccessor)channel).explosionoverhaul$getSource())); } }); this.explosionoverhaul$wasActive = active; } }