From d8ee48b24ced8df7417f1e143b95c58c9a606e8a Mon Sep 17 00:00:00 2001 From: LostLuma Date: Sun, 16 Jul 2023 16:14:42 +0200 Subject: [PATCH] Allow mods to hide themselves --- .../com/terraformersmc/modmenu/ModMenu.java | 21 +++++++++++-------- .../modmenu/gui/ModsScreen.java | 6 +++--- .../modmenu/gui/widget/ModListWidget.java | 2 +- .../terraformersmc/modmenu/util/mod/Mod.java | 2 ++ .../util/mod/fabric/FabricDummyParentMod.java | 6 ++++++ .../modmenu/util/mod/fabric/FabricMod.java | 9 ++++++++ 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/terraformersmc/modmenu/ModMenu.java b/src/main/java/com/terraformersmc/modmenu/ModMenu.java index 31fa5e88f..5fa7e0679 100644 --- a/src/main/java/com/terraformersmc/modmenu/ModMenu.java +++ b/src/main/java/com/terraformersmc/modmenu/ModMenu.java @@ -82,15 +82,15 @@ public void onInitializeClient() { // Fill mods map for (ModContainer modContainer : FabricLoader.getInstance().getAllMods()) { - if (!ModMenuConfig.HIDDEN_MODS.getValue().contains(modContainer.getMetadata().getId())) { - if (FabricLoader.getInstance().isModLoaded("quilt_loader")) { - QuiltMod mod = new QuiltMod(modContainer, modpackMods); - MODS.put(mod.getId(), mod); - } else { - FabricMod mod = new FabricMod(modContainer, modpackMods); - MODS.put(mod.getId(), mod); - } + Mod mod; + + if (runningQuilt) { + mod = new QuiltMod(modContainer, modpackMods); + } else { + mod = new FabricMod(modContainer, modpackMods); } + + MODS.put(mod.getId(), mod); } if (ModMenuConfig.UPDATE_CHECKER.getValue()) { @@ -101,6 +101,9 @@ public void onInitializeClient() { // Initialize parent map for (Mod mod : MODS.values()) { + if (mod.isHidden()) { + continue; + } String parentId = mod.getParent(); if (parentId != null) { Mod parent = MODS.getOrDefault(parentId, dummyParents.get(parentId)); @@ -129,7 +132,7 @@ public static String getDisplayedModCount() { cachedDisplayedModCount = Math.toIntExact(MODS.values().stream().filter(mod -> (ModMenuConfig.COUNT_CHILDREN.getValue() || mod.getParent() == null) && (ModMenuConfig.COUNT_LIBRARIES.getValue() || !mod.getBadges().contains(Mod.Badge.LIBRARY)) && - (ModMenuConfig.COUNT_HIDDEN_MODS.getValue() || !ModMenuConfig.HIDDEN_MODS.getValue().contains(mod.getId())) + (ModMenuConfig.COUNT_HIDDEN_MODS.getValue() || !mod.isHidden()) ).count()); } return NumberFormat.getInstance().format(cachedDisplayedModCount); diff --git a/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java b/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java index e744f2b9c..1e66ff473 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java @@ -359,10 +359,10 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) } private Text computeModCountText(boolean includeLibs) { - int[] rootMods = formatModCount(ModMenu.ROOT_MODS.values().stream().filter(mod -> !mod.getBadges().contains(Mod.Badge.LIBRARY)).map(Mod::getId).collect(Collectors.toSet())); + int[] rootMods = formatModCount(ModMenu.ROOT_MODS.values().stream().filter(mod -> !mod.isHidden() && !mod.getBadges().contains(Mod.Badge.LIBRARY)).map(Mod::getId).collect(Collectors.toSet())); if (includeLibs && ModMenuConfig.SHOW_LIBRARIES.getValue()) { - int[] rootLibs = formatModCount(ModMenu.ROOT_MODS.values().stream().filter(mod -> mod.getBadges().contains(Mod.Badge.LIBRARY)).map(Mod::getId).collect(Collectors.toSet())); + int[] rootLibs = formatModCount(ModMenu.ROOT_MODS.values().stream().filter(mod -> !mod.isHidden() && mod.getBadges().contains(Mod.Badge.LIBRARY)).map(Mod::getId).collect(Collectors.toSet())); return TranslationUtil.translateNumeric("modmenu.showingModsLibraries", rootMods, rootLibs); } else { return TranslationUtil.translateNumeric("modmenu.showingMods", rootMods); @@ -371,7 +371,7 @@ private Text computeModCountText(boolean includeLibs) { private Text computeLibraryCountText() { if (ModMenuConfig.SHOW_LIBRARIES.getValue()) { - int[] rootLibs = formatModCount(ModMenu.ROOT_MODS.values().stream().filter(mod -> mod.getBadges().contains(Mod.Badge.LIBRARY)).map(Mod::getId).collect(Collectors.toSet())); + int[] rootLibs = formatModCount(ModMenu.ROOT_MODS.values().stream().filter(mod -> !mod.isHidden() && mod.getBadges().contains(Mod.Badge.LIBRARY)).map(Mod::getId).collect(Collectors.toSet())); return TranslationUtil.translateNumeric("modmenu.showingLibraries", rootLibs); } else { return Text.literal(null); diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java index d5bdcece3..1c6e3d69f 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java @@ -129,7 +129,7 @@ private void filter(String searchTerm, boolean refresh, boolean search) { return false; } } - return !ModMenuConfig.HIDDEN_MODS.getValue().contains(mod.getId()); + return !mod.isHidden(); }).collect(Collectors.toSet()); if (DEBUG) { diff --git a/src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java b/src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java index c2e3df964..44a371ab7 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java +++ b/src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java @@ -114,6 +114,8 @@ default String getTranslatedDescription() { boolean getChildHasUpdate(); + boolean isHidden(); + enum Badge { LIBRARY("modmenu.badge.library", 0xff107454, 0xff093929, "library"), CLIENT("modmenu.badge.clientsideOnly", 0xff2b4b7c, 0xff0e2a55, null), diff --git a/src/main/java/com/terraformersmc/modmenu/util/mod/fabric/FabricDummyParentMod.java b/src/main/java/com/terraformersmc/modmenu/util/mod/fabric/FabricDummyParentMod.java index dd0219911..4d775eef9 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/mod/fabric/FabricDummyParentMod.java +++ b/src/main/java/com/terraformersmc/modmenu/util/mod/fabric/FabricDummyParentMod.java @@ -1,6 +1,7 @@ package com.terraformersmc.modmenu.util.mod.fabric; import com.terraformersmc.modmenu.ModMenu; +import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.util.mod.Mod; import com.terraformersmc.modmenu.util.mod.ModrinthData; import net.fabricmc.loader.api.FabricLoader; @@ -179,4 +180,9 @@ public boolean getChildHasUpdate() { public void setChildHasUpdate() { this.childHasUpdate = true; } + + @Override + public boolean isHidden() { + return ModMenuConfig.HIDDEN_MODS.getValue().contains(this.getId()); + } } diff --git a/src/main/java/com/terraformersmc/modmenu/util/mod/fabric/FabricMod.java b/src/main/java/com/terraformersmc/modmenu/util/mod/fabric/FabricMod.java index b668849a8..844dd4057 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/mod/fabric/FabricMod.java +++ b/src/main/java/com/terraformersmc/modmenu/util/mod/fabric/FabricMod.java @@ -5,6 +5,7 @@ import com.google.common.hash.Hashing; import com.google.common.io.Files; import com.terraformersmc.modmenu.ModMenu; +import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.util.OptionalUtil; import com.terraformersmc.modmenu.util.mod.Mod; import com.terraformersmc.modmenu.util.mod.ModrinthData; @@ -43,6 +44,8 @@ public class FabricMod implements Mod { protected boolean childHasUpdate = false; + protected boolean hidesItself = false; + public FabricMod(ModContainer modContainer, Set modpackMods) { this.container = modContainer; this.metadata = modContainer.getMetadata(); @@ -86,6 +89,7 @@ public FabricMod(ModContainer modContainer, Set modpackMods) { badgeNames.addAll(CustomValueUtil.getStringSet("badges", modMenuObject).orElse(new HashSet<>())); links.putAll(CustomValueUtil.getStringMap("links", modMenuObject).orElse(new HashMap<>())); allowsUpdateChecks = CustomValueUtil.getBoolean("update_checker", modMenuObject).orElse(true); + hidesItself = CustomValueUtil.getBoolean("hidden", modMenuObject).orElse(false); } this.modMenuData = new ModMenuData( badgeNames, @@ -329,6 +333,11 @@ public void setChildHasUpdate() { this.childHasUpdate = true; } + @Override + public boolean isHidden() { + return this.hidesItself || ModMenuConfig.HIDDEN_MODS.getValue().contains(this.getId()); + } + static class ModMenuData { private final Set badges; private Optional parent;