From 6094422792808b28c03e9d1eb405e56cb6314543 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 22 Feb 2021 23:56:22 +0100 Subject: [PATCH] Split off highly version-dependent code from ModCompat --- .../com/replaymod/core/utils/ModCompat.java | 79 +------------------ .../replaymod/core/utils/ModInfoGetter.java | 25 ++++++ .../replaymod/core/utils/ModInfoGetter.java | 29 +++++++ .../replaymod/core/utils/ModInfoGetter.java | 29 +++++++ .../replaymod/core/utils/ModInfoGetter.java | 11 +++ .../replaymod/core/utils/ModInfoGetter.java | 32 ++++++++ 6 files changed, 127 insertions(+), 78 deletions(-) create mode 100644 src/main/java/com/replaymod/core/utils/ModInfoGetter.java create mode 100644 versions/1.11.2/src/main/java/com/replaymod/core/utils/ModInfoGetter.java create mode 100644 versions/1.12.2/src/main/java/com/replaymod/core/utils/ModInfoGetter.java create mode 100644 versions/1.14.4-forge/src/main/java/com/replaymod/core/utils/ModInfoGetter.java create mode 100644 versions/1.7.10/src/main/java/com/replaymod/core/utils/ModInfoGetter.java diff --git a/src/main/java/com/replaymod/core/utils/ModCompat.java b/src/main/java/com/replaymod/core/utils/ModCompat.java index 453011bd..44a6173b 100644 --- a/src/main/java/com/replaymod/core/utils/ModCompat.java +++ b/src/main/java/com/replaymod/core/utils/ModCompat.java @@ -1,89 +1,12 @@ package com.replaymod.core.utils; import com.replaymod.replaystudio.data.ModInfo; -import net.minecraft.util.Identifier; - -//#if FABRIC>=1 -import net.fabricmc.loader.api.FabricLoader; -import net.fabricmc.loader.api.ModContainer; -import net.minecraft.util.registry.Registry; -//#else -//#if MC>=11200 -//$$ import net.minecraftforge.registries.ForgeRegistry; -//$$ import net.minecraftforge.registries.RegistryManager; -//#else -//$$ import net.minecraftforge.fml.common.registry.GameData; -//$$ import java.util.stream.Stream; -//#endif -//$$ -//#if MC>=11400 -//$$ import net.minecraftforge.fml.ModList; -//#else -//$$ import net.minecraftforge.fml.common.Loader; -//$$ import net.minecraftforge.fml.common.ModContainer; -//#endif -//#endif import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; public class ModCompat { - @SuppressWarnings("unchecked") public static Collection getInstalledNetworkMods() { - //#if MC>=11400 - //#if FABRIC>=1 - Map modInfoMap = FabricLoader.getInstance().getAllMods().stream() - .map(ModContainer::getMetadata) - .map(m -> new ModInfo(m.getId(), m.getName(), m.getVersion().toString())) - .collect(Collectors.toMap(ModInfo::getId, Function.identity())); - return Registry.REGISTRIES.stream() - .map(Registry::getIds).flatMap(Set::stream) - //#else - //$$ Map modInfoMap = ModList.get().getMods().stream() - //$$ .map(m -> new ModInfo(m.getModId(), m.getDisplayName(), m.getVersion().toString())) - //$$ .collect(Collectors.toMap(ModInfo::getId, Function.identity())); - //$$ return RegistryManager.ACTIVE.takeSnapshot(false).keySet().stream() - //$$ .map(RegistryManager.ACTIVE::getRegistry) - //$$ .map(ForgeRegistry::getKeys).flatMap(Set::stream) - //#endif - .map(Identifier::getNamespace).filter(s -> !s.equals("minecraft")).distinct() - .map(modInfoMap::get).filter(Objects::nonNull) - .collect(Collectors.toList()); - //#else - //$$ Map ignoreCaseMap = Loader.instance().getModList().stream() - //$$ .collect(Collectors.toMap(m -> m.getModId().toLowerCase(), Function.identity())); - //#if MC>=11200 - //$$ return RegistryManager.ACTIVE.takeSnapshot(false).keySet().stream() - //$$ .map(RegistryManager.ACTIVE::getRegistry) - //$$ .map(ForgeRegistry::getKeys).flatMap(Set::stream) - //$$ .map(ResourceLocation::getResourceDomain).filter(s -> !s.equals("minecraft")).distinct() - //$$ .map(String::toLowerCase).map(ignoreCaseMap::get).filter(mod -> mod != null) - //$$ .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion())) - //$$ .collect(Collectors.toList()); - //#else - //#if MC>=10800 - //$$ return Stream.concat( - //$$ ((Set) GameData.getBlockRegistry().getKeys()).stream(), - //$$ ((Set) GameData.getItemRegistry().getKeys()).stream() - //$$ ).map(ResourceLocation::getResourceDomain).filter(s -> !s.equals("minecraft")).distinct() - //$$ .map(String::toLowerCase).map(ignoreCaseMap::get).filter(mod -> mod != null) - //$$ .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion())) - //$$ .collect(Collectors.toList()); - //#else - //$$ return Stream.concat( - //$$ ((Set) GameData.getBlockRegistry().getKeys()).stream(), - //$$ ((Set) GameData.getItemRegistry().getKeys()).stream() - //$$ ).map(name -> { - //$$ if (!name.contains(":")) return null; // Still using old names without namespace, can't do anything, ignore - //$$ return name.split(":", 2)[0]; - //$$ }).filter(s -> !s.equals("minecraft")).distinct() - //$$ .map(String::toLowerCase).map(ignoreCaseMap::get).filter(mod -> mod != null) - //$$ .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion())) - //$$ .collect(Collectors.toList()); - //#endif - //#endif - //#endif + return ModInfoGetter.getInstalledNetworkMods(); } public static final class ModInfoDifference { diff --git a/src/main/java/com/replaymod/core/utils/ModInfoGetter.java b/src/main/java/com/replaymod/core/utils/ModInfoGetter.java new file mode 100644 index 00000000..d4bbe156 --- /dev/null +++ b/src/main/java/com/replaymod/core/utils/ModInfoGetter.java @@ -0,0 +1,25 @@ +package com.replaymod.core.utils; +import com.replaymod.replaystudio.data.ModInfo; +import net.minecraft.util.Identifier; + +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.util.registry.Registry; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +class ModInfoGetter { + static Collection getInstalledNetworkMods() { + Map modInfoMap = FabricLoader.getInstance().getAllMods().stream() + .map(ModContainer::getMetadata) + .map(m -> new ModInfo(m.getId(), m.getName(), m.getVersion().toString())) + .collect(Collectors.toMap(ModInfo::getId, Function.identity())); + return Registry.REGISTRIES.stream() + .map(Registry::getIds).flatMap(Set::stream) + .map(Identifier::getNamespace).filter(s -> !s.equals("minecraft")).distinct() + .map(modInfoMap::get).filter(Objects::nonNull) + .collect(Collectors.toList()); + } +} diff --git a/versions/1.11.2/src/main/java/com/replaymod/core/utils/ModInfoGetter.java b/versions/1.11.2/src/main/java/com/replaymod/core/utils/ModInfoGetter.java new file mode 100644 index 00000000..0d9db53a --- /dev/null +++ b/versions/1.11.2/src/main/java/com/replaymod/core/utils/ModInfoGetter.java @@ -0,0 +1,29 @@ +package com.replaymod.core.utils; + +import com.replaymod.replaystudio.data.ModInfo; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; +import net.minecraftforge.fml.common.registry.GameData; + +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class ModInfoGetter { + static Collection getInstalledNetworkMods() { + Map ignoreCaseMap = Loader.instance().getModList().stream() + .collect(Collectors.toMap(m -> m.getModId().toLowerCase(), Function.identity())); + return Stream.concat( + ((Set) GameData.getBlockRegistry().getKeys()).stream(), + ((Set) GameData.getItemRegistry().getKeys()).stream() + ).map(ResourceLocation::getResourceDomain).filter(s -> !s.equals("minecraft")).distinct() + .map(String::toLowerCase).map(ignoreCaseMap::get).filter(Objects::nonNull) + .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion())) + .collect(Collectors.toList()); + } +} diff --git a/versions/1.12.2/src/main/java/com/replaymod/core/utils/ModInfoGetter.java b/versions/1.12.2/src/main/java/com/replaymod/core/utils/ModInfoGetter.java new file mode 100644 index 00000000..1ec326e3 --- /dev/null +++ b/versions/1.12.2/src/main/java/com/replaymod/core/utils/ModInfoGetter.java @@ -0,0 +1,29 @@ +package com.replaymod.core.utils; + +import com.replaymod.replaystudio.data.ModInfo; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; +import net.minecraftforge.registries.ForgeRegistry; +import net.minecraftforge.registries.RegistryManager; + +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +class ModInfoGetter { + static Collection getInstalledNetworkMods() { + Map ignoreCaseMap = Loader.instance().getModList().stream() + .collect(Collectors.toMap(m -> m.getModId().toLowerCase(), Function.identity())); + return RegistryManager.ACTIVE.takeSnapshot(false).keySet().stream() + .map(RegistryManager.ACTIVE::getRegistry) + .map(ForgeRegistry::getKeys).flatMap(Set::stream) + .map(ResourceLocation::getResourceDomain).filter(s -> !s.equals("minecraft")).distinct() + .map(String::toLowerCase).map(ignoreCaseMap::get).filter(Objects::nonNull) + .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion())) + .collect(Collectors.toList()); + } +} diff --git a/versions/1.14.4-forge/src/main/java/com/replaymod/core/utils/ModInfoGetter.java b/versions/1.14.4-forge/src/main/java/com/replaymod/core/utils/ModInfoGetter.java new file mode 100644 index 00000000..7bb66d98 --- /dev/null +++ b/versions/1.14.4-forge/src/main/java/com/replaymod/core/utils/ModInfoGetter.java @@ -0,0 +1,11 @@ +package com.replaymod.core.utils; + +import com.replaymod.replaystudio.data.ModInfo; + +import java.util.Collection; + +class ModInfoGetter { + static Collection getInstalledNetworkMods() { + throw new UnsupportedOperationException(); + } +} diff --git a/versions/1.7.10/src/main/java/com/replaymod/core/utils/ModInfoGetter.java b/versions/1.7.10/src/main/java/com/replaymod/core/utils/ModInfoGetter.java new file mode 100644 index 00000000..c8b8e842 --- /dev/null +++ b/versions/1.7.10/src/main/java/com/replaymod/core/utils/ModInfoGetter.java @@ -0,0 +1,32 @@ +package com.replaymod.core.utils; + +import com.replaymod.replaystudio.data.ModInfo; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.registry.GameData; + +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class ModInfoGetter { + static Collection getInstalledNetworkMods() { + Map ignoreCaseMap = Loader.instance().getModList().stream() + .collect(Collectors.toMap(m -> m.getModId().toLowerCase(), Function.identity())); + return Stream.concat( + ((Set) GameData.getBlockRegistry().getKeys()).stream(), + ((Set) GameData.getItemRegistry().getKeys()).stream() + ).map(name -> { + if (!name.contains(":")) return null; // Still using old names without namespace, can't do anything, ignore + return name.split(":", 2)[0]; + }).filter(Objects::nonNull) + .filter(s -> !s.equals("minecraft")).distinct() + .map(String::toLowerCase).map(ignoreCaseMap::get).filter(Objects::nonNull) + .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion())) + .collect(Collectors.toList()); + } +}