Compare commits

...

12 Commits

Author SHA1 Message Date
Martin Prokoph
0ba128f322 Merge pull request #107 from TeamMidnightDust/temp/1.21-backport
backport: v1.7.5 for 1.21.1
2025-07-15 17:12:55 +02:00
Martin Prokoph
cf58bd3637 clean: remove NeoForge bus annotation 2025-07-15 17:12:35 +02:00
Martin Prokoph
61e9ca96fa port: adapt to 1.21.1 2025-07-14 19:14:04 +02:00
Martin Prokoph
b963764afe port: update gradle config 2025-07-14 19:13:56 +02:00
Martin Prokoph
fefbaa1947 Merge branch 'architectury-1.21.1' into temp/1.21-backport 2025-07-14 18:49:51 +02:00
Martin Prokoph
9602736335 fix: screen titles not showing 2025-06-17 23:44:21 +02:00
Martin Prokoph
30d213b92c feat: NeoForge 1.21.6 2025-06-17 18:00:22 +02:00
Martin Prokoph
b61b2cdf12 port: update to full 1.21.6 2025-06-17 17:55:20 +02:00
Martin Prokoph
bcde119f23 fix: correctly wrap option text labels 2025-06-17 17:54:53 +02:00
Martin Prokoph
a4d801ddf7 Merge pull request #87 from TeamMidnightDust/architectury-1.21.4
feat: maintain tab order (1.21.1)
2025-02-22 22:17:25 +01:00
Martin Prokoph
fd858bd468 Reapply "Merge branch 'architectury-1.21.1' into architectury-1.21.4"
This reverts commit 7c0e4d5b48.
2025-02-15 12:48:27 +01:00
Martin Prokoph
02374253fd Merge pull request #85 from TeamMidnightDust/architectury-1.21.4
backport: 1.6.8 for 1.21.1
2025-02-15 12:47:51 +01:00
6 changed files with 27 additions and 26 deletions

View File

@@ -37,11 +37,14 @@ public abstract class MixinOptionsScreen extends Screen {
} }
} }
@Inject(at = @At("TAIL"), method = "refreshWidgetPositions")
@Inject(at = @At("TAIL"), method = "initTabNavigation")
public void midnightlib$onResize(CallbackInfo ci) { public void midnightlib$onResize(CallbackInfo ci) {
if (shouldShowButton()) this.midnightlib$setButtonPos(); if (shouldShowButton()) this.midnightlib$setButtonPos();
} }
@Unique @Unique
public void midnightlib$setButtonPos() { public void midnightlib$setButtonPos() {
midnightlib$button.setPosition(layout.getWidth() / 2 + 158, layout.getY() + layout.getFooterHeight() - 4); midnightlib$button.setPosition(layout.getWidth() / 2 + 158, layout.getY() + layout.getFooterHeight() - 4);

View File

@@ -45,6 +45,6 @@ public class MidnightConfigOverviewScreen extends Screen {
public void render(DrawContext context, int mouseX, int mouseY, float delta) { public void render(DrawContext context, int mouseX, int mouseY, float delta) {
super.render(context, mouseX, mouseY, delta); super.render(context, mouseX, mouseY, delta);
this.list.render(context, mouseX, mouseY, delta); this.list.render(context, mouseX, mouseY, delta);
context.drawCenteredTextWithShadow(textRenderer, title, width / 2, 10, 0xFFFFFF); context.drawCenteredTextWithShadow(textRenderer, title, width / 2, 10, 0xFFFFFFFF);
} }
} }

View File

@@ -2,20 +2,18 @@ package eu.midnightdust.lib.config;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.gson.*; import com.google.gson.stream.*; import com.google.gson.*; import com.google.gson.stream.*;
import com.mojang.blaze3d.systems.RenderSystem;
import eu.midnightdust.lib.util.PlatformFunctions; import eu.midnightdust.lib.util.PlatformFunctions;
import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gl.RenderPipelines;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable;
import net.minecraft.client.gui.screen.ConfirmLinkScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ConfirmLinkScreen; 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.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.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.client.resource.language.I18n;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.screen.ScreenTexts; import net.minecraft.screen.ScreenTexts;
import net.minecraft.text.HoverEvent;
import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.text.Style; import net.minecraft.text.Text;
import net.minecraft.text.TranslatableTextContent; import net.minecraft.text.TranslatableTextContent;
import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier;
@@ -24,7 +22,6 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.Color; import java.awt.Color;
import java.io.IOException;
import java.lang.annotation.*; import java.lang.annotation.*;
import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType;
import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Files; import java.nio.file.Path;
@@ -123,10 +120,7 @@ public abstract class MidnightConfig {
private static final Gson gson = new GsonBuilder() private static final Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.TRANSIENT).excludeFieldsWithModifiers(Modifier.PRIVATE) .excludeFieldsWithModifiers(Modifier.TRANSIENT).excludeFieldsWithModifiers(Modifier.PRIVATE)
.addSerializationExclusionStrategy(new NonEntryExclusionStrategy()) .addSerializationExclusionStrategy(new NonEntryExclusionStrategy())
.registerTypeAdapter(Identifier.class, new TypeAdapter<Identifier>() { .registerTypeAdapter(Identifier.class, new Identifier.Serializer()).setPrettyPrinting().create();
public void write(JsonWriter out, Identifier id) throws IOException { out.value(id.toString()); }
public Identifier read(JsonReader in) throws IOException { return Identifier.of(in.nextString()); }
}).setPrettyPrinting().create();
public static void loadValuesFromJson(String modid) { public static void loadValuesFromJson(String modid) {
try { gson.fromJson(Files.newBufferedReader(path), configClass.get(modid)); } try { gson.fromJson(Files.newBufferedReader(path), configClass.get(modid)); }
@@ -295,9 +289,9 @@ public abstract class MidnightConfig {
super.tick(); super.tick();
if (prevTab != null && prevTab != tabManager.getCurrentTab()) { if (prevTab != null && prevTab != tabManager.getCurrentTab()) {
prevTab = tabManager.getCurrentTab(); prevTab = tabManager.getCurrentTab();
updateList(); list.setScrollY(0); updateList(); list.setScrollAmount(0);
} }
scrollProgress = list.getScrollY(); scrollProgress = list.getScrollAmount();
for (EntryInfo info : entries.values()) info.updateFieldValue(); for (EntryInfo info : entries.values()) info.updateFieldValue();
updateButtons(); updateButtons();
if (reloadScreen) { updateList(); reloadScreen = false; } if (reloadScreen) { updateList(); reloadScreen = false; }
@@ -441,7 +435,7 @@ public abstract class MidnightConfig {
if (!info.conditionsMet) widgets.forEach(w -> w.active = false); if (!info.conditionsMet) widgets.forEach(w -> w.active = false);
this.list.addButton(widgets, name, info); this.list.addButton(widgets, name, info);
} else this.list.addButton(List.of(), name, info); } else this.list.addButton(List.of(), name, info);
} list.setScrollY(scrollProgress); } list.setScrollAmount(scrollProgress);
updateButtons(); updateButtons();
} }
} }
@@ -449,7 +443,7 @@ public abstract class MidnightConfig {
public void render(DrawContext context, int mouseX, int mouseY, float delta) { public void render(DrawContext context, int mouseX, int mouseY, float delta) {
super.render(context, mouseX, mouseY, delta); super.render(context, mouseX, mouseY, delta);
this.list.render(context, mouseX, mouseY, delta); this.list.render(context, mouseX, mouseY, delta);
if (tabs.size() < 2) context.drawCenteredTextWithShadow(textRenderer, title, width / 2, 10, 0xFFFFFF); if (tabs.size() < 2) context.drawCenteredTextWithShadow(textRenderer, title, width / 2, 10, 0xFFFFFFFF);
} }
} }
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
@@ -461,7 +455,9 @@ public abstract class MidnightConfig {
@Override @Override
protected void drawHeaderAndFooterSeparators(DrawContext context) { protected void drawHeaderAndFooterSeparators(DrawContext context) {
if (renderHeaderSeparator) super.drawHeaderAndFooterSeparators(context); if (renderHeaderSeparator) super.drawHeaderAndFooterSeparators(context);
else context.drawTexture(RenderPipelines.GUI_TEXTURED, this.client.world == null ? Screen.FOOTER_SEPARATOR_TEXTURE : Screen.INWORLD_FOOTER_SEPARATOR_TEXTURE, this.getX(), this.getBottom(), 0, 0, this.getWidth(), 2, 32, 2); 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);
RenderSystem.disableBlend(); }
} }
public void addButton(List<ClickableWidget> buttons, Text text, EntryInfo info) { this.addEntry(new ButtonEntry(buttons, text, info)); } public void addButton(List<ClickableWidget> buttons, Text text, EntryInfo info) { this.addEntry(new ButtonEntry(buttons, text, info)); }
public void clear() { this.clearEntries(); } public void clear() { this.clearEntries(); }
@@ -481,10 +477,10 @@ public abstract class MidnightConfig {
int scaledWidth = MinecraftClient.getInstance().getWindow().getScaledWidth(); int scaledWidth = MinecraftClient.getInstance().getWindow().getScaledWidth();
if (text != null && (!text.getString().contains("spacer") || !buttons.isEmpty())) { if (text != null && (!text.getString().contains("spacer") || !buttons.isEmpty())) {
title = new MultilineTextWidget((centered) ? (scaledWidth / 2 - (textRenderer.getWidth(text) / 2)) : 12, 0, Text.of(text), textRenderer); title = new MultilineTextWidget((centered) ? (scaledWidth / 2 - (textRenderer.getWidth(text) / 2)) : 12, 0, text, textRenderer);
title.setCentered(centered); title.setCentered(centered);
if (info != null) title.setTooltip(info.getTooltip(false)); if (info != null) title.setTooltip(info.getTooltip(false));
title.setMaxWidth(buttons.size() > 1 ? buttons.get(1).getX() - 24 : scaledWidth - 24); title.setMaxWidth(!buttons.isEmpty() ? buttons.get(buttons.size() > 2 ? buttons.size()-1 : 0).getX() - 16 : scaledWidth - 24);
} }
} }
public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
@@ -492,6 +488,8 @@ public abstract class MidnightConfig {
if (title != null) { if (title != null) {
title.setY(y+5); title.setY(y+5);
title.render(context, mouseX, mouseY, tickDelta); title.render(context, mouseX, mouseY, tickDelta);
boolean tooltipVisible = mouseX >= title.getX() && mouseX < title.getWidth() + title.getX() && mouseY >= title.getY() && mouseY < title.getHeight() + title.getY();
if (tooltipVisible && title.getTooltip() != null) context.drawOrderedTooltip(textRenderer, title.getTooltip().getLines(MinecraftClient.getInstance()), mouseX, mouseY);
if (info.entry != null && !this.buttons.isEmpty() && this.buttons.getFirst() instanceof ClickableWidget widget) { if (info.entry != null && !this.buttons.isEmpty() && this.buttons.getFirst() instanceof ClickableWidget widget) {
int idMode = this.info.entry.idMode(); int idMode = this.info.entry.idMode();

View File

@@ -1,21 +1,21 @@
org.gradle.jvmargs=-Xmx4096M org.gradle.jvmargs=-Xmx4096M
minecraft_version=1.21.6-pre1 minecraft_version=1.21.1
supported_versions= supported_versions=1.21
yarn_mappings=1.21.6-pre1+build.1 yarn_mappings=1.21.1+build.3
enabled_platforms=fabric,neoforge enabled_platforms=fabric,neoforge
archives_base_name=midnightlib archives_base_name=midnightlib
mod_version=1.7.3 mod_version=1.7.5
maven_group=eu.midnightdust maven_group=eu.midnightdust
release_type=release release_type=release
curseforge_id=488090 curseforge_id=488090
modrinth_id=codAaoxh modrinth_id=codAaoxh
fabric_loader_version=0.16.14 fabric_loader_version=0.16.14
fabric_api_version=0.125.2+1.21.6 fabric_api_version=0.116.4+1.21.1
neoforge_version=21.4.3-beta neoforge_version=21.1.192
yarn_mappings_patch_neoforge_version = 1.21+build.4 yarn_mappings_patch_neoforge_version = 1.21+build.4
mod_menu_version = 9.0.0 mod_menu_version = 9.0.0

View File

@@ -26,7 +26,7 @@ public class MidnightLibNeoForge {
if (FMLEnvironment.dist == Dist.CLIENT) MidnightLib.onInitializeClient(); if (FMLEnvironment.dist == Dist.CLIENT) MidnightLib.onInitializeClient();
} }
@EventBusSubscriber(modid = "midnightlib", bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) @EventBusSubscriber(modid = "midnightlib", value = Dist.CLIENT)
public static class MidnightLibBusEvents { public static class MidnightLibBusEvents {
@SubscribeEvent @SubscribeEvent
public static void onPostInit(FMLClientSetupEvent event) { public static void onPostInit(FMLClientSetupEvent event) {

View File

@@ -10,8 +10,8 @@ pluginManagement {
include("common") include("common")
include("fabric") include("fabric")
include("test-fabric") include("test-fabric")
//include("neoforge") include("neoforge")
//include("test-neoforge") include("test-neoforge")
//include("quilt") //include("quilt")
rootProject.name = "midnightlib" rootProject.name = "midnightlib"