Skip to content

Commit

Permalink
Revamp ClothConfig config system
Browse files Browse the repository at this point in the history
  • Loading branch information
ThatMG393 committed Feb 27, 2024
1 parent 82117b1 commit 7289e3f
Show file tree
Hide file tree
Showing 8 changed files with 216 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ public class ModConfigManager {
UsefulHUDs.MOD_ID + ".json"
).toString()
);


public static ModConfigData defaultConfig = new ModConfigData();
private static ModConfigData loadedConfig;

public static ModConfigData loadConfig() {
Expand All @@ -39,13 +40,17 @@ public static ModConfigData loadConfig() {
UsefulHUDs.LOGGER.error("An exception occurred! " + e.toString());

UsefulHUDs.LOGGER.info("Using default config instead...");
loadedConfig = new ModConfigData();
loadedConfig = defaultConfig;
saveConfig();
}

return loadedConfig;
}

public static ModConfigData getDefaultConfig() {
return defaultConfig;
}

public static void saveConfig() {
try (FileWriter fileWriter = new FileWriter(CONFIG_PATH)) {
String serializedJson = GSON.toJson(loadedConfig);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.thatmg393.usefulhuds.config.gui.clothconfig;

import com.thatmg393.usefulhuds.UsefulHUDs;
import com.thatmg393.usefulhuds.config.ModConfigManager;
import com.thatmg393.usefulhuds.config.gui.clothconfig.categories.FPSCategory;
import com.thatmg393.usefulhuds.config.gui.clothconfig.categories.STDCategory;

import me.shedaniel.clothconfig2.api.ConfigBuilder;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;

public class ModClothConfigScreen {
public static Screen getConfigGui(Screen parent) {
ConfigBuilder configBuilder = ConfigBuilder.create();
configBuilder.setParentScreen(parent);
configBuilder.setTitle(Text.of("cOnFIG")); // FIXME: Use Text.translatable() instead
configBuilder.setSavingRunnable(() -> {
UsefulHUDs.LOGGER.info("Saving configs...");
ModConfigManager.saveConfig();
});

new FPSCategory().build(configBuilder);
new STDCategory().build(configBuilder);

return configBuilder.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.thatmg393.usefulhuds.config.gui.clothconfig.base;

import java.util.ArrayList;

import com.thatmg393.usefulhuds.config.ModConfigManager;
import com.thatmg393.usefulhuds.config.data.ModConfigData;

import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.text.Text;

public abstract class AbstractConfigCategory {
public final Text title;

public final ConfigEntryBuilder entryBuilder = ConfigEntryBuilder.create();

public final ModConfigData config;
public final ModConfigData defaultConfig;

public AbstractConfigCategory(Text title) {
this.title = title;
this.config = ModConfigManager.loadConfig();
this.defaultConfig = ModConfigManager.getDefaultConfig();
}

@SuppressWarnings("rawtypes")
public abstract ArrayList<AbstractConfigListEntry> getEntries();

public void build(ConfigBuilder configBuilder) {
ConfigCategory cc = configBuilder.getOrCreateCategory(title);
getEntries().stream().parallel()
.forEach(e -> cc.addEntry(e));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.thatmg393.usefulhuds.config.gui.clothconfig.base;

import java.util.ArrayList;

import com.thatmg393.usefulhuds.config.data.ModConfigData;

import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import me.shedaniel.clothconfig2.gui.entries.SubCategoryListEntry;
import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder;
import net.minecraft.text.Text;

public abstract class AbstractConfigSubCategory {
public final Text title;
public final ConfigEntryBuilder entryBuilder;

public final ModConfigData config;
public final ModConfigData defaultConfig;

public AbstractConfigSubCategory(Text title, AbstractConfigCategory cc) {
this.title = title;
this.entryBuilder = cc.entryBuilder;
this.config = cc.config;
this.defaultConfig = cc.defaultConfig;
}

public AbstractConfigSubCategory(Text title, AbstractConfigSubCategory csc) {
this.title = title;
this.entryBuilder = csc.entryBuilder;
this.config = csc.config;
this.defaultConfig = csc.defaultConfig;
}

public abstract ArrayList<AbstractConfigListEntry> getEntries();

public SubCategoryListEntry build() {
SubCategoryBuilder scle = entryBuilder.startSubCategory(title);
scle.addAll(getEntries());
return scle.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.thatmg393.usefulhuds.config.gui.clothconfig.categories;

import java.util.ArrayList;

import com.thatmg393.usefulhuds.config.gui.clothconfig.base.AbstractConfigCategory;
import com.thatmg393.usefulhuds.config.gui.clothconfig.base.AbstractConfigSubCategory;

import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import net.minecraft.text.Text;

public class FPSCategory extends AbstractConfigCategory {
public class SubCategory extends AbstractConfigSubCategory {
public SubCategory() {
super(Text.of("Advanced"), FPSCategory.this);
}

@Override
public ArrayList<AbstractConfigListEntry> getEntries() {
ArrayList<AbstractConfigListEntry> entries = new ArrayList<>();

entries.add(
entryBuilder.startBooleanToggle(
Text.of("Show MinAvgMax"),
config.FPS.ADVANCED.showAdvanceInfo
).setDefaultValue(defaultConfig.FPS.ADVANCED.showAdvanceInfo)
.setSaveConsumer(v -> config.FPS.ADVANCED.showAdvanceInfo = v)
.build()
);

return entries;
}
}

private SubCategory ADVANCED = new SubCategory();

public FPSCategory() {
super(Text.of("FPS"));
}

@Override
public ArrayList<AbstractConfigListEntry> getEntries() {
ArrayList<AbstractConfigListEntry> entries = new ArrayList<>();

entries.add(
entryBuilder.startBooleanToggle(
Text.of("Show HUD"),
config.FPS.showHud
).setDefaultValue(defaultConfig.FPS.showHud)
.setSaveConsumer(nv -> config.FPS.showHud = nv)
.build()
);

entries.add(
entryBuilder.startColorField(
Text.of("HUD Text Color"),
config.FPS.textColor
).setDefaultValue(defaultConfig.FPS.textColor)
.setSaveConsumer(nv -> config.FPS.textColor = nv)
.build()
);

entries.add(ADVANCED.build());
return entries;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.thatmg393.usefulhuds.config.gui.clothconfig.categories;

import java.util.ArrayList;

import com.thatmg393.usefulhuds.config.gui.clothconfig.base.AbstractConfigCategory;

import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import net.minecraft.text.Text;

public class STDCategory extends AbstractConfigCategory {
public STDCategory() {
super(Text.of("SprintToggleDisplay"));
}

@Override
public ArrayList<AbstractConfigListEntry> getEntries() {
ArrayList<AbstractConfigListEntry> entries = new ArrayList<>();

entries.add(
entryBuilder.startBooleanToggle(
Text.of("Show HUD"),
config.STD.showHud
).setDefaultValue(defaultConfig.STD.showHud)
.setSaveConsumer(v -> config.STD.showHud = v)
.build()
);

entries.add(
entryBuilder.startColorField(
Text.of("Text Color"),
config.STD.textColor
).setDefaultValue(config.STD.textColor)
.setSaveConsumer(v -> config.STD.textColor = v)
.build()
);

return entries;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.thatmg393.usefulhuds.config.integrations;

import com.thatmg393.usefulhuds.config.gui.ModClothConfigScreen;
import com.thatmg393.usefulhuds.config.gui.ModFallbackConfigScreen;
import com.thatmg393.usefulhuds.config.gui.clothconfig.ModClothConfigScreen;

import net.fabricmc.loader.api.FabricLoader;

Expand Down

0 comments on commit 7289e3f

Please sign in to comment.