diff --git a/common/src/main/java/me/shedaniel/architectury/platform/Platform.java b/common/src/main/java/me/shedaniel/architectury/platform/Platform.java index 8ccb2684..9bbc0c96 100644 --- a/common/src/main/java/me/shedaniel/architectury/platform/Platform.java +++ b/common/src/main/java/me/shedaniel/architectury/platform/Platform.java @@ -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 getOptionalMod(String id) { + try { + return Optional.of(IMPL.getMod(id)); + } catch (NullPointerException e) { + return Optional.empty(); + } + } + @NotNull public static Collection getMods() { return IMPL.getMods(); } + @NotNull + public static Collection 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 getMods(); + + Collection getModIds(); + + boolean isDevelopmentEnvironment(); } static { diff --git a/fabric/src/main/java/me/shedaniel/architectury/platform/fabric/PlatformImpl.java b/fabric/src/main/java/me/shedaniel/architectury/platform/fabric/PlatformImpl.java index daf612a3..e87da384 100644 --- a/fabric/src/main/java/me/shedaniel/architectury/platform/fabric/PlatformImpl.java +++ b/fabric/src/main/java/me/shedaniel/architectury/platform/fabric/PlatformImpl.java @@ -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 CONFIG_SCREENS = new HashMap<>(); @@ -71,6 +72,16 @@ public class PlatformImpl implements Platform.Impl { return this.mods.values(); } + @Override + public Collection 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; diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 239935b7..0cc0c150 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -7,7 +7,7 @@ "authors": [ "shedaniel" ], - "license": "MIT", + "license": "Apache-2.0", "environment": "*", "mixins": [ "architectury.mixins.json" diff --git a/forge/src/main/java/me/shedaniel/architectury/platform/forge/PlatformImpl.java b/forge/src/main/java/me/shedaniel/architectury/platform/forge/PlatformImpl.java index c0aee049..bb11e134 100644 --- a/forge/src/main/java/me/shedaniel/architectury/platform/forge/PlatformImpl.java +++ b/forge/src/main/java/me/shedaniel/architectury/platform/forge/PlatformImpl.java @@ -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 mods = new HashMap<>(); @@ -73,6 +76,16 @@ public class PlatformImpl implements Platform.Impl { return this.mods.values(); } + @Override + public Collection 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; diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml new file mode 100644 index 00000000..1e493545 --- /dev/null +++ b/forge/src/main/resources/META-INF/mods.toml @@ -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" \ No newline at end of file