feat: add mod configuration (#34)

This commit is contained in:
trafficlunar 2025-02-28 22:53:38 +00:00
parent ebc2948e0f
commit 4eb068a2a1
4 changed files with 84 additions and 13 deletions

View file

@ -4,6 +4,7 @@ import dev.architectury.event.events.common.CommandRegistrationEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.commands.Commands;
import net.trafficlunar.optionsprofiles.gui.ProfilesScreen;
import net.trafficlunar.optionsprofiles.profiles.OptionsProfilesModConfiguration;
import net.trafficlunar.optionsprofiles.profiles.Profiles;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -16,6 +17,7 @@ import java.nio.file.Paths;
public class OptionsProfilesMod {
public static final String MOD_ID = "optionsprofiles";
public static final Logger LOGGER = LogManager.getLogger("Options Profiles");
private static OptionsProfilesModConfiguration CONFIG;
public static void init() {
Path profilesDirectory = Paths.get("options-profiles");
@ -28,6 +30,8 @@ public class OptionsProfilesMod {
}
}
CONFIG = OptionsProfilesModConfiguration.load();
// Update / add configuration for existing profiles
Profiles.updateProfiles();
@ -41,4 +45,12 @@ public class OptionsProfilesMod {
})
)));
}
public static OptionsProfilesModConfiguration config() {
if (CONFIG == null) {
throw new IllegalStateException("Config not yet available");
} else {
return CONFIG;
}
}
}

View file

@ -0,0 +1,59 @@
package net.trafficlunar.optionsprofiles.profiles;
import net.trafficlunar.optionsprofiles.OptionsProfilesMod;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class OptionsProfilesModConfiguration {
private static Path configurationFile;
private boolean showProfilesButton = true;
public OptionsProfilesModConfiguration save() {
OptionsProfilesModConfiguration configuration = new OptionsProfilesModConfiguration();
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
try (BufferedWriter writer = Files.newBufferedWriter(configurationFile)) {
gson.toJson(this, writer);
OptionsProfilesMod.LOGGER.info("Main configuration saved");
} catch (IOException e) {
OptionsProfilesMod.LOGGER.error("Unable to write main configuration.json!", e);
}
return configuration;
}
public static OptionsProfilesModConfiguration load() {
OptionsProfilesModConfiguration configuration = new OptionsProfilesModConfiguration();
configurationFile = Profiles.PROFILES_DIRECTORY.resolve("configuration.json");
if (Files.notExists(configurationFile))
configuration.save();
try (BufferedReader reader = Files.newBufferedReader(configurationFile)) {
Gson gson = new Gson();
configuration = gson.fromJson(reader, OptionsProfilesModConfiguration.class);
} catch (IOException e) {
OptionsProfilesMod.LOGGER.error("An error occurred when reading the main configuration.json", e);
}
return configuration;
}
public boolean shouldShowProfilesButton() {
return showProfilesButton;
}
public void setShowProfilesButton(boolean showProfilesButton) {
this.showProfilesButton = showProfilesButton;
}
}

View file

@ -4,6 +4,7 @@ import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.options.OptionsScreen;
import net.minecraft.network.chat.Component;
import net.trafficlunar.optionsprofiles.OptionsProfilesMod;
import net.trafficlunar.optionsprofiles.gui.ProfilesScreen;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@ -22,6 +23,7 @@ public class MixinOptionsScreen extends Screen {
@Inject(at = @At("HEAD"), method = "init")
private void init(CallbackInfo info) {
if (OptionsProfilesMod.config().shouldShowProfilesButton()) {
this.addRenderableWidget(
Button.builder(
Component.translatable("gui.optionsprofiles.profiles-menu"),
@ -32,3 +34,4 @@ public class MixinOptionsScreen extends Screen {
);
}
}
}

View file

@ -13,7 +13,6 @@ import java.util.ArrayList;
import java.util.List;
public class ProfileConfiguration {
private static final Path profilesDirectory = Profiles.PROFILES_DIRECTORY;
private static Path configurationFile;
private static String profileName;
@ -41,13 +40,11 @@ public class ProfileConfiguration {
public static ProfileConfiguration get(String profile_name) {
ProfileConfiguration configuration = new ProfileConfiguration();
Path profile = profilesDirectory.resolve(profile_name);
configurationFile = profile.resolve("configuration.json");
configurationFile = Profiles.PROFILES_DIRECTORY.resolve(profile_name).resolve("configuration.json");
profileName = profile_name;
if (Files.notExists(configurationFile)) {
if (Files.notExists(configurationFile))
configuration.save();
}
try (BufferedReader reader = Files.newBufferedReader(configurationFile)) {
Gson gson = new Gson();