From fe6669e750913b845be97f3f0da6b01fa89bf521 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 15 Feb 2025 11:19:41 +0100 Subject: [PATCH 1/7] fix: crash on pure Wayland sessions - Closes #84 --- common/src/main/java/eu/midnightdust/core/MidnightLib.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/eu/midnightdust/core/MidnightLib.java b/common/src/main/java/eu/midnightdust/core/MidnightLib.java index 99986cc..1343567 100755 --- a/common/src/main/java/eu/midnightdust/core/MidnightLib.java +++ b/common/src/main/java/eu/midnightdust/core/MidnightLib.java @@ -25,7 +25,7 @@ public class MidnightLib { try { if (!IS_SYSTEM_MAC) { System.setProperty("java.awt.headless", "false"); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - }} catch (Exception e) { LOGGER.error("Error setting system look and feel", e); } + }} catch (Exception | Error e) { LOGGER.error("Error setting system look and feel", e); } MidnightLibConfig.init(MOD_ID, MidnightLibConfig.class); } public static void registerAutoCommand() { From e29466401b8f9420ad64f4e254b5e86deb3477fb Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 15 Feb 2025 11:21:01 +0100 Subject: [PATCH 2/7] chore: improve version formatting & bump version --- fabric/build.gradle | 6 +++--- gradle.properties | 2 +- neoforge/build.gradle | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index 7bdc94e..da56a04 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -20,8 +20,8 @@ configurations { compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common developmentFabric.extendsFrom common - archivesBaseName = rootProject.archives_base_name + "-fabric" - version = rootProject.mod_version + "+" + rootProject.minecraft_version + archivesBaseName = rootProject.archives_base_name + version = rootProject.mod_version + "-" + project.name + "+" + rootProject.minecraft_version } dependencies { @@ -95,7 +95,7 @@ unifiedPublishing { modrinth { token = MODRINTH_TOKEN id = rootProject.modrinth_id - version = "$rootProject.version-$project.name" + version = version gameVersions.addAll project.minecraft_version if (project.supported_versions != "") gameVersions.addAll project.supported_versions } diff --git a/gradle.properties b/gradle.properties index 152d372..a18f146 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge archives_base_name=midnightlib -mod_version=1.6.7 +mod_version=1.6.8 maven_group=eu.midnightdust release_type=release curseforge_id=488090 diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 30e3c8b..62d7b3f 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -35,8 +35,8 @@ configurations { canBeResolved = true canBeConsumed = false } - archivesBaseName = rootProject.archives_base_name + "-neoforge" - version = rootProject.mod_version + "+" + rootProject.minecraft_version + archivesBaseName = rootProject.archives_base_name + version = rootProject.mod_version + "-" + project.name + "+" + rootProject.minecraft_version } dependencies { @@ -99,7 +99,7 @@ unifiedPublishing { modrinth { token = MODRINTH_TOKEN id = rootProject.modrinth_id - version = "$rootProject.version-$project.name" + version = version gameVersions.addAll project.minecraft_version if (project.supported_versions != "") gameVersions.addAll project.supported_versions } From d73b9683f9d5c4c53a37d9ae271602262b597a2d Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 15 Feb 2025 12:01:44 +0100 Subject: [PATCH 3/7] feat: support non-primitive fields - Closes #69 (nice) --- .../eu/midnightdust/lib/config/MidnightConfig.java | 14 +++++++------- .../example/config/MidnightConfigExample.java | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java index dd313f4..cb13e08 100755 --- a/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java +++ b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java @@ -146,11 +146,11 @@ public abstract class MidnightConfig { if (requiredModLoaded) entries.add(info); } public static Class getUnderlyingType(Field field) { - if (field.getType() == List.class) { - Class listType = (Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]; - try { return (Class) listType.getField("TYPE").get(null); - } catch (NoSuchFieldException | IllegalAccessException ignored) { return listType; } - } else return field.getType(); + Class rawType = field.getType(); + if (field.getType() == List.class) + rawType = (Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]; + try { return (Class) rawType.getField("TYPE").get(null); // Tries to get primitive types from non-primitives (e.g. Boolean -> boolean) + } catch (NoSuchFieldException | IllegalAccessException ignored) { return rawType; } } public static Tooltip getTooltip(EntryInfo info, boolean isButton) { String key = info.modid + ".midnightconfig."+info.field.getName()+(!isButton ? ".label" : "" )+".tooltip"; @@ -476,8 +476,8 @@ public abstract class MidnightConfig { @Override public void applyValue() { if (info.dataType == int.class) info.setValue(((Number) (e.min() + value * (e.max() - e.min()))).intValue()); - else if (info.field.getType() == double.class) info.setValue(Math.round((e.min() + value * (e.max() - e.min())) * (double) e.precision()) / (double) e.precision()); - else if (info.field.getType() == float.class) info.setValue(Math.round((e.min() + value * (e.max() - e.min())) * (float) e.precision()) / (float) e.precision()); + else if (info.dataType == double.class) info.setValue(Math.round((e.min() + value * (e.max() - e.min())) * (double) e.precision()) / (double) e.precision()); + else if (info.dataType == float.class) info.setValue(Math.round((e.min() + value * (e.max() - e.min())) * (float) e.precision()) / (float) e.precision()); } } diff --git a/test-fabric/src/main/java/eu/midnightdust/fabric/example/config/MidnightConfigExample.java b/test-fabric/src/main/java/eu/midnightdust/fabric/example/config/MidnightConfigExample.java index f16c370..12d29c2 100644 --- a/test-fabric/src/main/java/eu/midnightdust/fabric/example/config/MidnightConfigExample.java +++ b/test-fabric/src/main/java/eu/midnightdust/fabric/example/config/MidnightConfigExample.java @@ -22,6 +22,7 @@ public class MidnightConfigExample extends MidnightConfig { @Comment(category = TEXT, centered = true) public static Comment text2; // Centered comments are the same as normal ones - just centered! @Comment(category = TEXT) public static Comment spacer1; // Comments containing the word "spacer" will just appear as a blank line @Entry(category = TEXT) public static boolean showInfo = true; // Example for a boolean option + @Entry(category = TEXT, name="I am a (non-primitive) Boolean") public static Boolean nonPrimitive = true; // Example for a non-primative boolean option @Entry(category = TEXT) public static String name = "Hello World!"; // Example for a string option, which is in a category! @Entry(category = TEXT, width = 7, min = 7, isColor = true, name = "I am a color!") public static String titleColor = "#ffffff"; // The isColor property adds a color chooser for a hexadecimal color @Entry(category = TEXT, idMode = 0) public static Identifier id = Identifier.ofVanilla("diamond"); // Example for an identifier with matching items displayed next to it! @@ -34,6 +35,7 @@ public class MidnightConfigExample extends MidnightConfig { @Entry(category = NUMBERS, min=69,max=420) public static int hello = 420; // - The entered number has to be larger than 69 and smaller than 420 @Entry(category = SLIDERS, name = "I am an int slider.",isSlider = true, min = 0, max = 100) public static int intSlider = 35; // Int fields can also be displayed as a Slider @Entry(category = SLIDERS, name = "I am a float slider!", isSlider = true, min = 0f, max = 1f, precision = 1000) public static float floatSlider = 0.24f; // And so can floats! Precision defines the amount of decimal places + @Entry(category = SLIDERS, name = "I am a non-primitive double slider!", isSlider = true, min = 0d, max = 4d, precision = 10000) public static Double nonPrimitiveDoubleSlider = 3.76d; // Even works for non-primitive fields // The name field can be used to specify a custom translation string or plain text @Entry(category = LISTS, name = "I am a string list!") public static List stringList = Lists.newArrayList("String1", "String2"); // Array String Lists are also supported @Entry(category = LISTS, isColor = true, name = "I am a color list!") public static List colorList = Lists.newArrayList("#ac5f99", "#11aa44"); // Lists also support colors From fdb4a1a5287afd003242141723d98c716e268055 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 15 Feb 2025 12:14:56 +0100 Subject: [PATCH 4/7] feat: use enum variant name when missing translation - Closes #79 --- .../main/java/eu/midnightdust/lib/config/MidnightConfig.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java index cb13e08..037254b 100755 --- a/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java +++ b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java @@ -134,7 +134,10 @@ public abstract class MidnightConfig { }, func); } else if (info.dataType.isEnum()) { List values = Arrays.asList(field.getType().getEnumConstants()); - Function func = value -> Text.translatable(modid + ".midnightconfig." + "enum." + info.dataType.getSimpleName() + "." + info.toTemporaryValue()); + Function func = value -> { + String translationKey = modid + ".midnightconfig.enum." + info.dataType.getSimpleName() + "." + info.toTemporaryValue(); + return I18n.hasTranslation(translationKey) ? Text.translatable(translationKey) : Text.literal(info.toTemporaryValue()); + }; info.function = new AbstractMap.SimpleEntry>(button -> { int index = values.indexOf(info.value) + 1; info.value = values.get(index >= values.size() ? 0 : index); button.setMessage(func.apply(info.value)); From 28166aaa3d29b4608ef503e0f532743b0143182e Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 15 Feb 2025 12:28:02 +0100 Subject: [PATCH 5/7] fix(neoforge): move command registration to post init - Closes #82 and #68 --- .../main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neoforge/src/main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java b/neoforge/src/main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java index 91cb9ca..57e2d6b 100644 --- a/neoforge/src/main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java +++ b/neoforge/src/main/java/eu/midnightdust/neoforge/MidnightLibNeoForge.java @@ -24,7 +24,6 @@ public class MidnightLibNeoForge { public MidnightLibNeoForge() { if (FMLEnvironment.dist == Dist.CLIENT) MidnightLib.onInitializeClient(); - MidnightLib.registerAutoCommand(); } @EventBusSubscriber(modid = "midnightlib", bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) @@ -36,6 +35,7 @@ public class MidnightLibNeoForge { modContainer.registerExtensionPoint(IConfigScreenFactory.class, (minecraftClient, screen) -> MidnightConfig.getScreen(screen, modid)); } }); + MidnightLib.registerAutoCommand(); } } From 596f68f4d9e000d48fb9034c635afdbbe1f38987 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 15 Feb 2025 12:39:47 +0100 Subject: [PATCH 6/7] chore: adjust version naming for better integration --- fabric/build.gradle | 2 +- neoforge/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index da56a04..9da74e4 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -95,7 +95,7 @@ unifiedPublishing { modrinth { token = MODRINTH_TOKEN id = rootProject.modrinth_id - version = version + version = rootProject.mod_version + "+" + rootProject.minecraft_version + "-" + project.name gameVersions.addAll project.minecraft_version if (project.supported_versions != "") gameVersions.addAll project.supported_versions } diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 62d7b3f..48ebf4f 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -99,7 +99,7 @@ unifiedPublishing { modrinth { token = MODRINTH_TOKEN id = rootProject.modrinth_id - version = version + version = rootProject.mod_version + "+" + rootProject.minecraft_version + "-" + project.name gameVersions.addAll project.minecraft_version if (project.supported_versions != "") gameVersions.addAll project.supported_versions } From 7c0e4d5b48f24b26e296885b77af9e8a2b2d57fa Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 15 Feb 2025 12:45:16 +0100 Subject: [PATCH 7/7] Revert "Merge branch 'architectury-1.21.1' into architectury-1.21.4" This reverts commit a0fde5da5c7c6c4b7d19a979988e51c7a721d349, reversing changes made to 596f68f4d9e000d48fb9034c635afdbbe1f38987. --- .../midnightdust/core/mixin/MixinOptionsScreen.java | 5 +---- .../eu/midnightdust/lib/config/MidnightConfig.java | 9 +++++---- gradle.properties | 12 ++++++------ 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java b/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java index be1cfd8..13203b7 100644 --- a/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java +++ b/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java @@ -37,14 +37,11 @@ public abstract class MixinOptionsScreen extends Screen { } } - - - @Inject(at = @At("TAIL"), method = "initTabNavigation") + @Inject(at = @At("TAIL"), method = "refreshWidgetPositions") public void midnightlib$onResize(CallbackInfo ci) { if (shouldShowButton()) this.midnightlib$setButtonPos(); } - @Unique public void midnightlib$setButtonPos() { midnightlib$button.setPosition(layout.getWidth() / 2 + 158, layout.getY() + layout.getFooterHeight() - 4); diff --git a/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java index b2b3e5a..037254b 100755 --- a/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java +++ b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java @@ -9,6 +9,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.Te import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.tab.GridScreenTab; import net.minecraft.client.gui.tab.Tab; import net.minecraft.client.gui.tab.TabManager; import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.*; +import net.minecraft.client.render.RenderLayer; import net.minecraft.client.resource.language.I18n; import net.minecraft.registry.Registries; import net.minecraft.screen.ScreenTexts; @@ -253,9 +254,9 @@ public abstract class MidnightConfig { if (prevTab != null && prevTab != tabManager.getCurrentTab()) { prevTab = tabManager.getCurrentTab(); this.list.clear(); fillList(); - list.setScrollAmount(0); + list.setScrollY(0); } - scrollProgress = list.getScrollAmount(); + scrollProgress = list.getScrollY(); for (EntryInfo info : entries) try {info.field.set(null, info.value);} catch (IllegalAccessException ignored) {} updateButtons(); } @@ -397,7 +398,7 @@ public abstract class MidnightConfig { } this.list.addButton(widgets, name, info); } else this.list.addButton(List.of(), name, info); - } list.setScrollAmount(scrollProgress); + } list.setScrollY(scrollProgress); updateButtons(); } } @@ -425,7 +426,7 @@ public abstract class MidnightConfig { protected void drawHeaderAndFooterSeparators(DrawContext context) { if (renderHeaderSeparator) super.drawHeaderAndFooterSeparators(context); else { RenderSystem.enableBlend(); - context.drawTexture(this.client.world == null ? Screen.FOOTER_SEPARATOR_TEXTURE : Screen.INWORLD_FOOTER_SEPARATOR_TEXTURE, this.getX(), this.getBottom(), 0.0F, 0.0F, this.getWidth(), 2, 32, 2); + context.drawTexture(RenderLayer::getGuiTextured, this.client.world == null ? Screen.FOOTER_SEPARATOR_TEXTURE : Screen.INWORLD_FOOTER_SEPARATOR_TEXTURE, this.getX(), this.getBottom(), 0.0F, 0.0F, this.getWidth(), 2, 32, 2); RenderSystem.disableBlend(); } } public void addButton(List buttons, Text text, EntryInfo info) { this.addEntry(new ButtonEntry(buttons, text, info)); } diff --git a/gradle.properties b/gradle.properties index ae6f389..a18f146 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ org.gradle.jvmargs=-Xmx4096M -minecraft_version=1.21 -supported_versions=1.21.1 -yarn_mappings=1.21+build.1 +minecraft_version=1.21.4 +supported_versions= +yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge archives_base_name=midnightlib @@ -12,10 +12,10 @@ release_type=release curseforge_id=488090 modrinth_id=codAaoxh -fabric_loader_version=0.16.10 -fabric_api_version=0.115.0+1.21.1 +fabric_loader_version=0.16.9 +fabric_api_version=0.110.5+1.21.4 -neoforge_version=21.0.167 +neoforge_version=21.4.3-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 quilt_loader_version=0.19.0-beta.18