diff --git a/src/main/java/com/areanimika/areanimikahax/mixin/LightningEntityMixin.java b/src/main/java/com/areanimika/areanimikahax/mixin/LightningEntityMixin.java index 8074d45..c349589 100644 --- a/src/main/java/com/areanimika/areanimikahax/mixin/LightningEntityMixin.java +++ b/src/main/java/com/areanimika/areanimikahax/mixin/LightningEntityMixin.java @@ -3,12 +3,21 @@ import com.areanimika.areanimikahax.mixinterface.ILightningEntity; import meteordevelopment.meteorclient.utils.render.color.Color; import net.minecraft.entity.LightningEntity; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; +import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(LightningEntity.class) -public class LightningEntityMixin implements ILightningEntity { +public abstract class LightningEntityMixin implements ILightningEntity { @Unique private Color color = null; + @Unique private double thunderVolume = 10000; + @Unique private double impactVolume = 2; + @Unique private SoundCategory soundCategory = SoundCategory.WEATHER; @Override public Color ama$getColorOverride() { @@ -19,4 +28,42 @@ public class LightningEntityMixin implements ILightningEntity { public void ama$setColor(Color color) { this.color = color; } + + @Override + public double ama$getThunderVolume() { + return thunderVolume; + } + + @Override + public void ama$setThunderVolume(double volume) { + this.thunderVolume = volume; + } + + @Override + public double ama$getImpactVolume() { + return impactVolume; + } + + @Override + public void ama$setImpactVolume(double volume) { + this.impactVolume = volume; + } + + @Override public SoundCategory ama$getSoundCategory() { + return soundCategory; + } + + @Override + public void ama$setSoundCategory(SoundCategory soundCategory) { + this.soundCategory = soundCategory; + } + + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;playSound(DDDLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FFZ)V"), method = "tick") + public void onPlaySound(World instance, double x, double y, double z, SoundEvent sound, SoundCategory category, float volume, float pitch, boolean useDistance) { + double playVolume = volume; + if(sound == SoundEvents.ENTITY_LIGHTNING_BOLT_THUNDER) playVolume = ama$getThunderVolume(); + else if (sound == SoundEvents.ENTITY_LIGHTNING_BOLT_IMPACT) playVolume = ama$getImpactVolume(); + + instance.playSound(x, y, z, sound, ama$getSoundCategory(), (float) playVolume, pitch, useDistance); + } } diff --git a/src/main/java/com/areanimika/areanimikahax/mixinterface/ILightningEntity.java b/src/main/java/com/areanimika/areanimikahax/mixinterface/ILightningEntity.java index 6190983..d05314e 100644 --- a/src/main/java/com/areanimika/areanimikahax/mixinterface/ILightningEntity.java +++ b/src/main/java/com/areanimika/areanimikahax/mixinterface/ILightningEntity.java @@ -1,9 +1,22 @@ package com.areanimika.areanimikahax.mixinterface; import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.sound.SoundCategory; public interface ILightningEntity { Color ama$getColorOverride(); void ama$setColor(Color color); + + double ama$getThunderVolume(); + + void ama$setThunderVolume(double volume); + + double ama$getImpactVolume(); + + void ama$setImpactVolume(double volume); + + SoundCategory ama$getSoundCategory(); + + void ama$setSoundCategory(SoundCategory category); } diff --git a/src/main/java/com/areanimika/areanimikahax/modules/KillEffects.java b/src/main/java/com/areanimika/areanimikahax/modules/KillEffects.java index cea38ac..23364eb 100644 --- a/src/main/java/com/areanimika/areanimikahax/modules/KillEffects.java +++ b/src/main/java/com/areanimika/areanimikahax/modules/KillEffects.java @@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.settings.ColorSetting; import meteordevelopment.meteorclient.settings.DoubleSetting; import meteordevelopment.meteorclient.settings.EntityTypeListSetting; +import meteordevelopment.meteorclient.settings.EnumSetting; import meteordevelopment.meteorclient.settings.IntSetting; import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.settings.SettingGroup; @@ -21,6 +22,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.LightningEntity; import net.minecraft.entity.LivingEntity; +import net.minecraft.sound.SoundCategory; import net.minecraft.util.math.Vec3d; import java.util.Set; @@ -125,12 +127,37 @@ public class KillEffects extends Module { ); private final Setting lightningColor = sgLightning.add(new ColorSetting.Builder() - .name("lightning-enabled") + .name("lightning-color") .description("Color of the lightning.") .defaultValue(new SettingColor(170, 0, 0, 255 * 0.3f)) .visible(lightningEnabled::get) .build() ); + + private final Setting lightningImpactVolume = sgLightning.add(new DoubleSetting.Builder() + .name("lightning-volume-impact") + .defaultValue(2) + .visible(lightningEnabled::get) + .noSlider() + .build() + ); + + private final Setting lightningThunderVolume = sgLightning.add(new DoubleSetting.Builder() + .name("lightning-volume-thunder") + .defaultValue(10000) + .visible(lightningEnabled::get) + .noSlider() + .build() + ); + + private final Setting lightningSoundCategory = sgLightning.add(new EnumSetting.Builder() + .name("lightning-sound-category") + .description("Changes what sound settings slider affects the lightning sounds.") + .defaultValue(SoundCategory.MASTER) + .visible(lightningEnabled::get) + .build() + ); + /* Other Basic Effects */ private final SettingGroup sgEffects = settings.createGroup("Basic Effects"); @@ -167,7 +194,12 @@ public void onEntityDied(LivingDeathEvent event) { if(lightningEnabled.get()) { LightningEntity lightning = new LightningEntity(EntityType.LIGHTNING_BOLT, mc.world); lightning.setPosition(entity.getPos()); - ((ILightningEntity) lightning).ama$setColor(lightningColor.get()); + + ILightningEntity iLightning = (ILightningEntity) lightning; + iLightning.ama$setColor(lightningColor.get()); + iLightning.ama$setImpactVolume(lightningImpactVolume.get()); + iLightning.ama$setThunderVolume(lightningThunderVolume.get()); + iLightning.ama$setSoundCategory(lightningSoundCategory.get()); mc.world.addEntity(lightning); }