Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import me.contaria.speedrunapi.config.api.SpeedrunOption;
import me.contaria.speedrunapi.config.api.annotations.Config;
import me.contaria.speedrunapi.util.TextUtil;
import me.contaria.standardsettings.gui.SliderTextFieldStandardOptionWidget;
import me.contaria.standardsettings.options.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.ConfirmScreen;
Expand Down Expand Up @@ -180,7 +181,27 @@ public boolean hasWidget() {
this.register("forceUnicodeFont", "options.language", Option.FORCE_UNICODE_FONT);

// Mouse Settings
this.register("mouseSensitivity", "options.mouse_settings", Option.SENSITIVITY);
this.register(new DoubleOptionStandardSetting("mouseSensitivity", "options.mouse_settings", this.options, Option.SENSITIVITY) {
@Override
public @NotNull AbstractButtonWidget createWidget() {
TextFieldWidget textField = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, 0, 0, 120, 20, TextUtil.empty());
textField.setMaxLength(128);
textField.setText(String.valueOf(this.get()));
textField.setChangedListener(string -> {
if (string.isEmpty()) {
return;
}
double value;
try {
value = Double.parseDouble(string);
} catch (NumberFormatException e) {
return;
}
this.set(this.options, value);
});
return new SliderTextFieldStandardOptionWidget(this, this.createMainWidget(), textField);
}
});
this.register("invertYMouse", "options.mouse_settings", Option.INVERT_MOUSE);
this.register("mouseWheelSensitivity", "options.mouse_settings", Option.MOUSE_WHEEL_SENSITIVITY);
this.register("discrete_mouse_scroll", "options.mouse_settings", Option.DISCRETE_MOUSE_SCROLL);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package me.contaria.standardsettings.gui;

import me.contaria.standardsettings.mixin.accessors.SliderWidgetAccessor;
import me.contaria.standardsettings.options.DoubleOptionStandardSetting;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.DoubleOptionSliderWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;

public class SliderTextFieldStandardOptionWidget extends StandardOptionWidget {
private final DoubleOptionStandardSetting setting;
private final DoubleOptionSliderWidget slider;
private final TextFieldWidget textField;
private boolean alt;

public SliderTextFieldStandardOptionWidget(DoubleOptionStandardSetting setting, DoubleOptionSliderWidget slider, TextFieldWidget textField) {
super(setting, slider);
this.setting = setting;
this.slider = slider;
this.textField = textField;
}

@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (this.slider.isMouseOver(mouseX, mouseY) && Screen.hasControlDown() && setting.isEnabled()) {
this.alt = !alt;
this.setMainWidget(this.alt ? textField : slider);
((SliderWidgetAccessor) this.slider).callSetValue(setting.getRatio(setting.get()));
this.textField.setText(setting.get().toString());
return true;
}
return super.mouseClicked(mouseX, mouseY, button);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import java.util.List;

public class StandardOptionWidget extends AbstractButtonWidget implements ParentElement {
private final AbstractButtonWidget mainWidget;
private AbstractButtonWidget mainWidget;
private final AbstractButtonWidget toggle;
private Element focused;
private boolean isDragging;
Expand All @@ -40,6 +40,10 @@ private void setEnabled(boolean enabled) {
}
}

protected void setMainWidget(AbstractButtonWidget widget) {
this.mainWidget = widget;
}

@Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) {
this.mainWidget.x = this.x;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package me.contaria.standardsettings.mixin.accessors;

import net.minecraft.client.gui.widget.SliderWidget;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;

@Mixin(SliderWidget.class)
public interface SliderWidgetAccessor {
@Invoker("setValue")
void callSetValue(double value);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import me.contaria.standardsettings.StandardGameOptions;
import me.contaria.standardsettings.mixin.accessors.DoubleOptionAccessor;
import me.contaria.standardsettings.mixin.accessors.OptionAccessor;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.gui.widget.DoubleOptionSliderWidget;
import net.minecraft.client.options.DoubleOption;
import net.minecraft.client.options.GameOptions;
Expand All @@ -24,6 +23,10 @@ public DoubleOptionStandardSetting(String id, @Nullable String category, Standar
this.set(this.getOption());
}

public double getRatio(double value) {
return this.option.getRatio(value);
}

@Override
public Double get(GameOptions options) {
return this.option.get(options);
Expand Down Expand Up @@ -55,7 +58,7 @@ protected JsonElement valueToJson() {
}

@Override
public @NotNull AbstractButtonWidget createMainWidget() {
public @NotNull DoubleOptionSliderWidget createMainWidget() {
return new DoubleOptionSliderWidget(this.options, 0, 0, 120, 20, this.option) {
@Override
protected void updateMessage() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public boolean hasWidget() {
}

@Override
public final @NotNull AbstractButtonWidget createWidget() {
public @NotNull AbstractButtonWidget createWidget() {
return new StandardOptionWidget(this, this.createMainWidget());
}

Expand Down
9 changes: 3 additions & 6 deletions src/main/resources/standardsettings.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,13 @@
"accessors.DoubleOptionAccessor",
"accessors.MinecraftClientAccessor",
"accessors.OptionAccessor",
"accessors.SliderWidgetAccessor",
"fix.GameOptionsMixin",
"fix.KeyboardMixin",
"fix.LanguageOptionsScreenMixin",
"fix.OptionMixin"
],
"injectors": {
"defaultRequire": 1
},
"mixins": [
"accessors.GameOptionsScreenAccessor",
"fix.LanguageSelectionListWidgetMixin"
]
}
}
}