From 81a437029722b1c70a397b7777d83921e9c5b2e7 Mon Sep 17 00:00:00 2001 From: axolotlmaid Date: Mon, 12 Aug 2024 14:16:27 +0100 Subject: [PATCH] Add profile loading on startup (#17) --- .../optionsprofiles/OptionsProfilesMod.java | 23 ++++++++++++++++++- .../gui/EditProfileScreen.java | 23 +++++++++++++------ .../profiles/ProfileConfiguration.java | 11 ++++----- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/com/axolotlmaid/optionsprofiles/OptionsProfilesMod.java b/common/src/main/java/com/axolotlmaid/optionsprofiles/OptionsProfilesMod.java index 53d289f..674f07f 100644 --- a/common/src/main/java/com/axolotlmaid/optionsprofiles/OptionsProfilesMod.java +++ b/common/src/main/java/com/axolotlmaid/optionsprofiles/OptionsProfilesMod.java @@ -1,13 +1,20 @@ package com.axolotlmaid.optionsprofiles; +import com.axolotlmaid.optionsprofiles.gui.ProfilesList; +import com.axolotlmaid.optionsprofiles.profiles.ProfileConfiguration; import com.axolotlmaid.optionsprofiles.profiles.Profiles; +import net.minecraft.network.chat.Component; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.IOException; +import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; public class OptionsProfilesMod { public static final String MOD_ID = "optionsprofiles"; @@ -24,7 +31,21 @@ public class OptionsProfilesMod { } } - // Update / add configuration for existing profiles + // Add configuration for existing profiles that were made before v1.3 Profiles.updateProfiles(); + + // Loading profiles on startup + try (DirectoryStream directoryStream = Files.newDirectoryStream(Profiles.PROFILES_DIRECTORY)) { + for (Path profile : directoryStream) { + String profileName = profile.getFileName().toString(); + ProfileConfiguration profileConfiguration = ProfileConfiguration.get(profileName); + + if (profileConfiguration.isLoadOnStartup()) { + Profiles.loadProfile(profileName); + } + } + } catch (Exception e) { + OptionsProfilesMod.LOGGER.error("An error occurred when loading startup profiles", e); + } } } diff --git a/common/src/main/java/com/axolotlmaid/optionsprofiles/gui/EditProfileScreen.java b/common/src/main/java/com/axolotlmaid/optionsprofiles/gui/EditProfileScreen.java index 5d9bd81..509eda5 100644 --- a/common/src/main/java/com/axolotlmaid/optionsprofiles/gui/EditProfileScreen.java +++ b/common/src/main/java/com/axolotlmaid/optionsprofiles/gui/EditProfileScreen.java @@ -1,11 +1,9 @@ package com.axolotlmaid.optionsprofiles.gui; +import com.axolotlmaid.optionsprofiles.profiles.ProfileConfiguration; import com.axolotlmaid.optionsprofiles.profiles.Profiles; import net.minecraft.ChatFormatting; -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.components.EditBox; -import net.minecraft.client.gui.components.StringWidget; -import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.layouts.HeaderAndFooterLayout; import net.minecraft.client.gui.layouts.LayoutSettings; import net.minecraft.client.gui.layouts.LinearLayout; @@ -13,10 +11,13 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; +import java.nio.file.Files; + public class EditProfileScreen extends Screen { private final ProfilesScreen profilesScreen; private final HeaderAndFooterLayout layout = new HeaderAndFooterLayout(this, 24, 33); + private final ProfileConfiguration profileConfiguration; private final Component profileName; private EditBox profileNameEdit; @@ -24,6 +25,7 @@ public class EditProfileScreen extends Screen { super(Component.literal(Component.translatable("gui.optionsprofiles.editing-profile-title").getString() + profileName.getString())); this.profilesScreen = profilesScreen; this.profileName = profileName; + this.profileConfiguration = ProfileConfiguration.get(profileName.getString()); } protected void init() { @@ -49,7 +51,6 @@ public class EditProfileScreen extends Screen { this.onClose(); }) .size(150, 20) - .pos(this.width / 2 - 75, 145) .tooltip(Tooltip.create(Component.translatable("gui.optionsprofiles.overwrite-options.tooltip"))) .build(), LayoutSettings::alignHorizontallyCenter @@ -62,7 +63,6 @@ public class EditProfileScreen extends Screen { this.minecraft.setScreen(new EditProfileScreen(profilesScreen, Component.literal(this.profileNameEdit.getValue()))); }) .size(150, 20) - .pos(this.width / 2 - 75, 166) .build(), LayoutSettings::alignHorizontallyCenter ); @@ -71,11 +71,20 @@ public class EditProfileScreen extends Screen { Component.translatable("gui.optionsprofiles.options-toggle").append("..."), (button) -> this.minecraft.setScreen(new OptionsToggleScreen(this, profileName))) .size(150, 20) - .pos(this.width / 2 - 75, 187) .tooltip(Tooltip.create(Component.translatable("gui.optionsprofiles.options-toggle.tooltip"))) .build(), LayoutSettings::alignHorizontallyCenter ); + linearLayoutButtons.addChild( + Checkbox.builder( + Component.literal("Load on startup"), + this.font + ) + .selected(profileConfiguration.isLoadOnStartup()) + .onValueChange((checkbox, value) -> profileConfiguration.setLoadOnStartup(value)) + .build(), + (layoutSettings) -> layoutSettings.alignHorizontallyCenter().paddingTop(5) + ); this.layout.addToFooter( Button.builder( diff --git a/common/src/main/java/com/axolotlmaid/optionsprofiles/profiles/ProfileConfiguration.java b/common/src/main/java/com/axolotlmaid/optionsprofiles/profiles/ProfileConfiguration.java index db5b4f1..7148221 100644 --- a/common/src/main/java/com/axolotlmaid/optionsprofiles/profiles/ProfileConfiguration.java +++ b/common/src/main/java/com/axolotlmaid/optionsprofiles/profiles/ProfileConfiguration.java @@ -17,8 +17,7 @@ public class ProfileConfiguration { private static Path configurationFile; private static String profileName; - public static int configurationVersion = 1; // Used to update configuration in later revisions - private int version = configurationVersion; // ^ same here - this variable is used to show it in the configuration.json file + private boolean loadOnStartup = false; private List optionsToLoad = new ArrayList<>(); public ProfileConfiguration save() { @@ -59,12 +58,12 @@ public class ProfileConfiguration { return configuration; } - public int getVersion() { - return version; + public boolean isLoadOnStartup() { + return loadOnStartup; } - public void setVersion(int version) { - this.version = version; + public void setLoadOnStartup(boolean loadOnStartup) { + this.loadOnStartup = loadOnStartup; } public List getOptionsToLoad() {