Proper mods metadata

This commit is contained in:
shedaniel
2020-11-08 00:35:50 +08:00
parent c14c78f6ee
commit cd595fc55a
5 changed files with 68 additions and 1 deletions

View File

@@ -20,10 +20,12 @@ import me.shedaniel.architectury.Architectury;
import me.shedaniel.architectury.ArchitecturyPopulator;
import me.shedaniel.architectury.Populatable;
import net.fabricmc.api.EnvType;
import net.minecraft.SharedConstants;
import org.jetbrains.annotations.NotNull;
import java.nio.file.Path;
import java.util.Collection;
import java.util.Optional;
public final class Platform {
private Platform() {}
@@ -39,6 +41,11 @@ public final class Platform {
return Architectury.getModLoader();
}
@NotNull
public static String getMinecraftVersion() {
return SharedConstants.getCurrentVersion().getId();
}
@NotNull
public static Path getGameFolder() {
return IMPL.getGameFolder();
@@ -63,11 +70,29 @@ public final class Platform {
return IMPL.getMod(id);
}
@NotNull
public static Optional<Mod> getOptionalMod(String id) {
try {
return Optional.of(IMPL.getMod(id));
} catch (NullPointerException e) {
return Optional.empty();
}
}
@NotNull
public static Collection<Mod> getMods() {
return IMPL.getMods();
}
@NotNull
public static Collection<String> getModIds() {
return IMPL.getModIds();
}
public static boolean isDevelopmentEnvironment() {
return IMPL.isDevelopmentEnvironment();
}
public interface Impl {
Path getGameFolder();
@@ -82,6 +107,10 @@ public final class Platform {
Mod getMod(String id);
Collection<Mod> getMods();
Collection<String> getModIds();
boolean isDevelopmentEnvironment();
}
static {

View File

@@ -28,6 +28,7 @@ import java.nio.file.Path;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class PlatformImpl implements Platform.Impl {
public static final Map<String, Mod.ConfigurationScreenProvider> CONFIG_SCREENS = new HashMap<>();
@@ -71,6 +72,16 @@ public class PlatformImpl implements Platform.Impl {
return this.mods.values();
}
@Override
public Collection<String> getModIds() {
return FabricLoader.getInstance().getAllMods().stream().map(ModContainer::getMetadata).map(ModMetadata::getId).collect(Collectors.toList());
}
@Override
public boolean isDevelopmentEnvironment() {
return FabricLoader.getInstance().isDevelopmentEnvironment();
}
private static class ModImpl implements Mod {
private final ModMetadata metadata;

View File

@@ -7,7 +7,7 @@
"authors": [
"shedaniel"
],
"license": "MIT",
"license": "Apache-2.0",
"environment": "*",
"mixins": [
"architectury.mixins.json"

View File

@@ -23,7 +23,9 @@ import net.minecraftforge.fml.ExtensionPoint;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.loading.FMLEnvironment;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.fml.loading.moddiscovery.ModInfo;
import net.minecraftforge.forgespi.language.IModInfo;
import javax.annotation.Nonnull;
@@ -31,6 +33,7 @@ import java.nio.file.Path;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class PlatformImpl implements Platform.Impl {
private final Map<String, Mod> mods = new HashMap<>();
@@ -73,6 +76,16 @@ public class PlatformImpl implements Platform.Impl {
return this.mods.values();
}
@Override
public Collection<String> getModIds() {
return ModList.get().getMods().stream().map(ModInfo::getModId).collect(Collectors.toList());
}
@Override
public boolean isDevelopmentEnvironment() {
return !FMLLoader.isProduction();
}
private static class ModImpl implements Mod {
private final ModContainer container;
private final IModInfo metadata;

View File

@@ -0,0 +1,14 @@
modLoader = "javafml"
loaderVersion = "[32,)"
issueTrackerURL = "https://github.com/shedaniel/architectury/issues"
license = "Apache-2.0"
[[mods]]
modId = "architectury"
version = "${version}"
displayName = "Architectury"
authors = "shedaniel"
description = '''
A intermediary api aimed to ease developing multiplatform mods.
'''
license = "Apache-2.0"