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": [] -} -]