Skip to content

Commit 07f34be

Browse files
committed
feat: implemented config screen for modmenu
1 parent 133c307 commit 07f34be

File tree

12 files changed

+295
-5
lines changed

12 files changed

+295
-5
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ dependencies {
5858
// Fabric API. This is technically optional, but you probably want it anyway.
5959
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
6060

61+
modImplementation("com.terraformersmc:modmenu:${project.modmenu_version}")
62+
6163
implementation "com.esotericsoftware.yamlbeans:yamlbeans:${project.yaml_beans_version}"
6264
// Bundle yamlbeans into the mod jar so it's available at runtime
6365
include "com.esotericsoftware.yamlbeans:yamlbeans:${project.yaml_beans_version}"

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ fabric_version=0.136.0+1.21.8
2424

2525
# Dependencies
2626
yaml_beans_version=1.17
27-
modmenu_version=16.0.0-rc.1
27+
modmenu_version=15.0.0

src/client/java/hu/ris/roofify/configuration/RoofifyConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ public boolean toggleEnabled() {
6464
return this.enabled;
6565
}
6666

67+
public int setHorizontalRadius(int horizontalRadius) {
68+
this.render_distance_horizontal = horizontalRadius;
69+
this.save();
70+
return this.render_distance_horizontal;
71+
}
72+
73+
public int setVerticalRadius(int verticalRadius) {
74+
this.render_distance_vertical = verticalRadius;
75+
this.save();
76+
return this.render_distance_vertical;
77+
}
78+
6779
public RoofifyConfig load() {
6880

6981
if (!RoofifyConfigLoader.FILE.exists()) {
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package hu.ris.roofify.modmenu;
2+
3+
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
4+
import com.terraformersmc.modmenu.api.ModMenuApi;
5+
6+
import hu.ris.roofify.configuration.RoofifyConfigLoader;
7+
import hu.ris.roofify.modmenu.elements.BackButton;
8+
import hu.ris.roofify.modmenu.elements.CycleRenderModeButton;
9+
import hu.ris.roofify.modmenu.elements.HorizontalRadiusSlider;
10+
import hu.ris.roofify.modmenu.elements.ToggleRenderButton;
11+
import hu.ris.roofify.modmenu.elements.VerticalRadiusSlider;
12+
import net.minecraft.client.gui.screen.Screen;
13+
import net.minecraft.client.gui.widget.TextWidget;
14+
import net.minecraft.text.Text;
15+
16+
public class RoofifyModMenuImpl implements ModMenuApi {
17+
18+
public static final int SIZE_WIDTH = 200;
19+
public static final int SIZE_HEIGHT = 20;
20+
private static final int SPACING_Y = 5;
21+
private static final int BACK_OFFSET_Y = 40;
22+
23+
@Override
24+
public ConfigScreenFactory<?> getModConfigScreenFactory() {
25+
return (Screen parent) -> new RoofifyConfigScreen(parent);
26+
}
27+
28+
static class RoofifyConfigScreen extends Screen {
29+
protected RoofifyConfigScreen(Screen parent) {
30+
super(Text.translatable("roofify.modmenu.title"));
31+
}
32+
33+
@Override
34+
protected void init() {
35+
36+
int x = (this.width / 2) - 100;
37+
int baseY = (this.height / 2) - 100;
38+
39+
TextWidget titleWidget = new TextWidget(x, baseY, 200, 40, Text.translatable("roofify.modmenu.title"), this.textRenderer);
40+
41+
this.addDrawableChild(titleWidget);
42+
43+
int currentY = baseY + 40;
44+
ToggleRenderButton toggleRenderButton = new ToggleRenderButton(x, currentY);
45+
this.addDrawableChild(toggleRenderButton);
46+
47+
currentY += SIZE_HEIGHT + SPACING_Y;
48+
CycleRenderModeButton cycleRenderModeButton = new CycleRenderModeButton(x, currentY);
49+
this.addDrawableChild(cycleRenderModeButton);
50+
51+
int initialHorizontal = Math.max(4, Math.min(48, RoofifyConfigLoader.config.render_distance_horizontal));
52+
53+
currentY += SIZE_HEIGHT + SPACING_Y;
54+
HorizontalRadiusSlider horizontalSlider = new HorizontalRadiusSlider(x, currentY, Text.translatable("roofify.modmenu.radius.horizontal", initialHorizontal), (initialHorizontal - 4) / 44.0);
55+
56+
this.addDrawableChild(horizontalSlider);
57+
58+
int initialVertical = Math.max(4, Math.min(48, RoofifyConfigLoader.config.render_distance_vertical));
59+
60+
currentY += SIZE_HEIGHT + SPACING_Y;
61+
VerticalRadiusSlider verticalSlider = new VerticalRadiusSlider(x, currentY, Text.translatable("roofify.modmenu.radius.vertical", initialVertical), (initialVertical - 4) / 44.0);
62+
63+
this.addDrawableChild(verticalSlider);
64+
65+
BackButton backButton = new BackButton(x, currentY + SIZE_HEIGHT + BACK_OFFSET_Y, this);
66+
67+
this.addDrawableChild(backButton);
68+
69+
super.init();
70+
}
71+
72+
}
73+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package hu.ris.roofify.modmenu.elements;
2+
3+
import com.terraformersmc.modmenu.gui.ModsScreen;
4+
5+
import hu.ris.roofify.modmenu.RoofifyModMenuImpl;
6+
import net.minecraft.client.MinecraftClient;
7+
import net.minecraft.client.gui.screen.Screen;
8+
import net.minecraft.client.gui.tooltip.Tooltip;
9+
import net.minecraft.client.gui.widget.ButtonWidget;
10+
import net.minecraft.text.Text;
11+
12+
public class BackButton extends ButtonWidget {
13+
14+
public BackButton(int x, int y, Screen parent) {
15+
super(x, y, RoofifyModMenuImpl.SIZE_WIDTH, RoofifyModMenuImpl.SIZE_HEIGHT, Text.translatable("gui.back"), new PressBack(() -> {
16+
MinecraftClient.getInstance().setScreen(new ModsScreen(parent));
17+
}), ButtonWidget.DEFAULT_NARRATION_SUPPLIER);
18+
this.setTooltip(Tooltip.of(Text.translatable("roofify.modmenu.back_tooltip")));
19+
}
20+
21+
static class PressBack implements PressAction {
22+
23+
private final Runnable onPress;
24+
25+
public PressBack(Runnable onPress) {
26+
this.onPress = onPress;
27+
}
28+
29+
@Override
30+
public void onPress(ButtonWidget button) {
31+
this.onPress.run();
32+
}
33+
34+
}
35+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package hu.ris.roofify.modmenu.elements;
2+
3+
import hu.ris.roofify.configuration.RoofifyConfigLoader;
4+
import hu.ris.roofify.modmenu.RoofifyModMenuImpl;
5+
import hu.ris.roofify.render.RenderMode;
6+
import net.minecraft.client.gui.tooltip.Tooltip;
7+
import net.minecraft.client.gui.widget.ButtonWidget;
8+
import net.minecraft.text.Text;
9+
10+
public class CycleRenderModeButton extends ButtonWidget {
11+
12+
public CycleRenderModeButton(int x, int y) {
13+
super(x, y, RoofifyModMenuImpl.SIZE_WIDTH, RoofifyModMenuImpl.SIZE_HEIGHT, Text.empty(), new PressToggleRender(() -> {
14+
RoofifyConfigLoader.config.cycleRenderMode();
15+
}), ButtonWidget.DEFAULT_NARRATION_SUPPLIER);
16+
17+
RenderMode renderMode = RoofifyConfigLoader.config.getRenderMode();
18+
19+
String translationKey = "roofify.render_mode." + renderMode.getType().name().toLowerCase();
20+
this.setMessage(Text.translatable("roofify.modmenu.cycle_render_mode", Text.translatable(translationKey)));
21+
this.setTooltip(Tooltip.of(Text.translatable("roofify.modmenu.cycle_render_mode_tooltip")));
22+
}
23+
24+
static class PressToggleRender implements PressAction {
25+
26+
private final Runnable onPress;
27+
28+
public PressToggleRender(Runnable onPress) {
29+
this.onPress = onPress;
30+
}
31+
32+
@Override
33+
public void onPress(ButtonWidget button) {
34+
35+
this.onPress.run();
36+
37+
RenderMode newRenderMode = RoofifyConfigLoader.config.cycleRenderMode();
38+
39+
String translationKey = "roofify.render_mode." + newRenderMode.getType().name().toLowerCase();
40+
button.setMessage(Text.translatable("roofify.modmenu.cycle_render_mode", Text.translatable(translationKey)));
41+
}
42+
43+
}
44+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package hu.ris.roofify.modmenu.elements;
2+
3+
import hu.ris.roofify.configuration.RoofifyConfigLoader;
4+
import hu.ris.roofify.modmenu.RoofifyModMenuImpl;
5+
import net.minecraft.client.gui.tooltip.Tooltip;
6+
import net.minecraft.client.gui.widget.SliderWidget;
7+
import net.minecraft.text.Text;
8+
9+
public class HorizontalRadiusSlider extends SliderWidget {
10+
11+
public HorizontalRadiusSlider(int x, int y, Text text, double value) {
12+
super(x, y, RoofifyModMenuImpl.SIZE_WIDTH, RoofifyModMenuImpl.SIZE_HEIGHT, text, value);
13+
this.updateMessage();
14+
this.setTooltip(Tooltip.of(Text.translatable("roofify.modmenu.radius.horizontal_tooltip")));
15+
}
16+
17+
@Override
18+
protected void updateMessage() {
19+
int value = (int) Math.round(this.value * 44) + 4;
20+
this.setMessage(Text.translatable("roofify.modmenu.radius.horizontal", value));
21+
}
22+
23+
@Override
24+
protected void applyValue() {
25+
int value = (int) Math.round(this.value * 44) + 4;
26+
RoofifyConfigLoader.config.setHorizontalRadius(value);
27+
}
28+
29+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package hu.ris.roofify.modmenu.elements;
2+
3+
import hu.ris.roofify.configuration.RoofifyConfigLoader;
4+
import hu.ris.roofify.modmenu.RoofifyModMenuImpl;
5+
import net.minecraft.client.gui.tooltip.Tooltip;
6+
import net.minecraft.client.gui.widget.ButtonWidget;
7+
import net.minecraft.text.Text;
8+
9+
public class ToggleRenderButton extends ButtonWidget {
10+
11+
public ToggleRenderButton(int x, int y) {
12+
super(x, y, RoofifyModMenuImpl.SIZE_WIDTH, RoofifyModMenuImpl.SIZE_HEIGHT, Text.empty(), new PressToggleRender(() -> {
13+
RoofifyConfigLoader.config.toggleEnabled();
14+
}), ButtonWidget.DEFAULT_NARRATION_SUPPLIER);
15+
16+
boolean isEnabled = RoofifyConfigLoader.config.enabled;
17+
this.setMessage(Text.translatable(isEnabled ? "options.on" : "options.off"));
18+
this.setTooltip(Tooltip.of(Text.translatable("roofify.modmenu.toggle_tooltip")));
19+
}
20+
21+
static class PressToggleRender implements PressAction {
22+
23+
private final Runnable onPress;
24+
25+
public PressToggleRender(Runnable onPress) {
26+
this.onPress = onPress;
27+
}
28+
29+
@Override
30+
public void onPress(ButtonWidget button) {
31+
32+
this.onPress.run();
33+
34+
boolean isEnabled = RoofifyConfigLoader.config.enabled;
35+
36+
button.setMessage(Text.translatable(isEnabled ? "options.on" : "options.off"));
37+
}
38+
39+
}
40+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package hu.ris.roofify.modmenu.elements;
2+
3+
import hu.ris.roofify.configuration.RoofifyConfigLoader;
4+
import hu.ris.roofify.modmenu.RoofifyModMenuImpl;
5+
import net.minecraft.client.gui.tooltip.Tooltip;
6+
import net.minecraft.client.gui.widget.SliderWidget;
7+
import net.minecraft.text.Text;
8+
9+
public class VerticalRadiusSlider extends SliderWidget {
10+
11+
public VerticalRadiusSlider(int x, int y, Text text, double value) {
12+
super(x, y, RoofifyModMenuImpl.SIZE_WIDTH, RoofifyModMenuImpl.SIZE_HEIGHT, text, value);
13+
this.updateMessage();
14+
this.setTooltip(Tooltip.of(Text.translatable("roofify.modmenu.radius.vertical_tooltip")));
15+
}
16+
17+
@Override
18+
protected void updateMessage() {
19+
int value = (int) Math.round(this.value * 44) + 4;
20+
this.setMessage(Text.translatable("roofify.modmenu.radius.vertical", value));
21+
}
22+
23+
@Override
24+
protected void applyValue() {
25+
int value = (int) Math.round(this.value * 44) + 4;
26+
RoofifyConfigLoader.config.setVerticalRadius(value);
27+
}
28+
29+
}

src/client/java/hu/ris/roofify/render/RoofifyRender.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
public class RoofifyRender {
2828

2929
private static final int maxY = 127; // roof level
30-
private static final int maxMinY = 123; // the lowest level where bedrock can be
30+
private static final int maxMinY = 122; // the lowest level where bedrock can be
3131

3232
private static final List<CachedBlock> blocksCached = new ArrayList<>();
3333

0 commit comments

Comments
 (0)