dev: switch to stonecutter build system

- This will allow us to build the library for different Minecraft versions at the same time
- Right now, only Fabric and Neoforge 1.21.10 are fully working
- As a bonus, the jar is now even smaller!
This commit is contained in:
Martin Prokoph
2025-11-04 22:21:15 +01:00
parent b484d0287c
commit 8138e17b42
78 changed files with 668 additions and 981 deletions

View File

@@ -0,0 +1,77 @@
package eu.midnightdust.lib.config;
import com.google.common.collect.Lists;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.ContainerObjectSelectionList;
import net.minecraft.client.gui.components.MultiLineTextWidget;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.ConfirmLinkScreen;
import net.minecraft.client.input.MouseButtonEvent;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
public class ButtonEntry extends ContainerObjectSelectionList.Entry<ButtonEntry> {
private static final Font textRenderer = Minecraft.getInstance().font;
public final Component text;
public final List<AbstractWidget> buttons;
public final EntryInfo info;
public boolean centered = false;
public MultiLineTextWidget title;
public ButtonEntry(List<AbstractWidget> buttons, Component text, EntryInfo info) {
this.buttons = buttons;
this.text = text;
this.info = info;
if (info != null && info.comment != null)
this.centered = info.comment.centered();
int scaledWidth = Minecraft.getInstance().getWindow().getGuiScaledWidth();
if (text != null && (!text.getString().contains("spacer") || !buttons.isEmpty())) {
title = new MultiLineTextWidget(12, 0, Component.translationArg(text), textRenderer).setCentered(centered);
if (info != null)
title.setTooltip(info.getTooltip(false));
title.setMaxWidth(!buttons.isEmpty() ? buttons.get(buttons.size() > 2 ? buttons.size() - 1 : 0).getX() - 16 : scaledWidth - 24);
if (centered) title.setX(scaledWidth / 2 - (title.getWidth() / 2));
}
}
public void renderContent(GuiGraphics context, int mouseX, int mouseY, boolean hovered, float tickDelta) {
buttons.forEach(b -> {
b.setY(this.getY());
b.render(context, mouseX, mouseY, tickDelta);
});
if (title != null) {
title.setY(this.getY() + 5);
title.render(context, mouseX, mouseY, tickDelta);
if (info.entry != null && !this.buttons.isEmpty() && this.buttons.getFirst() instanceof AbstractWidget widget) {
int idMode = this.info.entry.idMode();
if (idMode != -1) context.renderItem(idMode == 0 ?
BuiltInRegistries.ITEM.getValue(ResourceLocation.tryParse(this.info.tempValue)).getDefaultInstance()
: BuiltInRegistries.BLOCK.getValue(ResourceLocation.tryParse(this.info.tempValue)).asItem().getDefaultInstance(),
widget.getX() + widget.getWidth() - 18, this.getY() + 2);
}
}
}
@Override
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
if (this.info != null && this.info.comment != null && !this.info.comment.url().isBlank())
ConfirmLinkScreen.confirmLinkNow(Minecraft.getInstance().screen, this.info.comment.url(), true);
return super.mouseClicked(click, doubled);
}
public List<? extends GuiEventListener> children() {
return Lists.newArrayList(buttons);
}
public List<? extends NarratableEntry> narratables() {
return Lists.newArrayList(buttons);
}
}