diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java index aeca9b5161..7bbfcb0ede 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java @@ -41,14 +41,14 @@ public class ModList { private List sortedContainers; private ModList(final List modFiles, final List sortedList) { - this.modFiles = modFiles.stream().map(ModFile::getModFileInfo).toList(); + var modFileInfos = this.modFiles = modFiles.stream().map(ModFile::getModFileInfo).toList(); this.sortedList = sortedList.stream().map(IModInfo.class::cast).toList(); var byId = new HashMap(); - for (var file : this.modFiles) { + for (var file : modFileInfos) { for (var mod : file.getMods()) byId.put(mod.getModId(), mod.getOwningFile()); } - this.fileById = Collections.unmodifiableMap(byId); + this.fileById = Map.copyOf(byId); CrashReportCallables.registerCrashCallable("Mod List", this::crashReport); } @@ -67,7 +67,7 @@ public class ModList { } private String crashReport() { - return "\n"+applyForEachModFile(this::fileToLine).collect(Collectors.joining("\n\t\t", "\t\t", "")); + return "\n" + applyForEachModFile(this::fileToLine).collect(Collectors.joining("\n\t\t", "\t\t", "")); } public static ModList of(List modFiles, List sortedList) { @@ -126,10 +126,9 @@ public class ModList { map(IModFileInfo::getFile). distinct(). map(IModFile::getScanResult). - collect(Collectors.toList()); + toList(); } return modFileScanData; - } public void forEachModFile(Consumer fileConsumer) { diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java index 978cf1271f..2f82d8fc45 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java @@ -84,20 +84,20 @@ public class ModLoader { private ModList modList; private ModLoader() { - this.loadingModList = FMLLoader.getLoadingModList(); - this.loadingExceptions = this.loadingModList.getErrors().stream() + var loadingModList = this.loadingModList = FMLLoader.getLoadingModList(); + var loadingExceptions = this.loadingExceptions = loadingModList.getErrors().stream() .flatMap(ModLoadingException::fromEarlyException) .collect(Collectors.toList()); - this.loadingWarnings = this.loadingModList.getBrokenFiles().stream() + this.loadingWarnings = loadingModList.getBrokenFiles().stream() .map(file -> new ModLoadingWarning(null, ModLoadingStage.VALIDATE, InvalidModIdentifier.identifyJarProblem(file.getFilePath()).orElse("fml.modloading.brokenfile"), file.getFileName())) .collect(Collectors.toList()); - if (this.loadingExceptions.isEmpty()) { + if (loadingExceptions.isEmpty()) { this.erroredModInfos = Collections.emptySet(); } else { this.erroredModInfos = Collections.newSetFromMap(new IdentityHashMap<>()); - this.erroredModInfos.addAll(this.loadingExceptions.stream().map(ModLoadingException::getModInfo).toList()); + this.erroredModInfos.addAll(loadingExceptions.stream().map(ModLoadingException::getModInfo).toList()); } - this.loadingModList.getModFiles().stream() + loadingModList.getModFiles().stream() .filter(ModFileInfo::missingLicense) .filter(modFileInfo -> modFileInfo.getMods().stream().noneMatch(this.erroredModInfos::contains)) //Ignore files where any other mod already encountered an error .map(modFileInfo -> new ModLoadingException(null, ModLoadingStage.VALIDATE, "fml.modloading.missinglicense", null, modFileInfo.getFile())) @@ -112,16 +112,16 @@ public class ModLoader { private static String computeLanguageList() { return "\n" + FMLLoader.getLanguageLoadingProvider() - .applyForEach(lp -> lp.name() + "@" + lp.getClass().getPackage().getImplementationVersion()) + .applyForEach(lp -> lp.name() + '@' + lp.getClass().getPackage().getImplementationVersion()) .collect(Collectors.joining("\n\t\t", "\t\t", "")); } private static String computeModLauncherServiceList() { final List> mods = FMLLoader.modLauncherModList(); - return "\n"+mods.stream().map(mod->mod.getOrDefault("file","nofile")+ - " "+mod.getOrDefault("name", "missing")+ - " "+mod.getOrDefault("type","NOTYPE")+ - " "+mod.getOrDefault("description", "")). + return "\n" + mods.stream().map(mod -> mod.getOrDefault("file","nofile") + + ' ' + mod.getOrDefault("name", "missing") + + ' ' + mod.getOrDefault("type","NOTYPE") + + ' ' + mod.getOrDefault("description", "")). collect(Collectors.joining("\n\t\t","\t\t","")); } @@ -254,7 +254,7 @@ public class ModLoader { } private void handleInlineTransition(final Consumer transition, final IModLoadingState state, final ModWorkManager.DrivenExecutor syncExecutor, final Runnable ticker) { - var pb = StartupMessageManager.addProgressBar("State transition " +state.name()+" running", 0); + var pb = StartupMessageManager.addProgressBar("State transition " + state.name() + " running", 0); syncExecutor.drive(ticker); transition.accept(this.modList); syncExecutor.drive(ticker); @@ -353,11 +353,17 @@ public class ModLoader { return loadingStateValid; } + /** @deprecated Use {@link #hasCompletedState(IModLoadingState)} instead */ + @Deprecated(forRemoval = true) public boolean hasCompletedState(final String stateName) { IModLoadingState state = stateManager.findState(stateName); return completedStates.contains(state); } + public boolean hasCompletedState(IModLoadingState state) { + return completedStates.contains(state); + } + public static void runEventGenerator(Function generator) { if (!loadingStateValid) { LOGGER.error("Cowardly refusing to send event generator to a broken mod state"); diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java index c92c79b9c4..7a2ab79a3d 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java @@ -7,6 +7,7 @@ package net.minecraftforge.fml; import net.minecraftforge.fml.loading.progress.ProgressMeter; +import java.util.Objects; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -59,7 +60,7 @@ public record ModLoadingState( */ @Deprecated(since = "1.21.3", forRemoval = true) public static ModLoadingState empty(final String name, final String previous, final ModLoadingPhase phase) { - return of(name, phase).after(previous).empty(); + return new ModLoadingState(name, previous, ml -> "", ml -> 0, phase, Optional.empty(), Optional.empty()); } /** @@ -120,6 +121,22 @@ public record ModLoadingState( return new Builder(name, phase); } + @Override + public boolean equals(Object o) { + return o instanceof ModLoadingState that + && this.phase == that.phase + && this.name.equals(that.name) + && Objects.equals(this.previous, that.previous); + } + + @Override + public int hashCode() { + int result = phase.hashCode(); + result = 31 * result + name.hashCode(); + result = 31 * result + Objects.hashCode(previous); + return result; + } + public static class Builder { private final String name; private final ModLoadingPhase phase; diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModStateManager.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModStateManager.java index de1e6f8971..266a8874b0 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModStateManager.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModStateManager.java @@ -41,11 +41,13 @@ public class ModStateManager { } public IModLoadingState findState(final String stateName) { - return stateMap.values() + var result = stateMap.values() .stream() .flatMap(List::stream) .filter(mls -> mls.name().equals(stateName)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unknown IModLoadingState: " + stateName)); + .orElse(null); + if (result != null) return result; + else throw new IllegalArgumentException("Unknown IModLoadingState: " + stateName); } } diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java index 932a73c5fb..e210ecdf68 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java @@ -146,9 +146,8 @@ public class FMLLoader { } public static List beginModScan(final Map arguments) { - LOGGER.debug(SCAN,"Scanning for Mod Locators"); - var modDiscoverer = new ModDiscoverer(arguments); - modValidator = modDiscoverer.discoverMods(); + LOGGER.debug(SCAN, "Scanning for Mod Locators"); + modValidator = ModDiscoverer.discoverMods(arguments); var pluginResources = modValidator.getPluginResources(); return List.of(pluginResources); } diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModList.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModList.java index 498b0c0db4..7b7947821e 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModList.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModList.java @@ -36,9 +36,7 @@ public class LoadingModList { .map(ModFile::getModFileInfo) .map(ModFileInfo.class::cast) .toList(); - this.sortedList = sortedList.stream() - .map(ModInfo.class::cast) - .toList(); + this.sortedList = sortedList.stream().toList(); this.fileById = this.modFiles.stream() .map(ModFileInfo::getMods) .flatMap(Collection::stream) diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java index 9054865acc..3b2cbd6cb4 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java @@ -46,7 +46,7 @@ public class ModSorter { List modFiles; try { - modFiles = new UniqueModListBuilder(mods).buildUniqueList().modFiles(); + modFiles = UniqueModListBuilder.buildUniqueList(mods).modFiles(); } catch (EarlyLoadingException e) { // We cannot build any list with duped mods. We have to abort immediately and report it // Note this will never actually throw an error because the duplicate checks are done in ModDiscovererer before we get to this phase diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/UniqueModListBuilder.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/UniqueModListBuilder.java index c5a75899ea..3e15d68bd7 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/UniqueModListBuilder.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/UniqueModListBuilder.java @@ -17,8 +17,6 @@ import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.joining; @@ -26,19 +24,12 @@ import static net.minecraftforge.fml.loading.LogMarkers.LOADING; @ApiStatus.Internal @Deprecated(since = "1.21.3", forRemoval = true) // TODO: [FML][Loading] Convert to package private in 1.22 -public class UniqueModListBuilder { - private final static Logger LOGGER = LogUtils.getLogger(); +public final class UniqueModListBuilder { + private UniqueModListBuilder() {} - private final List modFiles; - - public UniqueModListBuilder(final List modFiles) { - this.modFiles = modFiles; - } - - public UniqueModListData buildUniqueList() { - List uniqueModList; - List uniqueLibListWithVersion; + private static final Logger LOGGER = LogUtils.getLogger(); + public static UniqueModListData buildUniqueList(List modFiles) { // Collect mod files by module name. This will be used for deduping purposes final Map> modFilesByFirstId = modFiles.stream() .filter(mf -> mf.getModFileInfo() != null) @@ -49,12 +40,12 @@ public class UniqueModListBuilder { .collect(groupingBy(UniqueModListBuilder::getModId)); // Select the newest by artifact version sorting of non-unique files thus identified - uniqueModList = modFilesByFirstId.entrySet().stream() + final List uniqueModList = modFilesByFirstId.entrySet().stream() .map(UniqueModListBuilder::selectNewestModInfo) .toList(); // Select the newest by artifact version sorting of non-unique files thus identified - uniqueLibListWithVersion = libFilesWithVersionByModuleName.entrySet().stream() + final List uniqueLibListWithVersion = libFilesWithVersionByModuleName.entrySet().stream() .map(UniqueModListBuilder::selectNewestModInfo) .toList(); @@ -66,12 +57,10 @@ public class UniqueModListBuilder { .collect(groupingBy(IModInfo::getModId)); // Transform to the full lib id list - final Map> versionedLibIds = uniqueLibListWithVersion.stream() + final List> versionedLibs = uniqueLibListWithVersion.stream() .map(UniqueModListBuilder::getModId) - .collect(Collectors.toMap( - Function.identity(), - libFilesWithVersionByModuleName::get - )); + .map(libFilesWithVersionByModuleName::get) + .toList(); // Its theoretically possible that some mod has somehow moved an id to a secondary place, thus causing a dupe. // We can't handle this @@ -84,24 +73,24 @@ public class UniqueModListBuilder { )).toList(); if (!dupedModErrors.isEmpty()) { - LOGGER.error(LOADING, "Found duplicate mods:\n{}", dupedModErrors.stream().collect(joining("\n"))); + LOGGER.error(LOADING, "Found duplicate mods:\n{}", String.join("\n", dupedModErrors)); throw new EarlyLoadingException("Duplicate mods found", null, dupedModErrors.stream() - .map(s -> new EarlyLoadingException.ExceptionData(s)) + .map(EarlyLoadingException.ExceptionData::new) .toList()); } - final List dupedLibErrors = versionedLibIds.values().stream() - .filter(modFiles -> modFiles.size() > 1) + final List dupedLibErrors = versionedLibs.stream() + .filter(libModFiles -> libModFiles.size() > 1) .map(mods -> String.format("\tLibrary: '%s' from files: %s", getModId(mods.getFirst()), mods.stream().map(ModFile::getFileName).collect(joining(", ")) )).toList(); if (!dupedLibErrors.isEmpty()) { - LOGGER.error(LOADING, "Found duplicate plugins or libraries:\n{}", dupedLibErrors.stream().collect(joining("\n"))); + LOGGER.error(LOADING, "Found duplicate plugins or libraries:\n{}", String.join("\n", dupedLibErrors)); throw new EarlyLoadingException("Duplicate plugins or libraries found", null, dupedLibErrors.stream() - .map(s -> new EarlyLoadingException.ExceptionData(s)) + .map(EarlyLoadingException.ExceptionData::new) .toList()); } @@ -122,7 +111,7 @@ public class UniqueModListBuilder { modInfoList.sort(Comparator.comparing(UniqueModListBuilder::getVersion).reversed()); LOGGER.debug("Selected file {} for modid {} with version {}", modInfoList.getFirst().getFileName(), fullList.getKey(), getVersion(modInfoList.getFirst())); } - return modInfoList.get(0); + return modInfoList.getFirst(); } private static ArtifactVersion getVersion(final ModFile mf) { @@ -130,7 +119,7 @@ public class UniqueModListBuilder { return mf.getJarVersion(); } - return mf.getModInfos().get(0).getVersion(); + return mf.getModInfos().getFirst().getVersion(); } private static String getModId(ModFile modFile) { @@ -138,7 +127,7 @@ public class UniqueModListBuilder { return modFile.getSecureJar().name(); } - return modFile.getModFileInfo().getMods().get(0).getModId(); + return modFile.getModFileInfo().getMods().getFirst().getModId(); } public record UniqueModListData(List modFiles, Map> modFilesByFirstId) {} diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModProvider.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModProvider.java index fd63fdfca1..a8b77b1c2c 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModProvider.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModProvider.java @@ -145,6 +145,12 @@ public abstract class AbstractModProvider implements IModProvider { public Optional getConfigElement(String... key) { return Optional.empty(); } + + @Override + public List getConfigList(String key) { + return Collections.emptyList(); + } + @Override public List getConfigList(String... key) { return Collections.emptyList(); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java index f098966a2c..ed5ee7083d 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java @@ -5,7 +5,6 @@ package net.minecraftforge.fml.loading.moddiscovery; -import com.google.common.collect.ImmutableList; import com.mojang.logging.LogUtils; import cpw.mods.modlauncher.Launcher; import cpw.mods.modlauncher.api.IModuleLayerManager; @@ -35,41 +34,36 @@ import java.util.ServiceLoader; import java.util.stream.Collectors; @ApiStatus.Internal -public class ModDiscoverer { - private static final Logger LOGGER = LogUtils.getLogger(); - private final ServiceLoader modLocators; - private final ServiceLoader dependencyLocators; - private final List modLocatorList; - private final List dependencyLocatorList; +public final class ModDiscoverer { + private ModDiscoverer() {} - public ModDiscoverer(Map arguments) { + private static final Logger LOGGER = LogUtils.getLogger(); + + @SuppressWarnings("removal") + public static ModValidator discoverMods(Map arguments) { Launcher.INSTANCE.environment().computePropertyIfAbsent(Environment.Keys.MODDIRECTORYFACTORY.get(), v->ModsFolderLocator::new); Launcher.INSTANCE.environment().computePropertyIfAbsent(Environment.Keys.PROGRESSMESSAGE.get(), v-> StartupNotificationManager.locatorConsumer().orElseGet(()-> s->{})); final var moduleLayerManager = Launcher.INSTANCE.environment().findModuleLayerManager().orElseThrow(); - modLocators = ServiceLoader.load(moduleLayerManager.getLayer(IModuleLayerManager.Layer.SERVICE).orElseThrow(), IModLocator.class); - dependencyLocators = ServiceLoader.load(moduleLayerManager.getLayer(IModuleLayerManager.Layer.SERVICE).orElseThrow(), IDependencyLocator.class); - modLocatorList = ServiceLoaderUtils.streamServiceLoader(()-> modLocators, sce->LOGGER.error("Failed to load mod locator list", sce)).collect(Collectors.toList()); + ServiceLoader modLocators = ServiceLoader.load(moduleLayerManager.getLayer(IModuleLayerManager.Layer.SERVICE).orElseThrow(), IModLocator.class); + ServiceLoader dependencyLocators = ServiceLoader.load(moduleLayerManager.getLayer(IModuleLayerManager.Layer.SERVICE).orElseThrow(), IDependencyLocator.class); + List modLocatorList = ServiceLoaderUtils.streamWithErrorHandling(modLocators, sce -> LOGGER.error("Failed to load mod locator list", sce)).toList(); for (IModLocator iModLocator : modLocatorList) { iModLocator.initArguments(arguments); } - dependencyLocatorList = ServiceLoaderUtils.streamServiceLoader(()-> dependencyLocators, sce->LOGGER.error("Failed to load dependency locator list", sce)).collect(Collectors.toList()); + List dependencyLocatorList = ServiceLoaderUtils.streamWithErrorHandling(dependencyLocators, sce -> LOGGER.error("Failed to load dependency locator list", sce)).toList(); for (IDependencyLocator l : dependencyLocatorList) { l.initArguments(arguments); } - if (LOGGER.isDebugEnabled(LogMarkers.CORE)) - { + if (LOGGER.isDebugEnabled(LogMarkers.CORE)) { LOGGER.debug(LogMarkers.CORE, "Found Mod Locators : {}", modLocatorList.stream() - .map(modLocator -> "(%s:%s)".formatted(modLocator.name(), - modLocator.getClass().getPackage().getImplementationVersion())).collect(Collectors.joining(","))); + .map(modLocator -> "(%s:%s)".formatted(modLocator.name(), + modLocator.getClass().getPackage().getImplementationVersion())).collect(Collectors.joining(","))); LOGGER.debug(LogMarkers.CORE, "Found Dependency Locators : {}", dependencyLocatorList.stream() - .map(dependencyLocator -> "(%s:%s)".formatted(dependencyLocator.name(), - dependencyLocator.getClass().getPackage().getImplementationVersion())).collect(Collectors.joining(","))); + .map(dependencyLocator -> "(%s:%s)".formatted(dependencyLocator.name(), + dependencyLocator.getClass().getPackage().getImplementationVersion())).collect(Collectors.joining(","))); } - } - @SuppressWarnings("removal") - public ModValidator discoverMods() { LOGGER.debug(LogMarkers.SCAN,"Scanning for mods and other resources to load. We know {} ways to find mods", modLocatorList.size()); List loadedFiles = new ArrayList<>(); List discoveryErrorData = new ArrayList<>(); @@ -131,8 +125,7 @@ public class ModDiscoverer { //First processing run of the mod list. Any duplicates will cause resolution failure and dependency loading will be skipped. Map> modFilesMap = new EnumMap<>(IModFile.Type.class); try { - final UniqueModListBuilder modsUniqueListBuilder = new UniqueModListBuilder(loadedFiles); - final UniqueModListBuilder.UniqueModListData uniqueModsData = modsUniqueListBuilder.buildUniqueList(); + final UniqueModListBuilder.UniqueModListData uniqueModsData = UniqueModListBuilder.buildUniqueList(loadedFiles); //Grab the temporary results. //This allows loading to continue to a base state, in case dependency loading fails. @@ -152,7 +145,7 @@ public class ModDiscoverer { for (IDependencyLocator locator : dependencyLocatorList) { try { LOGGER.debug(LogMarkers.SCAN,"Trying locator {}", locator); - final List locatedMods = ImmutableList.copyOf(loadedFiles); + final List locatedMods = List.copyOf(loadedFiles); var locatedFiles = locator.scanMods(locatedMods); if (locatedFiles.stream().anyMatch(file -> !(file instanceof ModFile))) { @@ -169,8 +162,7 @@ public class ModDiscoverer { //Second processing run of the mod list. Any duplicates will cause resolution failure and only the mods list will be loaded. try { - final UniqueModListBuilder modsAndDependenciesUniqueListBuilder = new UniqueModListBuilder(loadedFiles); - final UniqueModListBuilder.UniqueModListData uniqueModsAndDependenciesData = modsAndDependenciesUniqueListBuilder.buildUniqueList(); + final UniqueModListBuilder.UniqueModListData uniqueModsAndDependenciesData = UniqueModListBuilder.buildUniqueList(loadedFiles); //We now only need the mod files map, not the list. modFilesMap = uniqueModsAndDependenciesData.modFiles().stream() diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileInfo.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileInfo.java index 520032925d..f6ea9a2331 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileInfo.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileInfo.java @@ -264,7 +264,7 @@ public class ModFileInfo implements IModFileInfo, IConfigurable { @Override public String versionString() { - return getMods().get(0).getVersion().toString(); + return getMods().getFirst().getVersion().toString(); } @Override diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java index 3bac307894..b182043d08 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java @@ -34,7 +34,6 @@ public class ModValidator { private LoadingModList loadingModList; private final List brokenFiles = new ArrayList<>(); private final List discoveryErrorData; - private final List modFileLoadingExceptions; public ModValidator(Map> modFiles, List brokenFiles, List discoveryErrorData, List modFileLoadingExceptions) { this.candidateMods = lst(modFiles.get(IModFile.Type.MOD)); @@ -44,7 +43,6 @@ public class ModValidator { this.candidatePlugins.addAll(lst(modFiles.get(IModFile.Type.LIBRARY))); this.discoveryErrorData = discoveryErrorData; this.brokenFiles.addAll(brokenFiles.stream().map(IModFileInfo::getFile).toList()); - this.modFileLoadingExceptions = modFileLoadingExceptions; } public ModValidator(Map> modFiles, List brokenFiles, List discoveryErrorData) { @@ -52,7 +50,9 @@ public class ModValidator { } private static List lst(List files) { - return files == null ? new ArrayList<>() : new ArrayList<>(files); + if (files == null) return new ArrayList<>(); + if (files instanceof ArrayList) return files; + return new ArrayList<>(files); } public void stage1Validation() { @@ -60,7 +60,7 @@ public class ModValidator { if (LOGGER.isDebugEnabled(LogMarkers.SCAN)) { LOGGER.debug(LogMarkers.SCAN, "Found {} mod files with {} mods", candidateMods.size(), candidateMods.stream().mapToInt(mf -> mf.getModInfos().size()).sum()); } - ImmediateWindowHandler.updateProgress("Found "+candidateMods.size()+" mod candidates"); + ImmediateWindowHandler.updateProgress("Found " + candidateMods.size() + " mod candidates"); } @NotNull diff --git a/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch b/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch index 51b14fc932..f536356633 100644 --- a/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch @@ -30,7 +30,7 @@ + } + + static { -+ if (net.minecraftforge.fml.ModLoader.isLoadingStateValid() && !net.minecraftforge.fml.ModLoader.get().hasCompletedState("LOAD_REGISTRIES")) { ++ if (net.minecraftforge.fml.ModLoader.isLoadingStateValid() && !net.minecraftforge.fml.ModLoader.get().hasCompletedState(net.minecraftforge.common.ForgeStatesProvider.LOAD_REGISTRIES)) { + com.mojang.logging.LogUtils.getLogger().error( + "net.minecraft.client.renderer.Sheets loaded too early, modded registry-based materials may not work correctly", + new IllegalStateException("net.minecraft.client.renderer.Sheets loaded too early") diff --git a/src/main/java/net/minecraftforge/resource/ResourcePackLoader.java b/src/main/java/net/minecraftforge/resource/ResourcePackLoader.java index 4203d986b5..05876cfdbd 100644 --- a/src/main/java/net/minecraftforge/resource/ResourcePackLoader.java +++ b/src/main/java/net/minecraftforge/resource/ResourcePackLoader.java @@ -45,7 +45,7 @@ public class ResourcePackLoader { } public static List getPackNames() { - return ModList.get().applyForEachModFile(mf->"mod:"+mf.getModInfos().get(0).getModId()).filter(n->!n.equals("mod:minecraft")).collect(Collectors.toList()); + return ModList.get().applyForEachModFile(mf->"mod:"+mf.getModInfos().getFirst().getModId()).filter(n->!n.equals("mod:minecraft")).toList(); } public static Comparator> getSorter() { @@ -55,7 +55,7 @@ public class ResourcePackLoader { ModList.get().getModFiles().stream() .filter(mf -> mf.requiredLanguageLoaders().stream().noneMatch(ls->ls.languageName().equals("minecraft"))) - .map(e -> e.getMods().get(0).getModId()) + .map(e -> e.getMods().getFirst().getModId()) .map(e -> "mod:" + e) .forEach(order::add); @@ -91,7 +91,7 @@ public class ResourcePackLoader { var root = file.findResource(""); var supplier = new PathPackResources.PathResourcesSupplier(root); - var modinfo = file.getModInfos().get(0); + var modinfo = file.getModInfos().getFirst(); var name = "mod:" + modinfo.getModId(); var info = new PackLocationInfo(name, Component.literal(file.getFileName()), PackSource.DEFAULT, Optional.empty()); var meta = Pack.readPackMetadata(info, supplier, version, type); diff --git a/src/main/java/net/minecraftforge/server/command/ModListCommand.java b/src/main/java/net/minecraftforge/server/command/ModListCommand.java index a6d4dc1f0d..585f4ee209 100644 --- a/src/main/java/net/minecraftforge/server/command/ModListCommand.java +++ b/src/main/java/net/minecraftforge/server/command/ModListCommand.java @@ -26,8 +26,8 @@ class ModListCommand { String.format(Locale.ROOT, "%s %s : %s (%s) - %d", modFile.getProvider().name().replace(' ', '_'), modFile.getFileName(), - modFile.getModInfos().get(0).getModId(), - modFile.getModInfos().get(0).getVersion(), + modFile.getModInfos().getFirst().getModId(), + modFile.getModInfos().getFirst().getVersion(), modFile.getModInfos().size())). collect(Collectors.joining("\n\u2022 ","\n\u2022 ", ""))), false); diff --git a/src/main/java/net/minecraftforge/versions/forge/ForgeVersion.java b/src/main/java/net/minecraftforge/versions/forge/ForgeVersion.java index bdc2ac0eaa..13cc0057ed 100644 --- a/src/main/java/net/minecraftforge/versions/forge/ForgeVersion.java +++ b/src/main/java/net/minecraftforge/versions/forge/ForgeVersion.java @@ -42,12 +42,12 @@ public class ForgeVersion { } public static VersionChecker.Status getStatus() { - return VersionChecker.getResult(ModList.get().getModFileById(MOD_ID).getMods().get(0)).status(); + return VersionChecker.getResult(ModList.get().getModFileById(MOD_ID).getMods().getFirst()).status(); } @Nullable public static String getTarget() { - VersionChecker.CheckResult res = VersionChecker.getResult(ModList.get().getModFileById(MOD_ID).getMods().get(0)); + VersionChecker.CheckResult res = VersionChecker.getResult(ModList.get().getModFileById(MOD_ID).getMods().getFirst()); return res.target() == null ? "" : res.target().toString(); }