Skip to content

Commit d6dc847

Browse files
authored
Feature update for magiclib-malilib-extra (#146)
* Allow to register custom ConfigManager * Marked ConfigContainer public ctor as deprecated * Fix Vec3iConfig stats doesn't work * Update config screen buttom line stat * Fix SelectorDropDownList text render depth issue in MC 1.18+ * Remove unnecessary import * Adding Config Field Finality check --------- Signed-off-by: Hendrix-Shen <[email protected]>
1 parent a359cd6 commit d6dc847

File tree

24 files changed

+222
-70
lines changed

24 files changed

+222
-70
lines changed

magiclib-core/common/src/main/java/top/hendrixshen/magiclib/MagicLibProperties.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,20 @@ public final class MagicLibProperties {
7272
public static final Option DEV_QOL_THREAD_TWEAK_PRIORITY_MAIN = Option.newOption(
7373
MagicLibProperties.DEV_QOL_THREAD_TWEAK_PRIORITY, Option.InheritType.INDEPENDENT,
7474
"main", "1");
75-
public static final Option MALILIB = Option.newOption(
76-
MagicLibProperties.DEBUG, Option.InheritType.INDEPENDENT, "malilib");
77-
public static final Option MALILIB_CHECK = Option.newOption(
78-
MagicLibProperties.MALILIB, Option.InheritType.INDEPENDENT, "check");
75+
public static final Option DEV_MALILIB = Option.newOption(
76+
MagicLibProperties.DEV, Option.InheritType.INDEPENDENT, "malilib");
77+
public static final Option DEV_MALILIB_CHECK = Option.newOption(
78+
MagicLibProperties.DEV_MALILIB, Option.InheritType.ALLOW_OVERRIDE, "check");
79+
public static final Option MALILIB_CHECK_CONFIG = Option.newOption(
80+
MagicLibProperties.DEV_MALILIB_CHECK, Option.InheritType.ALLOW_OVERRIDE, "config");
7981
public static final Option MALILIB_CHECK_CONFIG_NAME = Option.newOption(
80-
MagicLibProperties.MALILIB, Option.InheritType.INDEPENDENT, "configName");
82+
MagicLibProperties.MALILIB_CHECK_CONFIG, Option.InheritType.ALLOW_OVERRIDE, "name");
8183
public static final Option MALILIB_CHECK_CONFIG_NAME_EMPTY = Option.newOption(
8284
MagicLibProperties.MALILIB_CHECK_CONFIG_NAME, Option.InheritType.ALLOW_OVERRIDE, "empty");
8385
public static final Option MALILIB_CHECK_CONFIG_NAME_CONSISTENCY = Option.newOption(
8486
MagicLibProperties.MALILIB_CHECK_CONFIG_NAME, Option.InheritType.ALLOW_OVERRIDE, "consistency");
87+
public static final Option MALILIB_CHECK_CONFIG_FIELD_FINAL = Option.newOption(
88+
MagicLibProperties.MALILIB_CHECK_CONFIG, Option.InheritType.ALLOW_OVERRIDE, "fieldFinal");
8589

8690
@ApiStatus.Internal
8791
public static void printDetail() {

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/api/malilib/annotation/Config.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package top.hendrixshen.magiclib.api.malilib.annotation;
22

3-
import top.hendrixshen.magiclib.api.dependency.annotation.CompositeDependencies;
4-
53
import java.lang.annotation.ElementType;
64
import java.lang.annotation.Retention;
75
import java.lang.annotation.RetentionPolicy;

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/game/malilib/Configs.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,21 @@ public class Configs {
2424

2525
@Statistic(hotkey = false)
2626
@Config(category = ConfigCategory.GENERIC)
27-
public static MagicConfigHotkey openConfigGui = Configs.cf.newConfigHotkey("openConfigGui", "M,A,G");
27+
public static final MagicConfigHotkey openConfigGui = Configs.cf.newConfigHotkey("openConfigGui", "M,A,G");
2828

2929
@Config(category = ConfigCategory.DEBUG)
30-
public static MagicConfigBoolean debug = Configs.cf.newConfigBoolean("debug", false);
30+
public static final MagicConfigBoolean debug = Configs.cf.newConfigBoolean("debug", false);
3131

3232
@Config(category = ConfigCategory.DEBUG, debugOnly = true)
33-
public static MagicConfigBoolean hideUnavailableConfigs = Configs.cf.newConfigBoolean("hideUnavailableConfigs", true);
33+
public static final MagicConfigBoolean hideUnavailableConfigs = Configs.cf.newConfigBoolean("hideUnavailableConfigs", true);
3434

3535
@Statistic(hotkey = false)
3636
@Config(category = ConfigCategory.DEBUG, debugOnly = true)
37-
public static MagicConfigHotkey resetAllConfigStatistic = Configs.cf.newConfigHotkey("resetAllConfigStatistic");
37+
public static final MagicConfigHotkey resetAllConfigStatistic = Configs.cf.newConfigHotkey("resetAllConfigStatistic");
3838

3939
@Statistic(hotkey = false)
4040
@Config(category = ConfigCategory.DEBUG, debugOnly = true)
41-
public static MagicConfigHotkey resetMagicLibConfigStatistic = Configs.cf.newConfigHotkey("resetMagicLibConfigStatistic");
41+
public static final MagicConfigHotkey resetMagicLibConfigStatistic = Configs.cf.newConfigHotkey("resetMagicLibConfigStatistic");
4242

4343
@Config(category = ConfigCategory.TEST, debugOnly = true)
4444
public static final MagicConfigBoolean testConfigBoolean = Configs.cf.newConfigBoolean("testConfigBoolean", false);
@@ -90,7 +90,7 @@ public class Configs {
9090
require = @Dependency(dependencyType = DependencyType.MOD_ID, value = "dummy-lib", versionPredicates = "*")
9191
)
9292
@Config(category = ConfigCategory.TEST, debugOnly = true)
93-
public static MagicConfigBoolean testDependencies = Configs.cf.newConfigBoolean("testDependencies", false);
93+
public static final MagicConfigBoolean testDependencies = Configs.cf.newConfigBoolean("testDependencies", false);
9494

9595
@Dependencies(
9696
conflict = @Dependency(dependencyType = DependencyType.MOD_ID, value = "minecraft", versionPredicates = "<2.0"),
@@ -104,7 +104,7 @@ public class Configs {
104104
}
105105
)
106106
@Config(category = ConfigCategory.TEST, debugOnly = true)
107-
public static MagicConfigBoolean testDependenciesComposite = Configs.cf.newConfigBoolean("testDependenciesComposite", false);
107+
public static final MagicConfigBoolean testDependenciesComposite = Configs.cf.newConfigBoolean("testDependenciesComposite", false);
108108

109109
public static void init() {
110110
Configs.cm.parseConfigClass(Configs.class);

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/SharedConstants.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package top.hendrixshen.magiclib.impl.malilib;
22

3+
import fi.dy.masa.malilib.gui.GuiBase;
34
import lombok.Getter;
45
import org.jetbrains.annotations.NotNull;
6+
import top.hendrixshen.magiclib.api.i18n.I18n;
57
import top.hendrixshen.magiclib.api.malilib.config.MagicConfigManager;
68
import top.hendrixshen.magiclib.impl.malilib.config.GlobalConfigManager;
79
import top.hendrixshen.magiclib.impl.malilib.config.MagicConfigHandler;
@@ -26,4 +28,14 @@ public class SharedConstants {
2628
public static @NotNull String getTranslatedModVersionType() {
2729
return VersionUtil.translateVersionType(SharedConstants.modVersion);
2830
}
31+
32+
public static String getColoredEnableStateText(boolean enable) {
33+
return enable ?
34+
GuiBase.TXT_DARK_GREEN +
35+
I18n.tr("magiclib.config.gui.element.enable_state.enabled") +
36+
GuiBase.TXT_RST :
37+
GuiBase.TXT_DARK_RED +
38+
I18n.tr("magiclib.config.gui.element.enable_state.disabled") +
39+
GuiBase.TXT_RST;
40+
}
2941
}

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/ConfigContainer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import lombok.Getter;
2727
import lombok.Setter;
2828
import lombok.SneakyThrows;
29-
import org.jetbrains.annotations.ApiStatus;
3029
import org.jetbrains.annotations.NotNull;
3130
import org.jetbrains.annotations.Nullable;
3231
import top.hendrixshen.magiclib.api.i18n.I18n;
@@ -118,7 +117,10 @@ private static Field assertFieldObjectValid(Field field) {
118117
return field;
119118
}
120119

121-
@ApiStatus.Obsolete
120+
/**
121+
* Use {@link ConfigContainer#createIsolated} instead.
122+
*/
123+
@Deprecated
122124
public ConfigContainer(@NotNull Config configAnnotation, @NotNull Field field, MagicIConfigBase config) {
123125
this(field, config, null);
124126
}

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/GlobalConfigManager.java

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.google.common.collect.Lists;
44
import com.google.common.collect.Maps;
55
import fi.dy.masa.malilib.event.InputEventHandler;
6+
import lombok.AccessLevel;
67
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
79
import org.jetbrains.annotations.NotNull;
810
import top.hendrixshen.magiclib.api.malilib.config.MagicConfigManager;
911
import top.hendrixshen.magiclib.api.malilib.config.option.MagicIConfigBase;
@@ -13,6 +15,7 @@
1315
import java.util.List;
1416
import java.util.Map;
1517

18+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
1619
public final class GlobalConfigManager {
1720
@Getter(lazy = true)
1821
private static final GlobalConfigManager instance = new GlobalConfigManager();
@@ -21,7 +24,24 @@ public final class GlobalConfigManager {
2124
private final List<ConfigContainer> CONTAINERS = Lists.newArrayList();
2225
private final Map<MagicIConfigBase, ConfigContainer> CONFIG_TO_CONTAINER = Maps.newLinkedHashMap();
2326

24-
private GlobalConfigManager() {
27+
public static void registerConfigManager(@NotNull MagicConfigManager configManager) {
28+
if (GlobalConfigManager.getInstance().managers.containsKey(configManager.getIdentifier())) {
29+
throw new IllegalArgumentException("Duplicate config manager: " + configManager.getIdentifier());
30+
}
31+
32+
GlobalConfigManager.getInstance().managers.put(configManager.getIdentifier(), configManager);
33+
}
34+
35+
public static @NotNull MagicConfigManager getConfigManager(String identifier) {
36+
MagicConfigManager configManager = GlobalConfigManager.getInstance().managers.get(identifier);
37+
38+
if (configManager == null) {
39+
configManager = new MagicConfigManagerImpl(identifier);
40+
GlobalConfigManager.getInstance().managers.put(identifier, configManager);
41+
InputEventHandler.getKeybindManager().registerKeybindProvider((MagicConfigManagerImpl) configManager);
42+
}
43+
44+
return configManager;
2545
}
2646

2747
void registerConfigContainer(ConfigContainer configContainer) {
@@ -40,16 +60,4 @@ void registerConfigContainer(ConfigContainer configContainer) {
4060
public boolean hasConfig(MagicIConfigBase config) {
4161
return this.getContainerByConfig(config).isPresent();
4262
}
43-
44-
public static @NotNull MagicConfigManager getConfigManager(String identifier) {
45-
MagicConfigManager configManager = GlobalConfigManager.getInstance().managers.get(identifier);
46-
47-
if (configManager == null) {
48-
configManager = new MagicConfigManagerImpl(identifier);
49-
GlobalConfigManager.getInstance().managers.put(identifier, configManager);
50-
InputEventHandler.getKeybindManager().registerKeybindProvider((MagicConfigManagerImpl) configManager);
51-
}
52-
53-
return configManager;
54-
}
5563
}

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/MagicConfigManagerImpl.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import top.hendrixshen.magiclib.util.collect.ValueContainer;
1818

1919
import java.lang.reflect.Field;
20+
import java.lang.reflect.Modifier;
2021
import java.util.*;
2122
import java.util.stream.Collectors;
2223

@@ -58,19 +59,23 @@ public final void parseConfigClass(@NotNull Class<?> configClass) {
5859

5960
ConfigContainer configContainer = ConfigContainer.createRegulated(field, this);
6061

62+
if (this.NAME_TO_CONTAINER.containsKey(configContainer.getName())) {
63+
MagicLib.getLogger().error("Config {} already exists", configContainer.getName());
64+
continue;
65+
}
66+
6167
if (MagicLibProperties.MALILIB_CHECK_CONFIG_NAME_EMPTY.getBooleanValue() && configContainer.getName().isEmpty()) {
6268
MagicLib.getLogger().warn("Config name is empty (field name = {})!", field.getName());
6369
}
6470

6571
if (MagicLibProperties.MALILIB_CHECK_CONFIG_NAME_CONSISTENCY.getBooleanValue() &&
66-
configContainer.getName().equals(field.getName())) {
72+
!configContainer.getName().equals(field.getName())) {
6773
MagicLib.getLogger().warn("Config name {} does not match field name {}!",
6874
configContainer.getName(), field.getName());
6975
}
7076

71-
if (this.NAME_TO_CONTAINER.containsKey(configContainer.getName())) {
72-
MagicLib.getLogger().error("Config {} already exists", configContainer.getName());
73-
continue;
77+
if (MagicLibProperties.MALILIB_CHECK_CONFIG_FIELD_FINAL.getBooleanValue() && !Modifier.isFinal(field.getModifiers())) {
78+
MagicLib.getLogger().warn("Field {} should be final!", field.getName());
7479
}
7580

7681
this.CONTAINERS.add(configContainer);

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/gui/ConfigButtonBooleanSwitch.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@
2020

2121
package top.hendrixshen.magiclib.impl.malilib.config.gui;
2222

23-
import fi.dy.masa.malilib.gui.GuiBase;
2423
import fi.dy.masa.malilib.gui.button.ButtonGeneric;
25-
import top.hendrixshen.magiclib.api.i18n.I18n;
2624
import top.hendrixshen.magiclib.api.malilib.config.option.HotkeyWithSwitch;
25+
import top.hendrixshen.magiclib.impl.malilib.SharedConstants;
2726

2827
/**
2928
* Reference to <a href="https://github.com/Fallen-Breath/tweakermore/blob/10e1a937aadcefb1f2d9d9bab8badc873d4a5b3d/src/main/java/me/fallenbreath/tweakermore/gui/ConfigButtonBooleanSwitch.java">TweakerMore</a>
@@ -46,12 +45,6 @@ protected boolean onMouseClickedImpl(int mouseX, int mouseY, int mouseButton) {
4645

4746
@Override
4847
public void updateDisplayString() {
49-
if (this.config.getEnableState()) {
50-
this.displayString = GuiBase.TXT_DARK_GREEN +
51-
I18n.tr("magiclib.config.gui.element.config_button_boolean_switch.enabled") + GuiBase.TXT_RST;
52-
} else {
53-
this.displayString = GuiBase.TXT_DARK_RED +
54-
I18n.tr("magiclib.config.gui.element.config_button_boolean_switch.disabled") + GuiBase.TXT_RST;
55-
}
48+
this.displayString = SharedConstants.getColoredEnableStateText(this.config.getEnableState());
5649
}
5750
}

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/gui/GuiVec3iEdit.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import fi.dy.masa.malilib.gui.interfaces.IDialogHandler;
66
import fi.dy.masa.malilib.render.RenderUtils;
77
import lombok.Getter;
8-
import net.minecraft.client.Minecraft;
98
import net.minecraft.client.gui.screens.Screen;
109
import org.jetbrains.annotations.Nullable;
1110
import org.lwjgl.glfw.GLFW;
@@ -19,6 +18,10 @@
1918
import com.mojang.blaze3d.vertex.PoseStack;
2019
//#endif
2120

21+
//#if MC < 11700
22+
import net.minecraft.client.Minecraft;
23+
//#endif
24+
2225
public class GuiVec3iEdit extends GuiBase {
2326
@Getter
2427
protected final ConfigVec3i config;

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/gui/GuiVec3iListEdit.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import fi.dy.masa.malilib.render.RenderUtils;
77
import fi.dy.masa.malilib.util.GuiUtils;
88
import lombok.Getter;
9-
import net.minecraft.client.Minecraft;
109
import net.minecraft.client.gui.screens.Screen;
1110
import net.minecraft.core.Vec3i;
1211
import org.jetbrains.annotations.Nullable;
@@ -22,6 +21,10 @@
2221
import com.mojang.blaze3d.vertex.PoseStack;
2322
//#endif
2423

24+
//#if MC < 11700
25+
import net.minecraft.client.Minecraft;
26+
//#endif
27+
2528
public class GuiVec3iListEdit extends GuiListBase<Vec3i, WidgetVec3iListEditEntry, WidgetListVec3iListEdit> {
2629
@Getter
2730
protected final ConfigVec3iList config;

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/gui/GuiVec3iTupleEdit.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import fi.dy.masa.malilib.gui.interfaces.IDialogHandler;
66
import fi.dy.masa.malilib.render.RenderUtils;
77
import lombok.Getter;
8-
import net.minecraft.client.Minecraft;
98
import net.minecraft.client.gui.screens.Screen;
109
import org.jetbrains.annotations.Nullable;
1110
import org.lwjgl.glfw.GLFW;
@@ -19,6 +18,10 @@
1918
import com.mojang.blaze3d.vertex.PoseStack;
2019
//#endif
2120

21+
//#if MC < 11700
22+
import net.minecraft.client.Minecraft;
23+
//#endif
24+
2225
public class GuiVec3iTupleEdit extends GuiBase {
2326
@Getter
2427
protected final ConfigVec3iTuple config;

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/gui/GuiVec3iTupleListEdit.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import fi.dy.masa.malilib.render.RenderUtils;
77
import fi.dy.masa.malilib.util.GuiUtils;
88
import lombok.Getter;
9-
import net.minecraft.client.Minecraft;
109
import net.minecraft.client.gui.screens.Screen;
1110
import org.jetbrains.annotations.Nullable;
1211
import org.lwjgl.glfw.GLFW;
@@ -21,6 +20,10 @@
2120
import com.mojang.blaze3d.vertex.PoseStack;
2221
//#endif
2322

23+
//#if MC < 11700
24+
import net.minecraft.client.Minecraft;
25+
//#endif
26+
2427
public class GuiVec3iTupleListEdit extends GuiListBase<ConfigVec3iTupleList.Entry, WidgetVec3iTupleListEditEntry, WidgetListVec3iTupleListEdit> {
2528
@Getter
2629
protected final ConfigVec3iTupleList config;

magiclib-malilib-extra/src/main/java/top/hendrixshen/magiclib/impl/malilib/config/gui/MagicConfigGui.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import fi.dy.masa.malilib.gui.GuiTextFieldGeneric;
2929
import fi.dy.masa.malilib.gui.button.ButtonGeneric;
3030
import fi.dy.masa.malilib.gui.widgets.WidgetBase;
31+
import fi.dy.masa.malilib.gui.widgets.WidgetHoverInfo;
3132
import fi.dy.masa.malilib.gui.widgets.WidgetSearchBar;
3233
import fi.dy.masa.malilib.interfaces.IStringValue;
3334
import lombok.Getter;
@@ -38,6 +39,7 @@
3839
import top.hendrixshen.magiclib.api.malilib.annotation.Config;
3940
import top.hendrixshen.magiclib.api.malilib.config.MagicConfigManager;
4041
import top.hendrixshen.magiclib.api.malilib.config.option.MagicIConfigBase;
42+
import top.hendrixshen.magiclib.impl.malilib.SharedConstants;
4143
import top.hendrixshen.magiclib.impl.malilib.config.ConfigContainer;
4244
import top.hendrixshen.magiclib.mixin.malilib.accessor.WidgetSearchBarAccessor;
4345
import top.hendrixshen.magiclib.util.minecraft.render.RenderUtil;
@@ -209,8 +211,18 @@ private void initBottomLine() {
209211
int available = 0;
210212
int unavailable = 0;
211213
int modified = 0;
214+
int debugOnly = 0;
215+
int devOnly = 0;
212216

213217
for (ConfigContainer config : this.getCurrentContainers()) {
218+
if (config.isDebugOnly()) {
219+
debugOnly++;
220+
}
221+
222+
if (config.isDevOnly()) {
223+
devOnly++;
224+
}
225+
214226
if (this.isValidConfig(config) && config.isSatisfied()) {
215227
if (config.getConfig() instanceof IConfigResettable &&
216228
((IConfigResettable) config.getConfig()).isModified()) {
@@ -224,12 +236,20 @@ private void initBottomLine() {
224236
}
225237

226238
int total = available + unavailable;
227-
String stats = I18n.tr("magiclib.config.gui.bottom_line.stat", total, available, unavailable, modified);
239+
String stats = I18n.tr("magiclib.config.gui.bottom_line.stat", available, modified);
228240
int width = RenderUtil.getRenderWidth(stats);
229241
int height = RenderUtil.TEXT_HEIGHT;
230242
int x = 10;
231243
int y = this.height - height - GuiBase.TOP;
244+
WidgetHoverInfo widgetHoverInfo = new WidgetHoverInfo(x, y - 2, width, height + 4,
245+
I18n.tr("magiclib.config.gui.bottom_line.stat.hover",
246+
available, unavailable, total,
247+
modified, debugOnly, devOnly,
248+
SharedConstants.getColoredEnableStateText(this.isDebug()),
249+
SharedConstants.getColoredEnableStateText(this.hideUnAvailableConfigs())
250+
));
232251
this.addLabel(x, y, width, height, 0xFFAAAAAA, stats);
252+
this.addWidget(widgetHoverInfo);
233253
}
234254

235255
private int initSortingStrategyDropDownList(int x) {

0 commit comments

Comments
 (0)