Skip to content
Open
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 @@ -4,6 +4,7 @@
import com.terraformersmc.modmenu.config.ModMenuConfig;
import com.terraformersmc.modmenu.gui.ModsScreen;
import com.terraformersmc.modmenu.util.mod.Mod;
import net.fabricmc.loader.api.metadata.ContactInformation;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
Expand Down Expand Up @@ -243,7 +244,12 @@ private void rebuildUI() {
indent = 16;

for (var line : textRenderer.wrapLines(Text.literal(contributor), wrapWidth - 24)) {
children().add(new DescriptionEntry(line, indent));
ContactInformation contact = mod.getContact(contributor);
if (contact != null && contact.get("email").isPresent()) {
children().add(new MailableContactEntry(line, contact.get("email").get(), indent));
} else {
children().add(new DescriptionEntry(line, indent));
}
indent = 24;
}
}
Expand Down Expand Up @@ -381,4 +387,38 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
return super.mouseClicked(mouseX, mouseY, button);
}
}

protected class MailableContactEntry extends DescriptionEntry {
private final String email;

public MailableContactEntry(OrderedText text, String email, int indent) {
super(text, indent);
this.email = email;
}

public MailableContactEntry(OrderedText text, String link) {
this(text, link, 0);
}

@Override
public void render(DrawContext drawContext, int index, int y, int x, int itemWidth, int itemHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
super.render(drawContext, index, y, x, itemWidth, itemHeight, mouseX, mouseY, isSelected, delta);
drawContext.drawTextWithShadow(textRenderer, Text.literal(" ").append(Text.literal("✉")), x + indent + textRenderer.getWidth(text) + 1, y, 0xFFAAAAAA);
}

@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (isMouseOver(mouseX, mouseY)) {
client.setScreen(new ConfirmLinkScreen((open) -> {
if (open) {
Util.getOperatingSystem().open("mailto:" + email);
}
client.setScreen(parent);
}, "mailto:" + email, false));
}

return super.mouseClicked(mouseX, mouseY, button);
}
}

}
3 changes: 3 additions & 0 deletions src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.terraformersmc.modmenu.config.ModMenuConfig;
import com.terraformersmc.modmenu.util.mod.fabric.FabricIconHandler;
import eu.pb4.placeholders.api.ParserContext;
import net.fabricmc.loader.api.metadata.ContactInformation;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.texture.NativeImageBackedTexture;
import net.minecraft.text.Text;
Expand Down Expand Up @@ -80,6 +81,8 @@ default Text getFormattedDescription() {

@NotNull List<String> getAuthors();

ContactInformation getContact(String author);

/**
* @return a mapping of contributors to their roles.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.terraformersmc.modmenu.util.mod.Mod;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.api.metadata.ContactInformation;
import net.minecraft.client.texture.NativeImageBackedTexture;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -94,6 +95,11 @@ public FabricDummyParentMod(FabricMod host, String id) {
}

@Override
public ContactInformation getContact(String author) {
return null;
}

@Override
public @NotNull Map<String, Collection<String>> getContributors() {
return Map.of();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,21 @@ public FabricMod(ModContainer modContainer, Set<String> modpackMods) {
return authors;
}

@Override
public ContactInformation getContact(String author) {
for (Person person : metadata.getAuthors()) {
if (person.getName().equals(author)) {
return person.getContact();
}
}
for (Person person : metadata.getContributors()) {
if (person.getName().equals(author)) {
return person.getContact();
}
}
return null;
}

@Override
public @NotNull Map<String, Collection<String>> getContributors() {
var contributors = new LinkedHashMap<String, Collection<String>>();
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,8 @@
"Pyrrha",
"sakura-ryoko",
"gniftygnome",
"lowercasebtw"
"lowercasebtw",
"tnoctua"
],
"description": "Adds a mod menu to view the list of mods you have installed.",
"mixins": [
Expand Down