Add cli opt for music vol affected by master vol

This commit is contained in:
Stephen Seo 2024-02-01 16:54:34 +09:00
parent 03ea6d3bc9
commit 3f7c922c5d
2 changed files with 46 additions and 8 deletions

View file

@ -29,6 +29,7 @@ public class ClientConfig {
public final ModConfigSpec.ConfigValue<List<? extends String>> battleMusicList;
public final ModConfigSpec.ConfigValue<List<? extends String>> sillyMusicList;
public final ModConfigSpec.DoubleValue sillyMusicThreshold;
public final ModConfigSpec.BooleanValue volumeAffectedByMasterVolume;
public final ModConfigSpec.BooleanValue volumeAffectedByMusicVolume;
public final ModConfigSpec.DoubleValue musicVolume;
@ -55,6 +56,11 @@ public class ClientConfig {
.translation(TurnBasedMinecraftMod.MODID + ".clientconfig.silly_percentage")
.defineInRange("sillyMusicThreshold", 0.4, 0.0, 1.0);
this.volumeAffectedByMasterVolume = builder.comment(
"If \"true\", music volume will be affected by global Master volume setting")
.translation(TurnBasedMinecraftMod.MODID + ".clientconfig.volume_affected_by_master")
.define("volumeAffectedByMasterVolume", true);
this.volumeAffectedByMusicVolume = builder.comment(
"If \"true\", music volume will be affected by global Music volume setting")
.translation(TurnBasedMinecraftMod.MODID + ".clientconfig.volume_affected_by_volume")
@ -75,6 +81,7 @@ public class ClientConfig {
private EditBox battleListEditBox = null;
private EditBox sillyListEditBox = null;
private SliderPercentage sillyMusicThresholdSlider = null;
private Checkbox affectedByMasterVolCheckbox = null;
private Checkbox affectedByMusicVolCheckbox = null;
private SliderPercentage volumeSlider = null;
@ -167,6 +174,29 @@ public class ClientConfig {
top_offset += widget_height;
addRenderableWidget(
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
widget_width, widget_height, Component.literal("Affected by Master Vol.")
.setStyle(Style.EMPTY.withColor(TextColor.fromRgb(0XFFFFFFFF)).withHoverEvent(
new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal(
"If enabled, volume is affected by global master volume.")))), font));
if (affectedByMasterVolCheckbox == null) {
affectedByMasterVolCheckbox = Checkbox.builder(Component.literal(""), font)
.pos(this.width / 2 + widget_x_offset, top_offset).build();
} else {
affectedByMasterVolCheckbox.setPosition(this.width / 2 + widget_x_offset,
top_offset);
}
if ((CLIENT.volumeAffectedByMasterVolume.get() &&
!affectedByMasterVolCheckbox.selected()) ||
(!CLIENT.volumeAffectedByMasterVolume.get() &&
affectedByMasterVolCheckbox.selected())) {
affectedByMasterVolCheckbox.onPress();
}
addRenderableWidget(affectedByMasterVolCheckbox);
top_offset += widget_height;
addRenderableWidget(
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
widget_width, widget_height, Component.literal("Affected by Music Vol.")
@ -241,6 +271,8 @@ public class ClientConfig {
CLIENT.sillyMusicThreshold.set(sillyMusicThresholdSlider.percentage);
CLIENT.volumeAffectedByMasterVolume.set(affectedByMasterVolCheckbox.selected());
CLIENT.volumeAffectedByMusicVolume.set(affectedByMusicVolCheckbox.selected());
CLIENT.musicVolume.set(volumeSlider.percentage);

View file

@ -94,21 +94,27 @@ public class ClientProxy extends CommonProxy {
@Override
public void playBattleMusic() {
Options gs = Minecraft.getInstance().options;
if (ClientConfig.CLIENT.volumeAffectedByMusicVolume.get()) {
battleMusic.playBattle(gs.getSoundSourceVolume(SoundSource.MUSIC) * gs.getSoundSourceVolume(SoundSource.MASTER) * ClientConfig.CLIENT.musicVolume.get().floatValue());
} else {
battleMusic.playBattle(gs.getSoundSourceVolume(SoundSource.MASTER) * ClientConfig.CLIENT.musicVolume.get().floatValue());
float volume = ClientConfig.CLIENT.musicVolume.get().floatValue();
if (ClientConfig.CLIENT.volumeAffectedByMasterVolume.get()) {
volume *= gs.getSoundSourceVolume(SoundSource.MASTER);
}
if (ClientConfig.CLIENT.volumeAffectedByMusicVolume.get()) {
volume *= gs.getSoundSourceVolume(SoundSource.MUSIC);
}
battleMusic.playBattle(volume);
}
@Override
public void playSillyMusic() {
Options gs = Minecraft.getInstance().options;
if (ClientConfig.CLIENT.volumeAffectedByMusicVolume.get()) {
battleMusic.playSilly(gs.getSoundSourceVolume(SoundSource.MUSIC) * gs.getSoundSourceVolume(SoundSource.MASTER) * ClientConfig.CLIENT.musicVolume.get().floatValue());
} else {
battleMusic.playSilly(gs.getSoundSourceVolume(SoundSource.MASTER) * ClientConfig.CLIENT.musicVolume.get().floatValue());
float volume = ClientConfig.CLIENT.musicVolume.get().floatValue();
if (ClientConfig.CLIENT.volumeAffectedByMasterVolume.get()) {
volume *= gs.getSoundSourceVolume(SoundSource.MASTER);
}
if (ClientConfig.CLIENT.volumeAffectedByMusicVolume.get()) {
volume *= gs.getSoundSourceVolume(SoundSource.MUSIC);
}
battleMusic.playSilly(volume);
}
@Override