diff --git a/src/main/java/org/violetmoon/quark/content/client/module/WoolShutsUpMinecartsModule.java b/src/main/java/org/violetmoon/quark/content/client/module/WoolShutsUpMinecartsModule.java index a4e5e5af59..0b38bec48e 100644 --- a/src/main/java/org/violetmoon/quark/content/client/module/WoolShutsUpMinecartsModule.java +++ b/src/main/java/org/violetmoon/quark/content/client/module/WoolShutsUpMinecartsModule.java @@ -5,7 +5,7 @@ import net.minecraft.tags.TagKey; import net.minecraft.world.entity.vehicle.AbstractMinecart; import net.minecraft.world.item.Item; - +import net.minecraft.world.phys.AABB; import org.violetmoon.zeta.event.bus.LoadEvent; import org.violetmoon.zeta.event.load.ZConfigChanged; import org.violetmoon.zeta.module.ZetaLoadModule; @@ -26,7 +26,12 @@ public final void configChanged(ZConfigChanged event) { } public static boolean canPlay(AbstractMinecart cart) { - return !staticEnabled || !cart.level().getBlockState(cart.blockPosition().below()).is(BlockTags.DAMPENS_VIBRATIONS); + if (!staticEnabled) + return true; + + AABB bounds = cart.getBoundingBox(); + bounds = bounds.move(0, bounds.minY - bounds.maxY, 0); + return cart.level().getBlockStates(bounds).noneMatch((it) -> it.is(BlockTags.DAMPENS_VIBRATIONS)); } } diff --git a/src/main/java/org/violetmoon/quark/mixin/mixins/client/MinecartSoundInstanceMixin.java b/src/main/java/org/violetmoon/quark/mixin/mixins/client/MinecartSoundInstanceMixin.java index 2f128a1b42..931926358a 100644 --- a/src/main/java/org/violetmoon/quark/mixin/mixins/client/MinecartSoundInstanceMixin.java +++ b/src/main/java/org/violetmoon/quark/mixin/mixins/client/MinecartSoundInstanceMixin.java @@ -1,27 +1,22 @@ package org.violetmoon.quark.mixin.mixins.client; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.resources.sounds.MinecartSoundInstance; import net.minecraft.world.entity.vehicle.AbstractMinecart; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Final; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.violetmoon.quark.content.client.module.WoolShutsUpMinecartsModule; @Mixin(MinecartSoundInstance.class) public class MinecartSoundInstanceMixin { - @Shadow - @Final - private AbstractMinecart minecart; - - @ModifyExpressionValue(method = "tick()V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/resources/sounds/MinecartSoundInstance;volume:F", opcode = Opcodes.PUTFIELD)) - public float muteIfOnWool(float volumeToSet) { - if (volumeToSet > 0 && !WoolShutsUpMinecartsModule.canPlay(minecart)) - return 0; - return volumeToSet; + @WrapOperation(method = "tick()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/vehicle/AbstractMinecart;getDeltaMovement()Lnet/minecraft/world/phys/Vec3;")) + public Vec3 pretendThereIsNoMovementIfMuted(AbstractMinecart minecart, Operation original) { + if (!WoolShutsUpMinecartsModule.canPlay(minecart)) + return Vec3.ZERO; + return original.call(minecart); } }