diff --git a/common/src/main/java/io/github/notenoughupdates/moulconfig/processor/BuiltinMoulConfigGuis.java b/common/src/main/java/io/github/notenoughupdates/moulconfig/processor/BuiltinMoulConfigGuis.java index 998ba3ba7..034902b18 100644 --- a/common/src/main/java/io/github/notenoughupdates/moulconfig/processor/BuiltinMoulConfigGuis.java +++ b/common/src/main/java/io/github/notenoughupdates/moulconfig/processor/BuiltinMoulConfigGuis.java @@ -57,7 +57,8 @@ public static void addProcessors(MoulConfigProcessor processor) { processor.registerConfigEditor(ConfigLink.class, ((option, configLink) -> { Field field; try { - field = configLink.owner().getField(configLink.field()); + field = configLink.owner().getDeclaredField(configLink.field()); + field.setAccessible(true); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } diff --git a/common/src/main/java/io/github/notenoughupdates/moulconfig/processor/ConfigProcessorDriver.java b/common/src/main/java/io/github/notenoughupdates/moulconfig/processor/ConfigProcessorDriver.java index e6205febc..acc62eecf 100644 --- a/common/src/main/java/io/github/notenoughupdates/moulconfig/processor/ConfigProcessorDriver.java +++ b/common/src/main/java/io/github/notenoughupdates/moulconfig/processor/ConfigProcessorDriver.java @@ -22,7 +22,13 @@ import com.google.gson.annotations.Expose; import io.github.notenoughupdates.moulconfig.Config; -import io.github.notenoughupdates.moulconfig.annotations.*; +import io.github.notenoughupdates.moulconfig.annotations.Accordion; +import io.github.notenoughupdates.moulconfig.annotations.Category; +import io.github.notenoughupdates.moulconfig.annotations.ConfigAccordionId; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorAccordion; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorButton; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorInfoText; +import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; import io.github.notenoughupdates.moulconfig.internal.BoundField; import io.github.notenoughupdates.moulconfig.internal.Warnings; import lombok.var; @@ -30,7 +36,12 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Modifier; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.Stack; public class ConfigProcessorDriver { private final List> nonStoredConfigOptions = Arrays.asList( @@ -40,6 +51,8 @@ public class ConfigProcessorDriver { public final ConfigStructureReader reader; + public boolean warnForPrivateFields = true; + public int nextAnnotation = 1000000000; public boolean checkExpose = true; @@ -67,14 +80,15 @@ public void processCategory(Object categoryObject, ConfigOption optionAnnotation = field.getAnnotation(ConfigOption.class); if (optionAnnotation == null) continue; if (checkExpose && field.getAnnotation(Expose.class) == null - && (field.getModifiers() & Modifier.TRANSIENT) == 0 - && nonStoredConfigOptions.stream().noneMatch(field::isAnnotationPresent)) { + && (field.getModifiers() & Modifier.TRANSIENT) == 0 + && nonStoredConfigOptions.stream().noneMatch(field::isAnnotationPresent)) { Warnings.warn("Non transient @ConfigOption without @Expose in " + categoryClass + " on field " + field); } if ((field.getModifiers() & Modifier.PUBLIC) != Modifier.PUBLIC) { field.setAccessible(true); - Warnings.warn("@ConfigOption on non public field " + field + " in " + categoryClass); + if (warnForPrivateFields) + Warnings.warn("@ConfigOption on non public field " + field + " in " + categoryClass); } ConfigAccordionId parentAccordion = field.getAnnotation(ConfigAccordionId.class); @@ -146,7 +160,8 @@ private void processCategoryMeta( } if ((categoryField.getModifiers() & Modifier.PUBLIC) != Modifier.PUBLIC) { categoryField.setAccessible(true); - Warnings.warn("@Category on non public field " + categoryField + " in " + parent.getClass()); + if (warnForPrivateFields) + Warnings.warn("@Category on non public field " + categoryField + " in " + parent.getClass()); } var deferredSubCategories = new ArrayList(); reader.beginCategory(parent, categoryField, categoryAnnotation.name(), categoryAnnotation.desc()); diff --git a/legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/MoulConfigTest.java b/legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/MoulConfigTest.java index 841e74254..8e2ac7e05 100644 --- a/legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/MoulConfigTest.java +++ b/legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/MoulConfigTest.java @@ -84,6 +84,7 @@ public void init(FMLInitializationEvent event) { BuiltinMoulConfigGuis.addProcessors(processor); ConfigProcessorDriver driver = new ConfigProcessorDriver(processor); driver.checkExpose = false; + driver.warnForPrivateFields = false; driver.processConfig(testConfig); testConfig.testCategory.text2.whenChanged((oldValue, newValue) -> Minecraft.getMinecraft().thePlayer.addChatMessage( diff --git a/legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/SubCategory.java b/legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/SubCategory.java index 9b5b3c7c3..5801c8c37 100644 --- a/legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/SubCategory.java +++ b/legacy/src/main/java/io/github/notenoughupdates/moulconfig/test/SubCategory.java @@ -13,7 +13,7 @@ public class SubCategory { name = "Test Opt", desc = "com" ) - public boolean testOption = false; + private boolean testOption = false; @ConfigAccordionId(id = 1) @Expose @ConfigOption(