Skip to content

Commit

Permalink
Require IModLanguageLoaders to specify their version (#135)
Browse files Browse the repository at this point in the history
  • Loading branch information
thedarkcolour authored May 10, 2024
1 parent e97e762 commit ab0a9e7
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.ModLoadingIssue;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.loading.BuiltInLanguageLoader;
import net.neoforged.fml.loading.FMLLoader;
import net.neoforged.neoforgespi.IIssueReporting;
import net.neoforged.neoforgespi.language.IModInfo;
import net.neoforged.neoforgespi.language.IModLanguageLoader;
import net.neoforged.neoforgespi.language.ModFileScanData;
import net.neoforged.neoforgespi.locating.IModFile;

public class FMLJavaModLanguageProvider implements IModLanguageLoader {
public class FMLJavaModLanguageProvider extends BuiltInLanguageLoader {
@Override
public String name() {
return "javafml";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright (c) NeoForged and contributors
* SPDX-License-Identifier: LGPL-2.1-only
*/

package net.neoforged.fml.loading;

import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import net.neoforged.neoforgespi.language.IModLanguageLoader;

public abstract class BuiltInLanguageLoader implements IModLanguageLoader {
@Override
public String version() {
final Path lpPath;
try {
lpPath = Paths.get(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
} catch (URISyntaxException e) {
throw new RuntimeException("Huh?", e);
}
return JarVersionLookupHandler.getVersion(this.getClass()).orElse(Files.isDirectory(lpPath) ? FMLLoader.versionInfo().fmlVersion() : null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,9 @@
package net.neoforged.fml.loading;

import com.mojang.logging.LogUtils;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;
Expand Down Expand Up @@ -47,21 +42,14 @@ private record ModLanguageWrapper(IModLanguageLoader modLanguageProvider, Artifa
languageProviders = ServiceLoaderUtil.loadServices(launchContext, IModLanguageLoader.class);
ImmediateWindowHandler.updateProgress("Loading language providers");
languageProviders.forEach(lp -> {
final Path lpPath;
try {
lpPath = Paths.get(lp.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
} catch (URISyntaxException e) {
throw new RuntimeException("Huh?", e);
}
Optional<String> version = JarVersionLookupHandler.getVersion(lp.getClass());
String impl = version.orElse(Files.isDirectory(lpPath) ? FMLLoader.versionInfo().fmlVersion().split("\\.")[0] : null);
if (impl == null) {
String version = lp.version();
if (version == null || version.isBlank()) {
LOGGER.error(LogMarkers.CORE, "Found unversioned language provider {}", lp.name());
throw new RuntimeException("Failed to find implementation version for language provider " + lp.name());
}
LOGGER.debug(LogMarkers.CORE, "Found language provider {}, version {}", lp.name(), impl);
ImmediateWindowHandler.updateProgress("Loaded language provider " + lp.name() + " " + impl);
languageProviderMap.put(lp.name(), new ModLanguageWrapper(lp, new DefaultArtifactVersion(impl)));
LOGGER.debug(LogMarkers.CORE, "Found language provider {}, version {}", lp.name(), version);
ImmediateWindowHandler.updateProgress("Loaded language provider " + lp.name() + " " + version);
languageProviderMap.put(lp.name(), new ModLanguageWrapper(lp, new DefaultArtifactVersion(version)));
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
package net.neoforged.fml.lowcodemod;

import net.neoforged.fml.ModContainer;
import net.neoforged.fml.loading.BuiltInLanguageLoader;
import net.neoforged.neoforgespi.language.IModInfo;
import net.neoforged.neoforgespi.language.IModLanguageLoader;
import net.neoforged.neoforgespi.language.ModFileScanData;

public class LowCodeModLanguageProvider implements IModLanguageLoader {
public class LowCodeModLanguageProvider extends BuiltInLanguageLoader {
@Override
public String name() {
return "lowcodefml";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
package net.neoforged.fml.mclanguageprovider;

import net.neoforged.fml.ModContainer;
import net.neoforged.fml.loading.BuiltInLanguageLoader;
import net.neoforged.neoforgespi.language.IModInfo;
import net.neoforged.neoforgespi.language.IModLanguageLoader;
import net.neoforged.neoforgespi.language.ModFileScanData;

public class MinecraftModLanguageProvider implements IModLanguageLoader {
public class MinecraftModLanguageProvider extends BuiltInLanguageLoader {
@Override
public String name() {
return "minecraft";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ public interface IModLanguageLoader {
*/
String name();

/**
* {@return the version of this loader}
*/
String version();

/**
* Load and build a container from the given mod information.
*
Expand Down

0 comments on commit ab0a9e7

Please sign in to comment.