Skip to content

Feature update for magiclib-malilib-extra #146

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,20 @@ public final class MagicLibProperties {
public static final Option DEV_QOL_THREAD_TWEAK_PRIORITY_MAIN = Option.newOption(
MagicLibProperties.DEV_QOL_THREAD_TWEAK_PRIORITY, Option.InheritType.INDEPENDENT,
"main", "1");
public static final Option MALILIB = Option.newOption(
MagicLibProperties.DEBUG, Option.InheritType.INDEPENDENT, "malilib");
public static final Option MALILIB_CHECK = Option.newOption(
MagicLibProperties.MALILIB, Option.InheritType.INDEPENDENT, "check");
public static final Option DEV_MALILIB = Option.newOption(
MagicLibProperties.DEV, Option.InheritType.INDEPENDENT, "malilib");
public static final Option DEV_MALILIB_CHECK = Option.newOption(
MagicLibProperties.DEV_MALILIB, Option.InheritType.ALLOW_OVERRIDE, "check");
public static final Option MALILIB_CHECK_CONFIG = Option.newOption(
MagicLibProperties.DEV_MALILIB_CHECK, Option.InheritType.ALLOW_OVERRIDE, "config");
public static final Option MALILIB_CHECK_CONFIG_NAME = Option.newOption(
MagicLibProperties.MALILIB, Option.InheritType.INDEPENDENT, "configName");
MagicLibProperties.MALILIB_CHECK_CONFIG, Option.InheritType.ALLOW_OVERRIDE, "name");
public static final Option MALILIB_CHECK_CONFIG_NAME_EMPTY = Option.newOption(
MagicLibProperties.MALILIB_CHECK_CONFIG_NAME, Option.InheritType.ALLOW_OVERRIDE, "empty");
public static final Option MALILIB_CHECK_CONFIG_NAME_CONSISTENCY = Option.newOption(
MagicLibProperties.MALILIB_CHECK_CONFIG_NAME, Option.InheritType.ALLOW_OVERRIDE, "consistency");
public static final Option MALILIB_CHECK_CONFIG_FIELD_FINAL = Option.newOption(
MagicLibProperties.MALILIB_CHECK_CONFIG, Option.InheritType.ALLOW_OVERRIDE, "fieldFinal");

@ApiStatus.Internal
public static void printDetail() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package top.hendrixshen.magiclib.api.malilib.annotation;

import top.hendrixshen.magiclib.api.dependency.annotation.CompositeDependencies;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,21 @@ public class Configs {

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

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

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

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

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

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

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

public static void init() {
Configs.cm.parseConfigClass(Configs.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package top.hendrixshen.magiclib.impl.malilib;

import fi.dy.masa.malilib.gui.GuiBase;
import lombok.Getter;
import org.jetbrains.annotations.NotNull;
import top.hendrixshen.magiclib.api.i18n.I18n;
import top.hendrixshen.magiclib.api.malilib.config.MagicConfigManager;
import top.hendrixshen.magiclib.impl.malilib.config.GlobalConfigManager;
import top.hendrixshen.magiclib.impl.malilib.config.MagicConfigHandler;
Expand All @@ -26,4 +28,14 @@ public class SharedConstants {
public static @NotNull String getTranslatedModVersionType() {
return VersionUtil.translateVersionType(SharedConstants.modVersion);
}

public static String getColoredEnableStateText(boolean enable) {
return enable ?
GuiBase.TXT_DARK_GREEN +
I18n.tr("magiclib.config.gui.element.enable_state.enabled") +
GuiBase.TXT_RST :
GuiBase.TXT_DARK_RED +
I18n.tr("magiclib.config.gui.element.enable_state.disabled") +
GuiBase.TXT_RST;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import top.hendrixshen.magiclib.api.i18n.I18n;
Expand Down Expand Up @@ -118,7 +117,10 @@ private static Field assertFieldObjectValid(Field field) {
return field;
}

@ApiStatus.Obsolete
/**
* Use {@link ConfigContainer#createIsolated} instead.
*/
@Deprecated
public ConfigContainer(@NotNull Config configAnnotation, @NotNull Field field, MagicIConfigBase config) {
this(field, config, null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import fi.dy.masa.malilib.event.InputEventHandler;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;
import top.hendrixshen.magiclib.api.malilib.config.MagicConfigManager;
import top.hendrixshen.magiclib.api.malilib.config.option.MagicIConfigBase;
Expand All @@ -13,6 +15,7 @@
import java.util.List;
import java.util.Map;

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

private GlobalConfigManager() {
public static void registerConfigManager(@NotNull MagicConfigManager configManager) {
if (GlobalConfigManager.getInstance().managers.containsKey(configManager.getIdentifier())) {
throw new IllegalArgumentException("Duplicate config manager: " + configManager.getIdentifier());
}

GlobalConfigManager.getInstance().managers.put(configManager.getIdentifier(), configManager);
}

public static @NotNull MagicConfigManager getConfigManager(String identifier) {
MagicConfigManager configManager = GlobalConfigManager.getInstance().managers.get(identifier);

if (configManager == null) {
configManager = new MagicConfigManagerImpl(identifier);
GlobalConfigManager.getInstance().managers.put(identifier, configManager);
InputEventHandler.getKeybindManager().registerKeybindProvider((MagicConfigManagerImpl) configManager);
}

return configManager;
}

void registerConfigContainer(ConfigContainer configContainer) {
Expand All @@ -40,16 +60,4 @@ void registerConfigContainer(ConfigContainer configContainer) {
public boolean hasConfig(MagicIConfigBase config) {
return this.getContainerByConfig(config).isPresent();
}

public static @NotNull MagicConfigManager getConfigManager(String identifier) {
MagicConfigManager configManager = GlobalConfigManager.getInstance().managers.get(identifier);

if (configManager == null) {
configManager = new MagicConfigManagerImpl(identifier);
GlobalConfigManager.getInstance().managers.put(identifier, configManager);
InputEventHandler.getKeybindManager().registerKeybindProvider((MagicConfigManagerImpl) configManager);
}

return configManager;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import top.hendrixshen.magiclib.util.collect.ValueContainer;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.stream.Collectors;

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

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

if (this.NAME_TO_CONTAINER.containsKey(configContainer.getName())) {
MagicLib.getLogger().error("Config {} already exists", configContainer.getName());
continue;
}

if (MagicLibProperties.MALILIB_CHECK_CONFIG_NAME_EMPTY.getBooleanValue() && configContainer.getName().isEmpty()) {
MagicLib.getLogger().warn("Config name is empty (field name = {})!", field.getName());
}

if (MagicLibProperties.MALILIB_CHECK_CONFIG_NAME_CONSISTENCY.getBooleanValue() &&
configContainer.getName().equals(field.getName())) {
!configContainer.getName().equals(field.getName())) {
MagicLib.getLogger().warn("Config name {} does not match field name {}!",
configContainer.getName(), field.getName());
}

if (this.NAME_TO_CONTAINER.containsKey(configContainer.getName())) {
MagicLib.getLogger().error("Config {} already exists", configContainer.getName());
continue;
if (MagicLibProperties.MALILIB_CHECK_CONFIG_FIELD_FINAL.getBooleanValue() && !Modifier.isFinal(field.getModifiers())) {
MagicLib.getLogger().warn("Field {} should be final!", field.getName());
}

this.CONTAINERS.add(configContainer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,9 @@

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

import fi.dy.masa.malilib.gui.GuiBase;
import fi.dy.masa.malilib.gui.button.ButtonGeneric;
import top.hendrixshen.magiclib.api.i18n.I18n;
import top.hendrixshen.magiclib.api.malilib.config.option.HotkeyWithSwitch;
import top.hendrixshen.magiclib.impl.malilib.SharedConstants;

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

@Override
public void updateDisplayString() {
if (this.config.getEnableState()) {
this.displayString = GuiBase.TXT_DARK_GREEN +
I18n.tr("magiclib.config.gui.element.config_button_boolean_switch.enabled") + GuiBase.TXT_RST;
} else {
this.displayString = GuiBase.TXT_DARK_RED +
I18n.tr("magiclib.config.gui.element.config_button_boolean_switch.disabled") + GuiBase.TXT_RST;
}
this.displayString = SharedConstants.getColoredEnableStateText(this.config.getEnableState());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import fi.dy.masa.malilib.gui.interfaces.IDialogHandler;
import fi.dy.masa.malilib.render.RenderUtils;
import lombok.Getter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.glfw.GLFW;
Expand All @@ -19,6 +18,10 @@
import com.mojang.blaze3d.vertex.PoseStack;
//#endif

//#if MC < 11700
import net.minecraft.client.Minecraft;
//#endif

public class GuiVec3iEdit extends GuiBase {
@Getter
protected final ConfigVec3i config;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import fi.dy.masa.malilib.render.RenderUtils;
import fi.dy.masa.malilib.util.GuiUtils;
import lombok.Getter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.Vec3i;
import org.jetbrains.annotations.Nullable;
Expand All @@ -22,6 +21,10 @@
import com.mojang.blaze3d.vertex.PoseStack;
//#endif

//#if MC < 11700
import net.minecraft.client.Minecraft;
//#endif

public class GuiVec3iListEdit extends GuiListBase<Vec3i, WidgetVec3iListEditEntry, WidgetListVec3iListEdit> {
@Getter
protected final ConfigVec3iList config;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import fi.dy.masa.malilib.gui.interfaces.IDialogHandler;
import fi.dy.masa.malilib.render.RenderUtils;
import lombok.Getter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.glfw.GLFW;
Expand All @@ -19,6 +18,10 @@
import com.mojang.blaze3d.vertex.PoseStack;
//#endif

//#if MC < 11700
import net.minecraft.client.Minecraft;
//#endif

public class GuiVec3iTupleEdit extends GuiBase {
@Getter
protected final ConfigVec3iTuple config;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import fi.dy.masa.malilib.render.RenderUtils;
import fi.dy.masa.malilib.util.GuiUtils;
import lombok.Getter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.glfw.GLFW;
Expand All @@ -21,6 +20,10 @@
import com.mojang.blaze3d.vertex.PoseStack;
//#endif

//#if MC < 11700
import net.minecraft.client.Minecraft;
//#endif

public class GuiVec3iTupleListEdit extends GuiListBase<ConfigVec3iTupleList.Entry, WidgetVec3iTupleListEditEntry, WidgetListVec3iTupleListEdit> {
@Getter
protected final ConfigVec3iTupleList config;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import fi.dy.masa.malilib.gui.GuiTextFieldGeneric;
import fi.dy.masa.malilib.gui.button.ButtonGeneric;
import fi.dy.masa.malilib.gui.widgets.WidgetBase;
import fi.dy.masa.malilib.gui.widgets.WidgetHoverInfo;
import fi.dy.masa.malilib.gui.widgets.WidgetSearchBar;
import fi.dy.masa.malilib.interfaces.IStringValue;
import lombok.Getter;
Expand All @@ -38,6 +39,7 @@
import top.hendrixshen.magiclib.api.malilib.annotation.Config;
import top.hendrixshen.magiclib.api.malilib.config.MagicConfigManager;
import top.hendrixshen.magiclib.api.malilib.config.option.MagicIConfigBase;
import top.hendrixshen.magiclib.impl.malilib.SharedConstants;
import top.hendrixshen.magiclib.impl.malilib.config.ConfigContainer;
import top.hendrixshen.magiclib.mixin.malilib.accessor.WidgetSearchBarAccessor;
import top.hendrixshen.magiclib.util.minecraft.render.RenderUtil;
Expand Down Expand Up @@ -209,8 +211,18 @@ private void initBottomLine() {
int available = 0;
int unavailable = 0;
int modified = 0;
int debugOnly = 0;
int devOnly = 0;

for (ConfigContainer config : this.getCurrentContainers()) {
if (config.isDebugOnly()) {
debugOnly++;
}

if (config.isDevOnly()) {
devOnly++;
}

if (this.isValidConfig(config) && config.isSatisfied()) {
if (config.getConfig() instanceof IConfigResettable &&
((IConfigResettable) config.getConfig()).isModified()) {
Expand All @@ -224,12 +236,20 @@ private void initBottomLine() {
}

int total = available + unavailable;
String stats = I18n.tr("magiclib.config.gui.bottom_line.stat", total, available, unavailable, modified);
String stats = I18n.tr("magiclib.config.gui.bottom_line.stat", available, modified);
int width = RenderUtil.getRenderWidth(stats);
int height = RenderUtil.TEXT_HEIGHT;
int x = 10;
int y = this.height - height - GuiBase.TOP;
WidgetHoverInfo widgetHoverInfo = new WidgetHoverInfo(x, y - 2, width, height + 4,
I18n.tr("magiclib.config.gui.bottom_line.stat.hover",
available, unavailable, total,
modified, debugOnly, devOnly,
SharedConstants.getColoredEnableStateText(this.isDebug()),
SharedConstants.getColoredEnableStateText(this.hideUnAvailableConfigs())
));
this.addLabel(x, y, width, height, 0xFFAAAAAA, stats);
this.addWidget(widgetHoverInfo);
}

private int initSortingStrategyDropDownList(int x) {
Expand Down
Loading