From b4dc58edbdb435067fcff85d972a3594e83809e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 28 Jan 2022 02:40:24 +0100 Subject: [PATCH] Fix computer running sound not stopping when stopped before initial delay expired. --- .../cil/oc2/client/audio/LoopingBlockEntitySound.java | 10 ++++++++++ .../li/cil/oc2/client/audio/LoopingSoundManager.java | 7 ++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/li/cil/oc2/client/audio/LoopingBlockEntitySound.java b/src/main/java/li/cil/oc2/client/audio/LoopingBlockEntitySound.java index aaeee7c4..5ffde08d 100644 --- a/src/main/java/li/cil/oc2/client/audio/LoopingBlockEntitySound.java +++ b/src/main/java/li/cil/oc2/client/audio/LoopingBlockEntitySound.java @@ -18,6 +18,7 @@ public final class LoopingBlockEntitySound extends AbstractTickableSoundInstance /////////////////////////////////////////////////////////////////// private final BlockEntity blockEntity; + private boolean isCanceled; /////////////////////////////////////////////////////////////////// @@ -36,6 +37,10 @@ public final class LoopingBlockEntitySound extends AbstractTickableSoundInstance /////////////////////////////////////////////////////////////////// + public void cancel() { + isCanceled = true; + } + @Override public void tick() { volume = Mth.clamp(volume + FADE_IN_PER_TICK, 0, 1); @@ -44,4 +49,9 @@ public final class LoopingBlockEntitySound extends AbstractTickableSoundInstance stop(); } } + + @Override + public boolean canPlaySound() { + return !isCanceled; + } } diff --git a/src/main/java/li/cil/oc2/client/audio/LoopingSoundManager.java b/src/main/java/li/cil/oc2/client/audio/LoopingSoundManager.java index b3d601b2..d1d169f7 100644 --- a/src/main/java/li/cil/oc2/client/audio/LoopingSoundManager.java +++ b/src/main/java/li/cil/oc2/client/audio/LoopingSoundManager.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import java.util.WeakHashMap; public final class LoopingSoundManager { - private static final WeakHashMap BLOCK_ENTITY_SOUNDS = new WeakHashMap<>(); + private static final WeakHashMap BLOCK_ENTITY_SOUNDS = new WeakHashMap<>(); /////////////////////////////////////////////////////////////////// @@ -21,14 +21,15 @@ public final class LoopingSoundManager { } public static void stop(final BlockEntity blockEntity) { - final TickableSoundInstance instance = BLOCK_ENTITY_SOUNDS.remove(blockEntity); + final LoopingBlockEntitySound instance = BLOCK_ENTITY_SOUNDS.remove(blockEntity); if (instance != null) { + instance.cancel(); Minecraft.getInstance().getSoundManager().stop(instance); } } public static boolean isPlaying(final BlockEntity blockEntity) { - final TickableSoundInstance instance = BLOCK_ENTITY_SOUNDS.get(blockEntity); + final LoopingBlockEntitySound instance = BLOCK_ENTITY_SOUNDS.get(blockEntity); return instance != null && !instance.isStopped(); } }