Skip to content

Commit c3c3036

Browse files
committed
Switch config lib to YACL
1 parent d21f40b commit c3c3036

File tree

10 files changed

+115
-147
lines changed

10 files changed

+115
-147
lines changed

build.gradle

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,14 @@ static def getCheckedOutGitCommitHash() {
2020
}
2121

2222
repositories {
23-
maven { url = "https://maven.terraformersmc.com" }
23+
maven { url = "https://maven.terraformersmc.com/" }
24+
maven { url "https://maven.isxander.dev/releases" }
25+
}
26+
27+
loom {
28+
runs {
29+
remove server
30+
}
2431
}
2532

2633
dependencies {
@@ -29,11 +36,14 @@ dependencies {
2936
mappings loom.officialMojangMappings()
3037
modImplementation "net.fabricmc:fabric-loader:${loader_version}"
3138

32-
// Fabric API. This is technically optional, but you probably want it anyway.
33-
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
39+
// Fabric API - Needs to be specified, otherwise an older version might be defaulted and cause issues.
40+
modImplementation("net.fabricmc.fabric-api:fabric-api:${project.fabric_version}")
41+
42+
// YACL
43+
modImplementation("dev.isxander:yet-another-config-lib:${project.yacl_version}")
3444

3545
// Mod Menu
36-
modImplementation("com.terraformersmc:modmenu:${modmenu_version}") {
46+
modImplementation("com.terraformersmc:modmenu:${project.modmenu_version}") {
3747
exclude group: 'net.fabricmc.fabric-api'
3848
}
3949
}

gradle.properties

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ org.gradle.jvmargs=-Xmx4G
33
org.gradle.parallel=true
44

55
# Fabric Properties
6-
# check these on https://modmuss50.me/fabric.html
6+
# check these on https://fabricmc.net/develop
77
minecraft_version=1.21.4
88
loader_version=0.16.10
99

10+
# Dependencies
11+
fabric_version=0.113.0+1.21.4
12+
yacl_version=3.6.2+1.21.4-fabric
13+
modmenu_version=13.0.1
14+
1015
# Mod Properties
1116
mod_version=1.0
1217
maven_group=btw.lowercase
13-
archives_base_name=optiboxes
14-
15-
# Dependencies
16-
# check this on https://modmuss50.me/fabric.html
17-
fabric_version=0.113.0+1.21.4
18-
modmenu_version=13.0.0-beta.1
18+
archives_base_name=optiboxes

src/main/java/btw/lowercase/optiboxes/OptiBoxesClient.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package btw.lowercase.optiboxes;
22

3-
import btw.lowercase.optiboxes.skybox.SkyboxManager;
4-
import btw.lowercase.optiboxes.utils.api.AbstractSkybox;
53
import btw.lowercase.optiboxes.config.OptiBoxesConfig;
64
import btw.lowercase.optiboxes.skybox.OptiFineCustomSkybox;
7-
import btw.lowercase.optiboxes.utils.OptiFineResourceManagerHelper;
5+
import btw.lowercase.optiboxes.skybox.SkyboxManager;
86
import btw.lowercase.optiboxes.utils.CommonUtils;
7+
import btw.lowercase.optiboxes.utils.OptiFineResourceManagerHelper;
8+
import btw.lowercase.optiboxes.utils.api.AbstractSkybox;
99
import com.google.gson.JsonArray;
1010
import com.google.gson.JsonObject;
1111
import com.mojang.serialization.JsonOps;
@@ -39,23 +39,26 @@ public class OptiBoxesClient implements ClientModInitializer {
3939
@Override
4040
public void onInitializeClient() {
4141
INSTANCE = this;
42+
OptiBoxesConfig.load();
4243
ResourceManagerHelper.get(PackType.CLIENT_RESOURCES).registerReloadListener(new OptiFineResourceManagerHelper());
4344
ClientTickEvents.END_WORLD_TICK.register(SkyboxManager.INSTANCE::tick);
4445
}
4546

4647
public void inject(OptiFineResourceManagerHelper managerAccessor) {
4748
this.logger.warn("OptiBoxes is converting MCPatcher/OptiFine custom skies resource packs! Any visual bugs are likely caused by OptiBoxes. Please do not report these issues to Resource Pack creators!");
4849
SkyboxManager.INSTANCE.clearSkyboxes();
49-
this.logger.info("Looking for OptiFine/MCPatcher Skies...");
50-
this.convert(managerAccessor);
50+
if (OptiBoxesConfig.instance().enabled) {
51+
this.logger.info("Looking for OptiFine/MCPatcher Skies...");
52+
this.convert(managerAccessor);
53+
}
5154
}
5255

5356
public void convert(OptiFineResourceManagerHelper managerAccessor) {
54-
if (OptiBoxesConfig.INSTANCE.processOptiFine) {
57+
if (OptiBoxesConfig.instance().processOptiFine) {
5558
this.convertNamespace(managerAccessor, OPTIFINE_SKY_PARENT, OPTIFINE_SKY_PATTERN);
5659
}
5760

58-
if (OptiBoxesConfig.INSTANCE.processMCPatcher) {
61+
if (OptiBoxesConfig.instance().processMCPatcher) {
5962
this.convertNamespace(managerAccessor, MCPATCHER_SKY_PARENT, MCPATCHER_SKY_PATTERN);
6063
}
6164
}

src/main/java/btw/lowercase/optiboxes/ModMenuIntegration.java renamed to src/main/java/btw/lowercase/optiboxes/config/ModMenuIntegration.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
package btw.lowercase.optiboxes;
1+
package btw.lowercase.optiboxes.config;
22

3-
import btw.lowercase.optiboxes.config.OptiBoxesConfig;
4-
import btw.lowercase.optiboxes.config.OptiBoxesConfigScreen;
53
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
64
import com.terraformersmc.modmenu.api.ModMenuApi;
75

86
public class ModMenuIntegration implements ModMenuApi {
97
@Override
108
public ConfigScreenFactory<?> getModConfigScreenFactory() {
11-
return parent -> new OptiBoxesConfigScreen(parent, OptiBoxesConfig.INSTANCE);
9+
return OptiBoxesConfig::getConfigScreen;
1210
}
1311
}
Lines changed: 72 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,83 @@
11
package btw.lowercase.optiboxes.config;
22

3-
import com.google.gson.FieldNamingPolicy;
4-
import com.google.gson.Gson;
5-
import com.google.gson.GsonBuilder;
3+
import btw.lowercase.optiboxes.OptiBoxesClient;
4+
import dev.isxander.yacl3.api.ConfigCategory;
5+
import dev.isxander.yacl3.api.Option;
6+
import dev.isxander.yacl3.api.OptionDescription;
7+
import dev.isxander.yacl3.api.YetAnotherConfigLib;
8+
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder;
9+
import dev.isxander.yacl3.config.v2.api.ConfigClassHandler;
10+
import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder;
611
import net.fabricmc.loader.api.FabricLoader;
7-
import org.slf4j.Logger;
8-
import org.slf4j.LoggerFactory;
9-
10-
import java.io.File;
11-
import java.io.FileReader;
12-
import java.io.FileWriter;
13-
import java.io.IOException;
14-
import java.lang.reflect.Modifier;
12+
import net.minecraft.client.Minecraft;
13+
import net.minecraft.client.gui.screens.Screen;
14+
import net.minecraft.network.chat.Component;
1515

1616
public class OptiBoxesConfig {
17-
private static final Logger logger = LoggerFactory.getLogger("OptiBoxes Config");
18-
private static final Gson GSON = new GsonBuilder()
19-
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
20-
.setPrettyPrinting()
21-
.excludeFieldsWithModifiers(Modifier.PRIVATE)
22-
.create();
23-
24-
public static final OptiBoxesConfig INSTANCE = load(FabricLoader.getInstance().getConfigDir().resolve("optiboxes.json").toFile());
17+
private static final ConfigClassHandler<OptiBoxesConfig> CONFIG =
18+
ConfigClassHandler.createBuilder(OptiBoxesConfig.class)
19+
.serializer(config ->
20+
GsonConfigSerializerBuilder.create(config)
21+
.setPath(FabricLoader.getInstance().getConfigDir().resolve(OptiBoxesClient.MOD_ID + ".json"))
22+
.build()
23+
).build();
24+
25+
public boolean enabled = true;
2526
public boolean processOptiFine = true;
2627
public boolean processMCPatcher = false;
27-
private File file;
28-
29-
public static OptiBoxesConfig load(File file) {
30-
OptiBoxesConfig config;
31-
if (file.exists()) {
32-
try (FileReader reader = new FileReader(file)) {
33-
config = GSON.fromJson(reader, OptiBoxesConfig.class);
34-
} catch (Exception e) {
35-
logger.error("Could not parse config, falling back to defaults!", e);
36-
config = new OptiBoxesConfig();
37-
}
38-
} else {
39-
config = new OptiBoxesConfig();
40-
}
41-
42-
config.file = file;
43-
config.writeChanges();
44-
return config;
28+
public boolean useNewSunriseRendering = false;
29+
30+
public static Screen getConfigScreen(Screen parent) {
31+
return YetAnotherConfigLib.create(CONFIG, (defaults, config, builder) -> {
32+
builder.title(Component.translatable("options.optiboxes.title"));
33+
34+
ConfigCategory.Builder category = ConfigCategory.createBuilder();
35+
category.name(Component.translatable("options.optiboxes.title"));
36+
Minecraft minecraft = Minecraft.getInstance();
37+
category.option(Option.<Boolean>createBuilder()
38+
.name(Component.translatable("options.optiboxes.enabled"))
39+
.description(OptionDescription.of(Component.translatable("options.optiboxes.enabled.tooltip")))
40+
.binding(defaults.enabled, () -> config.enabled, (newVal) -> {
41+
config.enabled = newVal;
42+
minecraft.reloadResourcePacks();
43+
})
44+
.controller(TickBoxControllerBuilder::create)
45+
.build());
46+
category.option(Option.<Boolean>createBuilder()
47+
.name(Component.translatable("options.optiboxes.process_optifine"))
48+
.description(OptionDescription.of(Component.translatable("options.optiboxes.process_optifine.tooltip")))
49+
.binding(defaults.processOptiFine, () -> config.processOptiFine, (newVal) -> {
50+
config.processOptiFine = newVal;
51+
minecraft.reloadResourcePacks();
52+
})
53+
.controller(TickBoxControllerBuilder::create)
54+
.build());
55+
category.option(Option.<Boolean>createBuilder()
56+
.name(Component.translatable("options.optiboxes.process_mcpatcher"))
57+
.description(OptionDescription.of(Component.translatable("options.optiboxes.process_mcpatcher.tooltip")))
58+
.binding(defaults.processMCPatcher, () -> config.processMCPatcher, (newVal) -> {
59+
config.processMCPatcher = newVal;
60+
minecraft.reloadResourcePacks();
61+
})
62+
.controller(TickBoxControllerBuilder::create)
63+
.build());
64+
category.option(Option.<Boolean>createBuilder()
65+
.name(Component.translatable("options.optiboxes.use_new_sunrise_rendering"))
66+
.description(OptionDescription.of(Component.translatable("options.optiboxes.use_new_sunrise_rendering.tooltip")))
67+
.binding(defaults.useNewSunriseRendering, () -> config.useNewSunriseRendering, (newVal) -> config.useNewSunriseRendering = newVal)
68+
.controller(TickBoxControllerBuilder::create)
69+
.build());
70+
builder.category(category.build());
71+
72+
return builder;
73+
}).generateScreen(parent);
74+
}
75+
76+
public static void load() {
77+
CONFIG.load();
4578
}
4679

47-
public void writeChanges() {
48-
File dir = this.file.getParentFile();
49-
if (!dir.exists()) {
50-
if (!dir.mkdirs()) {
51-
throw new RuntimeException("Could not create parent directories");
52-
}
53-
} else if (!dir.isDirectory()) {
54-
throw new RuntimeException("The parent file is not a directory");
55-
}
56-
57-
try (FileWriter writer = new FileWriter(this.file)) {
58-
GSON.toJson(this, writer);
59-
} catch (IOException e) {
60-
throw new RuntimeException("Could not save configuration file", e);
61-
}
80+
public static OptiBoxesConfig instance() {
81+
return CONFIG.instance();
6282
}
6383
}

src/main/java/btw/lowercase/optiboxes/config/OptiBoxesConfigScreen.java

Lines changed: 0 additions & 69 deletions
This file was deleted.

src/main/java/btw/lowercase/optiboxes/mixins/MixinLevelRenderer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package btw.lowercase.optiboxes.mixins;
22

3+
import btw.lowercase.optiboxes.config.OptiBoxesConfig;
34
import btw.lowercase.optiboxes.skybox.SkyboxManager;
45
import com.mojang.blaze3d.vertex.PoseStack;
56
import net.minecraft.client.Minecraft;
@@ -24,7 +25,7 @@ public abstract class MixinLevelRenderer {
2425
@Inject(method = "method_62215", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;setShaderFog(Lnet/minecraft/client/renderer/FogParameters;)V", shift = At.Shift.AFTER), cancellable = true)
2526
private void optiboxes$renderSkyboxes(FogParameters fogParameters, DimensionSpecialEffects.SkyType skyType, float tickDelta, DimensionSpecialEffects dimensionSpecialEffects, CallbackInfo ci) {
2627
SkyboxManager skyboxManager = SkyboxManager.INSTANCE;
27-
if (!skyboxManager.getActiveSkyboxes().isEmpty()) {
28+
if (OptiBoxesConfig.instance().enabled && !skyboxManager.getActiveSkyboxes().isEmpty()) {
2829
skyboxManager.renderSkyboxes(
2930
this.skyRenderer,
3031
new PoseStack(),

src/main/java/btw/lowercase/optiboxes/skybox/OptiFineCustomSkybox.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package btw.lowercase.optiboxes.skybox;
22

3+
import btw.lowercase.optiboxes.config.OptiBoxesConfig;
34
import btw.lowercase.optiboxes.utils.api.AbstractSkybox;
45
import btw.lowercase.optiboxes.utils.components.Blend;
56
import com.google.common.collect.ImmutableList;
@@ -81,7 +82,7 @@ public void renderSky(SkyRenderer skyRenderer, PoseStack poseStack, float tickDe
8182
// Sunrise/Sunset
8283
if (effects.isSunriseOrSunset(timeOfDay)) {
8384
int sunriseOrSunsetColor = effects.getSunriseOrSunsetColor(timeOfDay);
84-
if (this.level.isRaining() || this.level.isThundering()) {
85+
if (OptiBoxesConfig.instance().useNewSunriseRendering || this.level.isRaining() || this.level.isThundering()) {
8586
// TODO/NOTE: Fix for broken sky when raining/thundering?
8687
skyRenderer.renderSunriseAndSunset(poseStack, bufferSource, sunAngle, sunriseOrSunsetColor);
8788
} else {
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
{
22
"options.optiboxes.title": "OptiBoxes Configuration",
3+
"options.optiboxes.enabled": "Enabled",
4+
"options.optiboxes.enabled.tooltip": "Enable/disable the mod.",
35
"options.optiboxes.process_optifine": "Process OptiFine",
46
"options.optiboxes.process_optifine.tooltip": "If enabled, the mod will attempt to read/load OptiFine Custom Skies.",
57
"options.optiboxes.process_mcpatcher": "Process MCPatcher",
6-
"options.optiboxes.process_mcpatcher.tooltip": "If enabled, the mod will attempt to read/load MCPatcher Custom Skies."
8+
"options.optiboxes.process_mcpatcher.tooltip": "If enabled, the mod will attempt to read/load MCPatcher Custom Skies.",
9+
"options.optiboxes.use_new_sunrise_rendering": "Use New Sunrise/Sunset Rendering",
10+
"options.optiboxes.use_new_sunrise_rendering.tooltip": "Debug setting to enable/disable modern sunrise/sunset sky rendering."
711
}

src/main/resources/fabric.mod.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"btw.lowercase.optiboxes.OptiBoxesClient"
1818
],
1919
"modmenu": [
20-
"btw.lowercase.optiboxes.ModMenuIntegration"
20+
"btw.lowercase.optiboxes.config.ModMenuIntegration"
2121
]
2222
},
2323
"mixins": [

0 commit comments

Comments
 (0)