Skip to content

Commit 80a9f52

Browse files
committed
Expand GuiModConfig to allow it to be mixed up with custom GUIs.
1 parent 6026d9e commit 80a9f52

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

loader/src/main/java/com/fox2code/foxloader/client/gui/GuiModConfig.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,26 @@ public GuiModConfig(GuiScreen parentScreen, ModContainer modContainer, Object ro
5151
rootInstance.getClass(), modContainer).rootConfigMenu, rootInstance, rootInstance);
5252
}
5353

54+
public GuiModConfig(GuiScreen parentScreen, ModContainer modContainer, Object rootInstance, String path) {
55+
ConfigStructure configStructure = ConfigStructure.parseFromClass(rootInstance.getClass(), modContainer);
56+
ConfigMenu configMenu = configStructure.getInstanceConfigMenu(path);
57+
if (configMenu == null) {
58+
throw new IllegalArgumentException(
59+
"Config object: \"" + configStructure.getConfigClassName() +
60+
"\" does not have a config menu for \"" + path + "\"");
61+
}
62+
Object curInstance = configStructure.getInstanceConfigKey(rootInstance, path);
63+
if (curInstance == null) {
64+
throw new IllegalArgumentException(
65+
"Cannot open a config menu for a null object.");
66+
}
67+
this.parentScreen = parentScreen;
68+
this.modContainer = modContainer;
69+
this.configMenu = configMenu;
70+
this.rootInstance = rootInstance;
71+
this.curInstance = curInstance;
72+
}
73+
5474
private GuiModConfig(GuiScreen parentScreen, ModContainer modContainer, ConfigMenu configMenu,
5575
Object rootInstance, Object curInstance) {
5676
this.parentScreen = parentScreen;

loader/src/main/java/com/fox2code/foxloader/config/ConfigStructure.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,21 @@ private ConfigStructure(Map<String, ConfigKey> configKeyMap, ConfigMenu rootConf
202202
this.modId = modId;
203203
}
204204

205+
public ConfigMenu getInstanceConfigMenu(String path) {
206+
ConfigKey configKey = this.configKeyMap.get(path);
207+
return configKey == null ? null : configKey.configMenu;
208+
}
209+
210+
public Object getInstanceConfigKey(Object configObject, String path) {
211+
Objects.requireNonNull(configObject);
212+
this.cls.cast(configObject);
213+
if (path.isEmpty()) {
214+
return configObject;
215+
}
216+
ConfigKey configKey = this.configKeyMap.get(path);
217+
return Internal.getInstanceConfigKeyImpl(configObject, configKey);
218+
}
219+
205220
public void loadJsonConfig(ObjectElement jsonObject, Object config) {
206221
this.cls.cast(config); // Verify input type
207222
for (ConfigKey configKey : this.configKeyMap.values()) {
@@ -315,6 +330,10 @@ private static void setElementJsonObject(
315330
}
316331
}
317332

333+
public String getConfigClassName() {
334+
return this.cls.getName();
335+
}
336+
318337
public static class Internal {
319338
public static Object getInstanceConfigKeyImpl(Object instance, ConfigKey configKey) {
320339
if (instance == null) return null;

0 commit comments

Comments
 (0)