diff --git a/README.md b/README.md index b630d800a..69dc6e17a 100644 --- a/README.md +++ b/README.md @@ -15,26 +15,41 @@ A picture's worth 2 words 4. Click on your new Prism Launcher instance and click "edit instance" on the right. Click "loader mods" then "add", and navigate to the mod you just downloaded, and press OK. ### Developers: -- You can obtain the latest build via [JitPack](https://jitpack.io/). +- You can obtain the latest build via [JitPack](https://jitpack.io/). Add following to your project's `build.gradle`: + ```groovy + repositories { + // ... + maven { + name = 'JitPack' + url = 'https://jitpack.io/' + } + } + + dependencies { + // ... + modImplementation "com.github.Turnip-Labs:ModMenu:" + } + ``` + Replace the version with the latest version, which you can find above. - The icon comes from the icon specified in your fabric.mod.json (as per the spec) -- Clientside-only and API badges are defined as custom objects in your fabric.mod.json as such: +- Clientside-only and API badges are defined as custom objects in your `fabric.mod.json` as such: ```json "custom": { "modmenu:api": true, "modmenu:clientsideOnly": true } ``` -- Mod parenting is used to display a mod as a child of another one. This is meant to be used for mods divided into different modules. The following element in a fabric.mod.json will define the mod as a child of the mod 'flamingo': +- Mod parenting is used to display a mod as a child of another one. This is meant to be used for mods divided into different modules. The following element in a `fabric.mod.json` will define the mod as a child of the mod 'flamingo': ```json "custom": { "modmenu:parent": "flamingo" } ``` - ModMenuAPI - - To use the API, implement the ModMenuApi interface on a class and add that as an entry point of type "modmenu" in your fabric.mod.json as such: + - To use the API, implement the `ModMenuApi` interface on a class and add that as an entry point of type `modmenu` in your `fabric.mod.json` as such: ```json "entrypoints": { - "modmenu": [ "com.example.mod.ExampleModMenuApiImpl" ] + "modmenu": [ "com.example.mod.ExampleModMenuApiImpl" ] } ``` - Features diff --git a/gradle.properties b/gradle.properties index 2085c760b..93bb304e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G # Also makes builds more reliable and less likely to randomly fail. org.gradle.daemon=false -mod_version=1.8.5-bta.3 +mod_version=1.8.6-bta.1 mod_group=io.github.prospector mod_name=modmenu diff --git a/src/main/java/io/github/prospector/modmenu/api/ModMenuApi.java b/src/main/java/io/github/prospector/modmenu/api/ModMenuApi.java index fbb6e7ef2..87371aeb9 100644 --- a/src/main/java/io/github/prospector/modmenu/api/ModMenuApi.java +++ b/src/main/java/io/github/prospector/modmenu/api/ModMenuApi.java @@ -5,6 +5,7 @@ import java.util.function.Function; import java.util.function.Supplier; import net.minecraft.src.GuiScreen; +import org.jetbrains.annotations.ApiStatus; public interface ModMenuApi { /** @@ -31,9 +32,10 @@ static void addConfigOverride(String modid, Runnable action) { * now allows ModMenu to open the screen for you, rather than depending * on you to open it, and gets rid of the messy Optional->Supplier wrapping. * - * @deprecated Will be removed in 1.15 snapshots. + * @deprecated For internal use only. */ @Deprecated + @ApiStatus.Internal default Optional> getConfigScreen(GuiScreen screen) { return Optional.empty(); } diff --git a/src/main/java/io/github/prospector/modmenu/config/ModMenuConfig.java b/src/main/java/io/github/prospector/modmenu/config/ModMenuConfig.java index ccdbdc8a7..0fe83adf4 100644 --- a/src/main/java/io/github/prospector/modmenu/config/ModMenuConfig.java +++ b/src/main/java/io/github/prospector/modmenu/config/ModMenuConfig.java @@ -4,6 +4,7 @@ import net.fabricmc.loader.api.ModContainer; import java.util.Comparator; + public class ModMenuConfig { private boolean showLibraries = false; private Sorting sorting = Sorting.ASCENDING; @@ -26,12 +27,12 @@ public Sorting getSorting() { return sorting; } - public static enum Sorting { + public enum Sorting { ASCENDING(Comparator.comparing(modContainer -> HardcodedUtil.formatFabricModuleName(modContainer.getMetadata().getName())), "A-Z"), DECENDING(ASCENDING.getComparator().reversed(), "Z-A"); - Comparator comparator; - String name; + final Comparator comparator; + final String name; Sorting(Comparator comparator, String name) { this.comparator = comparator; diff --git a/src/main/java/io/github/prospector/modmenu/gui/DescriptionListWidget.java b/src/main/java/io/github/prospector/modmenu/gui/DescriptionListWidget.java index e6a6a1f5b..0850e4bde 100644 --- a/src/main/java/io/github/prospector/modmenu/gui/DescriptionListWidget.java +++ b/src/main/java/io/github/prospector/modmenu/gui/DescriptionListWidget.java @@ -2,11 +2,14 @@ import io.github.prospector.modmenu.util.HardcodedUtil; import io.github.prospector.modmenu.util.RenderUtils; +import net.fabricmc.loader.api.metadata.Person; import net.minecraft.client.Minecraft; import net.minecraft.src.FontRenderer; -public class DescriptionListWidget extends EntryListWidget { +import java.util.Collection; +import java.util.List; +public class DescriptionListWidget extends EntryListWidget { private final ModListScreen parent; private final FontRenderer textRenderer; private ModListEntry lastSelected = null; @@ -41,6 +44,9 @@ public void render(int mouseX, int mouseY, float delta) { setScrollAmount(-Double.MAX_VALUE); String description = lastSelected.getMetadata().getDescription(); String id = lastSelected.getMetadata().getId(); + Collection authors = lastSelected.getMetadata().getAuthors(); + Collection contributors = lastSelected.getMetadata().getContributors(); + Collection licenses = lastSelected.getMetadata().getLicense(); if (description.isEmpty() && HardcodedUtil.getHardcodedDescriptions().containsKey(id)) { description = HardcodedUtil.getHardcodedDescription(id); } @@ -49,6 +55,27 @@ public void render(int mouseX, int mouseY, float delta) { children().add(new DescriptionEntry(line)); } } + if (!authors.isEmpty()) { + if (!children().isEmpty()) children().add(new DescriptionEntry("")); + children().add(new DescriptionEntry("Authors:")); + for (Person person : authors) { + children().add(new DescriptionEntry(" " + person.getName())); + } + } + if (!contributors.isEmpty()) { + if (!children().isEmpty()) children().add(new DescriptionEntry("")); + children().add(new DescriptionEntry("Contributors:")); + for (Person person : contributors) { + children().add(new DescriptionEntry(" " + person.getName())); + } + } + if (!licenses.isEmpty()) { + if (!children().isEmpty()) children().add(new DescriptionEntry("")); + children().add(new DescriptionEntry("Licenses:")); + for (String license : licenses) { + children().add(new DescriptionEntry(" " + license)); + } + } } super.render(mouseX, mouseY, delta); } diff --git a/src/main/java/io/github/prospector/modmenu/gui/EntryListWidget.java b/src/main/java/io/github/prospector/modmenu/gui/EntryListWidget.java index 5656511ac..3f1956d28 100644 --- a/src/main/java/io/github/prospector/modmenu/gui/EntryListWidget.java +++ b/src/main/java/io/github/prospector/modmenu/gui/EntryListWidget.java @@ -15,6 +15,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL14; +@SuppressWarnings({"unchecked", "unused"}) @Environment(EnvType.CLIENT) public abstract class EntryListWidget> extends GuiScreen { protected static final int DRAG_OUTSIDE = -2; diff --git a/src/main/java/io/github/prospector/modmenu/gui/GuiButtonAccessor.java b/src/main/java/io/github/prospector/modmenu/gui/GuiButtonAccessor.java index 09d656e9f..1fa72f59a 100644 --- a/src/main/java/io/github/prospector/modmenu/gui/GuiButtonAccessor.java +++ b/src/main/java/io/github/prospector/modmenu/gui/GuiButtonAccessor.java @@ -4,10 +4,8 @@ import net.minecraft.src.GuiButton; public class GuiButtonAccessor { - public static GuiButton createButton(int buttonId, int x, int y, int width, int height, String text) { GuiButton button = new GuiButton(buttonId, x, y, text); - //noinspection ConstantConditions MixinGuiButton accessor = (MixinGuiButton) button; accessor.setWidth(width); accessor.setHeight(height); diff --git a/src/main/java/io/github/prospector/modmenu/mixin/MixinGuiButton.java b/src/main/java/io/github/prospector/modmenu/mixin/MixinGuiButton.java index 42d4ce2bf..a0d23864b 100644 --- a/src/main/java/io/github/prospector/modmenu/mixin/MixinGuiButton.java +++ b/src/main/java/io/github/prospector/modmenu/mixin/MixinGuiButton.java @@ -6,7 +6,6 @@ @Mixin(value = GuiButton.class, remap = false) public interface MixinGuiButton { - @Accessor int getWidth(); @@ -15,5 +14,4 @@ public interface MixinGuiButton { @Accessor void setHeight(int height); - } diff --git a/src/main/java/io/github/prospector/modmenu/mixin/MixinGameMenuScreen.java b/src/main/java/io/github/prospector/modmenu/mixin/MixinGuiIngameMenu.java similarity index 95% rename from src/main/java/io/github/prospector/modmenu/mixin/MixinGameMenuScreen.java rename to src/main/java/io/github/prospector/modmenu/mixin/MixinGuiIngameMenu.java index 046a6423d..d6be77fd6 100644 --- a/src/main/java/io/github/prospector/modmenu/mixin/MixinGameMenuScreen.java +++ b/src/main/java/io/github/prospector/modmenu/mixin/MixinGuiIngameMenu.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(value = GuiIngameMenu.class, remap = false) -public class MixinGameMenuScreen extends GuiScreen { +public class MixinGuiIngameMenu extends GuiScreen { @SuppressWarnings("unchecked") @Inject(at = @At("RETURN"), method = "initGui") diff --git a/src/main/java/io/github/prospector/modmenu/mixin/MixinTitleScreen.java b/src/main/java/io/github/prospector/modmenu/mixin/MixinGuiMainMenu.java similarity index 96% rename from src/main/java/io/github/prospector/modmenu/mixin/MixinTitleScreen.java rename to src/main/java/io/github/prospector/modmenu/mixin/MixinGuiMainMenu.java index 4da674554..be38c3910 100644 --- a/src/main/java/io/github/prospector/modmenu/mixin/MixinTitleScreen.java +++ b/src/main/java/io/github/prospector/modmenu/mixin/MixinGuiMainMenu.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(value = GuiMainMenu.class, remap = false) -public class MixinTitleScreen extends GuiScreen { +public class MixinGuiMainMenu extends GuiScreen { @Inject(at = @At("RETURN"), method = "initGui") public void drawMenuButton(CallbackInfo info) { GuiButton texturePackButton = this.controlList.get(2); diff --git a/src/main/java/io/github/prospector/modmenu/mixin/MixinTexturePacks.java b/src/main/java/io/github/prospector/modmenu/mixin/MixinTexturePacks.java index ca397ecbd..8f4f2ccb1 100644 --- a/src/main/java/io/github/prospector/modmenu/mixin/MixinTexturePacks.java +++ b/src/main/java/io/github/prospector/modmenu/mixin/MixinTexturePacks.java @@ -12,12 +12,10 @@ @Mixin(value = {TexturePackBase.class, TexturePackCustom.class}, remap = false) public class MixinTexturePacks { - @Inject(method = "getResourceAsStream", at = @At(value = "INVOKE", target = "Ljava/lang/Class;getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;", remap = false), cancellable = true) private void onGetResource(String resource, CallbackInfoReturnable ci) { InputStream in = ModMenu.class.getClassLoader().getResourceAsStream(resource); if (in != null) ci.setReturnValue(in); } - } diff --git a/src/main/java/io/github/prospector/modmenu/util/HardcodedUtil.java b/src/main/java/io/github/prospector/modmenu/util/HardcodedUtil.java index e50eb02c8..c85cca271 100644 --- a/src/main/java/io/github/prospector/modmenu/util/HardcodedUtil.java +++ b/src/main/java/io/github/prospector/modmenu/util/HardcodedUtil.java @@ -45,7 +45,7 @@ public static void initializeHardcodings() { HARDCODED_DESCRIPTIONS.put("fabric-resource-loader-v0", "Asset and data resource loading."); HARDCODED_DESCRIPTIONS.put("fabric-tag-extensions-v0", "Hooks for tags."); HARDCODED_DESCRIPTIONS.put("fabric-textures-v0", "Hooks for texture loading and registration."); - HARDCODED_DESCRIPTIONS.put("minecraft", "The base game."); + HARDCODED_DESCRIPTIONS.put("minecraft", "The based game."); } public static void hardcodeModuleMetadata(ModContainer mod, ModMetadata metadata, String id) { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index d737aa024..457e9cdad 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -12,9 +12,9 @@ ] }, "contact": { - "homepage": "https://minecraft.curseforge.com/projects/modmenu", - "sources": "https://github.com/Prospector/ModMenu", - "issues": "https://github.com/Prospector/ModMenu/issues" + "homepage": "https://github.com/Turnip-Labs/", + "sources": "https://github.com/Turnip-Labs/ModMenu", + "issues": "https://github.com/Turnip-Labs/ModMenu/issues" }, "depends": { "fabricloader": "*" @@ -45,7 +45,8 @@ "LeonXu98", "magneticflux", "Earthcomputer", - "Ambos" + "Ambos", + "pkstDev" ], "description": "Adds a mod menu to view the list of mods you have installed.", "mixins": [ diff --git a/src/main/resources/mixins.modmenu.json b/src/main/resources/mixins.modmenu.json index aedc64bbf..0751118ef 100644 --- a/src/main/resources/mixins.modmenu.json +++ b/src/main/resources/mixins.modmenu.json @@ -3,8 +3,8 @@ "package": "io.github.prospector.modmenu.mixin", "compatibilityLevel": "JAVA_8", "client": [ - "MixinGameMenuScreen", - "MixinTitleScreen", + "MixinGuiIngameMenu", + "MixinGuiMainMenu", "MixinTexturePacks", "MixinGuiButton", "MinecraftAccessor"