Skip to content

Commit 7e3d50f

Browse files
committed
add api to add custom screens, use a color theme builder instead of a direct method
1 parent a6f7931 commit 7e3d50f

22 files changed

+228
-34
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package net.caffeinemc.mods.sodium.api.config.structure;
2+
3+
public interface ColorThemeBuilder {
4+
ColorThemeBuilder setBaseThemeRGB(int theme);
5+
6+
ColorThemeBuilder setFullThemeRGB(int theme, int themeHighlight, int themeDisabled);
7+
}

common/src/api/java/net/caffeinemc/mods/sodium/api/config/structure/ConfigBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ public interface ConfigBuilder {
77

88
ModOptionsBuilder registerOwnModOptions();
99

10+
ColorThemeBuilder createColorTheme();
11+
1012
OptionPageBuilder createOptionPage();
1113

14+
ExternalPageBuilder createExternalPage();
15+
1216
OptionGroupBuilder createOptionGroup();
1317

1418
BooleanOptionBuilder createBooleanOption(ResourceLocation id);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package net.caffeinemc.mods.sodium.api.config.structure;
2+
3+
import net.minecraft.client.gui.screens.Screen;
4+
import net.minecraft.network.chat.Component;
5+
6+
import java.util.function.Consumer;
7+
8+
public interface ExternalPageBuilder extends PageBuilder {
9+
ExternalPageBuilder setName(Component name);
10+
11+
ExternalPageBuilder setScreenProvider(Consumer<Screen> currentScreenConsumer);
12+
}

common/src/api/java/net/caffeinemc/mods/sodium/api/config/structure/ModOptionsBuilder.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ public interface ModOptionsBuilder {
55

66
ModOptionsBuilder setVersion(String version);
77

8-
ModOptionsBuilder setColorThemeRGB(int theme, int themeHighlight, int themeDisabled);
8+
ModOptionsBuilder setColorTheme(ColorThemeBuilder colorTheme);
99

10-
ModOptionsBuilder setColorThemeRGB(int theme);
11-
12-
ModOptionsBuilder addPage(OptionPageBuilder page);
10+
ModOptionsBuilder addPage(PageBuilder page);
1311
}

common/src/api/java/net/caffeinemc/mods/sodium/api/config/structure/OptionPageBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import net.minecraft.network.chat.Component;
44

5-
public interface OptionPageBuilder {
5+
public interface OptionPageBuilder extends PageBuilder {
66
OptionPageBuilder setName(Component name);
77

88
OptionPageBuilder addOptionGroup(OptionGroupBuilder group);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package net.caffeinemc.mods.sodium.api.config.structure;
2+
3+
public interface PageBuilder {
4+
}

common/src/main/java/net/caffeinemc/mods/sodium/client/config/ConfigManager.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ private static void registerConfigs(BiConsumer<ConfigEntryPoint, ConfigBuilder>
8383
registerMethod.accept(entryPoint, builder);
8484
builtConfigs = builder.build();
8585
} catch (Exception e) {
86-
Minecraft.getInstance().emergencySaveAndCrash(new CrashReport("Failed to build options config for mod " + configUser.modId, e));
86+
crashWithMessage("Failed to build options config for mod " + configUser.modId, e);
8787
return;
8888
}
8989

@@ -114,7 +114,12 @@ private static void registerConfigs(BiConsumer<ConfigEntryPoint, ConfigBuilder>
114114
try {
115115
CONFIG = new Config(ImmutableList.copyOf(modConfigs));
116116
} catch (Exception e) {
117-
Minecraft.getInstance().emergencySaveAndCrash(new CrashReport("Failed to build options config", e));
117+
crashWithMessage("Failed to build options config", e);
118118
}
119119
}
120+
121+
private static void crashWithMessage(String message, Exception e) {
122+
var instance = Minecraft.getInstance();
123+
Minecraft.crash(instance, instance.gameDirectory, new CrashReport(message, e));
124+
}
120125
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package net.caffeinemc.mods.sodium.client.config.structure;
2+
3+
import net.caffeinemc.mods.sodium.api.config.structure.ColorThemeBuilder;
4+
import net.caffeinemc.mods.sodium.client.gui.ColorTheme;
5+
6+
public class ColorThemeBuilderImpl implements ColorThemeBuilder {
7+
private int baseTheme;
8+
private int themeHighlight;
9+
private int themeDisabled;
10+
11+
ColorTheme build() {
12+
if (this.baseTheme == 0) {
13+
throw new IllegalStateException("Base theme must be set");
14+
}
15+
16+
if (this.themeHighlight == 0 || this.themeDisabled == 0) {
17+
return new ColorTheme(this.baseTheme);
18+
} else {
19+
return new ColorTheme(this.baseTheme, this.themeHighlight, this.themeDisabled);
20+
}
21+
}
22+
23+
@Override
24+
public ColorThemeBuilder setBaseThemeRGB(int theme) {
25+
this.baseTheme = theme;
26+
return this;
27+
}
28+
29+
@Override
30+
public ColorThemeBuilder setFullThemeRGB(int theme, int themeHighlight, int themeDisabled) {
31+
this.baseTheme = theme;
32+
this.themeHighlight = themeHighlight;
33+
this.themeDisabled = themeDisabled;
34+
return this;
35+
}
36+
}

common/src/main/java/net/caffeinemc/mods/sodium/client/config/structure/ConfigBuilderImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,21 @@ public ModOptionsBuilder registerOwnModOptions() {
3232
return this.registerModOptions(this.defaultNamespace, this.defaultName, this.defaultVersion);
3333
}
3434

35+
@Override
36+
public ColorThemeBuilder createColorTheme() {
37+
return new ColorThemeBuilderImpl();
38+
}
39+
3540
@Override
3641
public OptionPageBuilder createOptionPage() {
3742
return new OptionPageBuilderImpl();
3843
}
3944

45+
@Override
46+
public ExternalPageBuilder createExternalPage() {
47+
return new ExternalPageBuilderImpl();
48+
}
49+
4050
@Override
4151
public OptionGroupBuilder createOptionGroup() {
4252
return new OptionGroupBuilderImpl();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package net.caffeinemc.mods.sodium.client.config.structure;
2+
3+
import com.google.common.collect.ImmutableList;
4+
import net.minecraft.client.gui.screens.Screen;
5+
import net.minecraft.network.chat.Component;
6+
7+
import java.util.function.Consumer;
8+
9+
public record ExternalPage(Component name, Consumer<Screen> currentScreenConsumer) implements Page {
10+
@Override
11+
public ImmutableList<OptionGroup> groups() {
12+
return ImmutableList.of();
13+
}
14+
}

0 commit comments

Comments
 (0)