1 package com.irtimaled.bbor.client.gui;
3 import com.google.common.base.Function;
4 import com.google.common.base.Preconditions;
5 import com.irtimaled.bbor.client.config.Setting;
6 import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
7 import net.minecraft.client.resource.language.I18n;
8 import net.minecraft.text.LiteralText;
10 import java.util.HashMap;
12 import java.util.stream.IntStream;
14 class IntSettingSlider extends AbstractSlider {
15 private final String format;
16 private final Map<Integer, String> displayValues = new HashMap<>();
18 final Setting<Integer> setting;
21 IntSettingSlider(int width, int minValue, int maxValue, String format, Setting<Integer> setting) {
22 super(width, maxValue - minValue);
23 this.setting = setting;
24 this.minValue = minValue;
30 protected void setInitialPosition() {
31 this.setPosition(this.setting.get() - this.minValue);
34 IntSettingSlider addDisplayValue(int value, String displayValue) {
35 displayValues.put(value, displayValue);
36 if (setting.get() == value) {
42 IntSettingSlider addDisplayValueRange(int start, int end) {
43 return addDisplayValueRange(start, end, String::valueOf);
46 IntSettingSlider addDisplayValueRange(int start, int end, Function<Integer, String> formatter) {
47 Preconditions.checkArgument(start <= end);
48 Preconditions.checkNotNull(formatter);
49 IntStream.range(start, end).forEach(value -> addDisplayValue(value, formatter.apply(value)));
53 protected Integer getSettingValue() {
54 return minValue + getPosition();
57 private void updateText() {
58 Integer value = setting.get();
59 this.setMessage(new LiteralText(I18n.translate(format, displayValues.getOrDefault(value, value.toString()))));
63 protected void onProgressChanged() {
64 this.setting.set(this.getSettingValue());
69 public void appendNarrations(NarrationMessageBuilder narrationMessageBuilder) {
70 this.appendDefaultNarrations(narrationMessageBuilder);