Skip to content

Commit

Permalink
Address requested changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
marchermans committed Jan 18, 2025
1 parent ef99b13 commit ef75175
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 15 deletions.
20 changes: 13 additions & 7 deletions loader/src/main/java/net/neoforged/fml/loading/LoadingModList.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package net.neoforged.fml.loading;

import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.LambdaExceptionUtils;
import java.net.URL;
import java.nio.file.Files;
Expand All @@ -24,16 +25,19 @@
import net.neoforged.fml.loading.mixin.DeferredMixinConfigRegistration;
import net.neoforged.fml.loading.moddiscovery.ModFile;
import net.neoforged.fml.loading.moddiscovery.ModFileInfo;
import net.neoforged.fml.loading.moddiscovery.ModFileParser;
import net.neoforged.fml.loading.moddiscovery.ModInfo;
import net.neoforged.fml.loading.modscan.BackgroundScanHandler;
import net.neoforged.neoforgespi.language.IModFileInfo;
import net.neoforged.neoforgespi.language.IModInfo;
import org.slf4j.Logger;

/**
* Master list of all mods <em>in the loading context. This class cannot refer outside the
* loading package</em>
*/
public class LoadingModList {
private static final Logger LOGGER = LogUtils.getLogger();
private static LoadingModList INSTANCE;
private final List<IModFileInfo> plugins;
private final List<ModFileInfo> modFiles;
Expand Down Expand Up @@ -77,13 +81,15 @@ public void addMixinConfigs() {
.map(ModFileInfo::getFile)
.forEach(file -> {
final String modId = file.getModInfos().get(0).getModId();
file.getMixinConfigs()
.stream()
.filter(potential -> potential.requiredModIds().isEmpty() ||
potential.requiredModIds().stream().allMatch(
id -> this.getModFileById(id) != null
))
.forEach(cfg -> DeferredMixinConfigRegistration.addMixinConfig(cfg.name(), modId));
for (ModFileParser.MixinConfig potential : file.getMixinConfigs()) {
if (potential.requiredMods().stream().allMatch(
id -> this.getModFileById(id) != null
)) {
DeferredMixinConfigRegistration.addMixinConfig(potential.config(), modId);
} else {
LOGGER.debug("Mixin config {} for mod {} not applied as required mods are missing", potential.config(), modId);
}
}
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public class ModFile implements IModFile {
private ModFileScanData fileModFileScanData;
private volatile CompletableFuture<ModFileScanData> futureScanResult;
private List<CoreModFile> coreMods;
private List<ModFileParser.PotentialMixinConfig> mixinConfigs;
private List<ModFileParser.MixinConfig> mixinConfigs;
private List<Path> accessTransformers;

public static final Attributes.Name TYPE = new Attributes.Name("FMLModType");
Expand Down Expand Up @@ -135,7 +135,7 @@ public List<CoreModFile> getCoreMods() {
return coreMods;
}

public List<ModFileParser.PotentialMixinConfig> getMixinConfigs() {
public List<ModFileParser.MixinConfig> getMixinConfigs() {
return mixinConfigs;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,22 +90,22 @@ protected static List<CoreModFile> getCoreMods(final ModFile modFile) {
/**
* Represents a potential mixin configuration.
*
* @param name The name of the mixin configuration.
* @param requiredModIds The mod ids that are required for this mixin configuration to be loaded. If empty, will be loaded regardless.
* @param config The name of the mixin configuration.
* @param requiredMods The mod ids that are required for this mixin configuration to be loaded. If empty, will be loaded regardless.
*/
public record PotentialMixinConfig(String name, List<String> requiredModIds) {}
public record MixinConfig(String config, List<String> requiredMods) {}

protected static List<PotentialMixinConfig> getMixinConfigs(IModFileInfo modFileInfo) {
protected static List<MixinConfig> getMixinConfigs(IModFileInfo modFileInfo) {
try {
var config = modFileInfo.getConfig();
var mixinsEntries = config.getConfigList("mixins");

var potentialMixins = new ArrayList<PotentialMixinConfig>();
var potentialMixins = new ArrayList<MixinConfig>();
for (IConfigurable mixinsEntry : mixinsEntries) {
var name = mixinsEntry.<String>getConfigElement("config")
.orElseThrow(() -> new InvalidModFileException("Missing \"config\" in [[mixins]] entry", modFileInfo));
var requiredModIds = mixinsEntry.<List<String>>getConfigElement("requiredMods").orElse(List.of());
potentialMixins.add(new PotentialMixinConfig(name, requiredModIds));
potentialMixins.add(new MixinConfig(name, requiredModIds));
}

return potentialMixins;
Expand Down

0 comments on commit ef75175

Please sign in to comment.