diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java
index ed924e906..aceb15296 100644
--- a/src/main/java/cam72cam/mod/ModCore.java
+++ b/src/main/java/cam72cam/mod/ModCore.java
@@ -20,7 +20,6 @@
import net.minecraft.client.resources.FolderResourcePack;
import net.minecraft.client.resources.IResourcePack;
import net.minecraft.client.resources.SimpleReloadableResourceManager;
-import net.minecraft.world.World;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.SidedProxy;
@@ -28,6 +27,7 @@
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartedEvent;
+import net.minecraftforge.fml.relauncher.CoreModManager;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.commons.io.FileUtils;
@@ -39,6 +39,7 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.reflect.Field;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -371,4 +372,28 @@ public static synchronized File cacheFile(Identifier id) {
usedCacheFiles.add(f);
return f;
}
+
+ /* Loader Utils */
+ public static String loaderBrand() {
+ return "forge";
+ }
+
+ public static int mcVersion() {
+ return 11202;
+ }
+
+ private static Boolean isDev = null;
+
+ public static boolean isDevelopmentEnvironment() {
+ if (isDev == null) {
+ try {
+ Field field = CoreModManager.class.getDeclaredField("deobfuscatedEnvironment");
+ field.setAccessible(true);
+ isDev = field.getBoolean(null);
+ } catch (NoSuchFieldException | IllegalAccessException ignore) {
+ isDev = false;
+ }
+ }
+ return isDev;
+ }
}
diff --git a/src/main/java/cam72cam/mod/UMCMixinPlugin.java b/src/main/java/cam72cam/mod/UMCMixinPlugin.java
index e5efbd11b..530e914ad 100644
--- a/src/main/java/cam72cam/mod/UMCMixinPlugin.java
+++ b/src/main/java/cam72cam/mod/UMCMixinPlugin.java
@@ -1,8 +1,11 @@
package cam72cam.mod;
+import cam72cam.mod.loading.UMCMod;
import net.minecraftforge.fml.common.FMLLog;
+import net.minecraftforge.fml.common.ModContainerFactory;
import net.minecraftforge.fml.relauncher.CoreModManager;
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
+import org.objectweb.asm.Type;
import org.spongepowered.asm.launch.MixinBootstrap;
import org.spongepowered.asm.mixin.Mixins;
@@ -28,12 +31,17 @@ public UMCMixinPlugin() {
if (file.isFile() && !CoreModManager.getReparseableCoremods().contains(file.getName())) {
//Due to FML's bad behaviour on processing FMLCorePluginContainsFMLMod we add here manually
CoreModManager.getIgnoredMods().remove(file.getName());
- CoreModManager.getReparseableCoremods().add(file.getName());
+ if (!ModCore.isDevelopmentEnvironment()) {
+ CoreModManager.getReparseableCoremods().add(file.getName());
+ }
}
} catch (URISyntaxException e) {
FMLLog.log.warn(e);
}
}
+
+ //Add our marker
+ ModContainerFactory.instance().registerContainerType(Type.getType(UMCMod.class), UMCModContainer.class);
}
@Override
diff --git a/src/main/java/cam72cam/mod/UMCModContainer.java b/src/main/java/cam72cam/mod/UMCModContainer.java
new file mode 100644
index 000000000..ba4e0038d
--- /dev/null
+++ b/src/main/java/cam72cam/mod/UMCModContainer.java
@@ -0,0 +1,43 @@
+package cam72cam.mod;
+
+import net.minecraftforge.fml.common.FMLModContainer;
+import net.minecraftforge.fml.common.MetadataCollection;
+import net.minecraftforge.fml.common.ModMetadata;
+import net.minecraftforge.fml.common.discovery.ModCandidate;
+import net.minecraftforge.fml.common.event.FMLConstructionEvent;
+
+import java.util.Map;
+
+/**
+ * Wrapper to register UMC mods in ModCore
+ */
+public class UMCModContainer extends FMLModContainer {
+ ModCandidate candidate;
+ Map modDescriptor;
+
+ public UMCModContainer(String className, ModCandidate candidate, Map modDescriptor) {
+ super(className, candidate, modDescriptor);
+ this.candidate = candidate;
+ this.modDescriptor = modDescriptor;
+ }
+
+ @Override
+ public void constructMod(FMLConstructionEvent event) {
+ super.constructMod(event);
+ ModCore.register((ModCore.Mod) getMod());
+ }
+
+ @Override
+ public void bindMetadata(MetadataCollection mc) {
+ super.bindMetadata(mc);
+ //Then we'll override some of those
+ //TODO
+// InputStream umcJson = new ZipInputStream(candidate.getModContainer())
+ ModMetadata modMetadata = this.getMetadata();
+
+ modMetadata.modId = (String) modDescriptor.get("modid");
+ modMetadata.name = (String) modDescriptor.get("name");
+ modMetadata.version = (String) modDescriptor.get("version");
+ modMetadata.autogenerated = false;
+ }
+}
diff --git a/src/main/java/cam72cam/mod/loading/UMCMod.java b/src/main/java/cam72cam/mod/loading/UMCMod.java
new file mode 100644
index 000000000..39a32e4a3
--- /dev/null
+++ b/src/main/java/cam72cam/mod/loading/UMCMod.java
@@ -0,0 +1,16 @@
+package cam72cam.mod.loading;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+//TODO Move into umc.json
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UMCMod {
+ String modid();
+
+ String name();
+
+ String version();
+
+ String dependencies();
+}
diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle
index 4e3e99c05..b1eb71af2 100644
--- a/src/main/resources/template/build.gradle
+++ b/src/main/resources/template/build.gradle
@@ -33,15 +33,3 @@ dependencies {
//JAR//
jar.finalizedBy('reobfJar')
-
-processResources {
- inputs.property "version", project.version
- inputs.property "mcversion", project.minecraft.version
- from(sourceSets.main.resources.srcDirs) {
- include 'mcmod.info'
- expand 'version':project.version, 'mcversion':project.minecraft.version
- }
- from(sourceSets.main.resources.srcDirs) {
- exclude 'mcmod.info'
- }
-}
diff --git a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java
deleted file mode 100644
index 5baa16705..000000000
--- a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package #PACKAGE#;
-
-import cam72cam.mod.ModCore;
-
-@net.minecraftforge.fml.common.Mod(modid = Mod.MODID, name = "#NAME#", version = "#VERSION#", dependencies = "#FORGE_STRING_DEPENDENCIES#", acceptedMinecraftVersions = "[1.12,1.13)")
-public class Mod {
- public static final String MODID = "#ID#";
-
- static {
- try {
- ModCore.register(new #PACKAGE#.#CLASS#());
- } catch (Exception e) {
- throw new RuntimeException("Could not load mod " + MODID, e);
- }
- }
-}
diff --git a/src/main/resources/template/src/main/resources/mcmod.info b/src/main/resources/template/src/main/resources/mcmod.info
deleted file mode 100644
index 671936981..000000000
--- a/src/main/resources/template/src/main/resources/mcmod.info
+++ /dev/null
@@ -1,16 +0,0 @@
-[
-{
- "modid": "#ID#",
- "name": "#NAME#",
- "description": "",
- "version": "#VERSION#",
- "mcversion": "1.12.2",
- "url": "",
- "updateUrl": "",
- "authorList": [],
- "credits": "",
- "logoFile": "",
- "screenshots": [],
- "dependencies": []
-}
-]