diff --git a/src/main/java/net/doubledoordev/d3core/D3Core.java b/src/main/java/net/doubledoordev/d3core/D3Core.java index d082750..dfb07d4 100644 --- a/src/main/java/net/doubledoordev/d3core/D3Core.java +++ b/src/main/java/net/doubledoordev/d3core/D3Core.java @@ -39,12 +39,14 @@ import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent; import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.common.versioning.ArtifactVersion; import cpw.mods.fml.common.versioning.DefaultArtifactVersion; import net.doubledoordev.d3core.util.CoreHelper; import net.doubledoordev.d3core.util.DevPerks; import net.doubledoordev.d3core.util.ID3Mod; +import net.minecraft.util.IChatComponent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.ConfigElement; import net.minecraftforge.common.config.Configuration; @@ -57,7 +59,6 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; -import java.util.Properties; import java.util.TreeSet; import static net.doubledoordev.d3core.util.CoreConstants.*; @@ -80,6 +81,7 @@ public class D3Core implements ID3Mod private boolean debug = false; private boolean sillyness = true; + private boolean updateWarning = true; private List updateDateList = new ArrayList<>(); @@ -104,41 +106,34 @@ public void init(FMLInitializationEvent event) if (modContainer instanceof FMLModContainer && modContainer.getMod() instanceof ID3Mod) { if (debug()) logger.info(String.format("[%s] Found a D3 Mod!", modContainer.getModId())); - Properties properties = ((FMLModContainer) modContainer).searchForVersionProperties(); - if (properties != null && properties.containsKey(modContainer.getModId() + ".group") && properties.containsKey(modContainer.getModId() + ".artifactId")) - { - TreeSet availableVersions = new TreeSet<>(); - - String group = (String) properties.get(modContainer.getModId() + ".group"); - String artifactId = (String) properties.get(modContainer.getModId() + ".artifactId"); - if (debug()) logger.info(String.format("[%s] Group: %s ArtifactId: %s", modContainer.getModId(), group, artifactId)); - URL url = new URL(MAVENURL + group.replace('.', '/') + '/' + artifactId + "/maven-metadata.xml"); - if (debug()) logger.info(String.format("[%s] Maven URL: %s", modContainer.getModId(), url)); + TreeSet availableVersions = new TreeSet<>(); - DocumentBuilder builder = dbf.newDocumentBuilder(); - Document document = builder.parse(url.toURI().toString()); - NodeList list = document.getDocumentElement().getElementsByTagName("version"); - for (int i = 0; i < list.getLength(); i++) - { - String version = list.item(i).getFirstChild().getNodeValue(); - if (version.startsWith(Loader.MC_VERSION + "-")) - { - availableVersions.add(new DefaultArtifactVersion(version.replace(Loader.MC_VERSION + "-", ""))); - } - } - DefaultArtifactVersion current = new DefaultArtifactVersion(modContainer.getVersion().replace(Loader.MC_VERSION + "-", "")); + String group = GROUP + modContainer.getModId().toLowerCase(); + String artifactId = modContainer.getModId(); + if (debug()) logger.info(String.format("[%s] Group: %s ArtifactId: %s", modContainer.getModId(), group, artifactId)); - if (debug()) logger.info(String.format("[%s] Current: %s Latest: %s All versions for MC %s: %s", modContainer.getModId(), current, availableVersions.last(), Loader.MC_VERSION, availableVersions)); + URL url = new URL(MAVENURL + group.replace('.', '/') + '/' + artifactId + "/maven-metadata.xml"); + if (debug()) logger.info(String.format("[%s] Maven URL: %s", modContainer.getModId(), url)); - if (current.compareTo(availableVersions.last()) > 0) + DocumentBuilder builder = dbf.newDocumentBuilder(); + Document document = builder.parse(url.toURI().toString()); + NodeList list = document.getDocumentElement().getElementsByTagName("version"); + for (int i = 0; i < list.getLength(); i++) + { + String version = list.item(i).getFirstChild().getNodeValue(); + if (version.startsWith(Loader.MC_VERSION + "-")) { - updateDateList.add(new CoreHelper.ModUpdateDate(modContainer.getName(), modContainer.getModId(), current.toString(), availableVersions.last().toString())); + availableVersions.add(new DefaultArtifactVersion(version.replace(Loader.MC_VERSION + "-", ""))); } } - else + DefaultArtifactVersion current = new DefaultArtifactVersion(modContainer.getVersion().replace(Loader.MC_VERSION + "-", "")); + + if (debug()) logger.info(String.format("[%s] Current: %s Latest: %s All versions for MC %s: %s", modContainer.getModId(), current, availableVersions.last(), Loader.MC_VERSION, availableVersions)); + + if (current.compareTo(availableVersions.last()) < 0) { - logger.info("D3 Mod " + modContainer.getModId() + " doesn't have the appropriate properties for version checks."); + updateDateList.add(new CoreHelper.ModUpdateDate(modContainer.getName(), modContainer.getModId(), current.toString(), availableVersions.last().toString())); } } } @@ -151,7 +146,7 @@ public void init(FMLInitializationEvent event) } @Mod.EventHandler - public void init(FMLPostInitializationEvent event) + public void postInit(FMLPostInitializationEvent event) { for (CoreHelper.ModUpdateDate updateDate : updateDateList) { @@ -159,6 +154,19 @@ public void init(FMLPostInitializationEvent event) } } + @SubscribeEvent + public void nameFormatEvent(PlayerEvent.PlayerLoggedInEvent event) + { + if (!updateWarning) return; + + event.player.addChatComponentMessage(IChatComponent.Serializer.func_150699_a("{\"text\":\"\",\"extra\":[{\"text\":\"Updates available for these mods:\",\"color\":\"gold\"}]}")); + for (CoreHelper.ModUpdateDate updateDate : updateDateList) + { + event.player.addChatComponentMessage(IChatComponent.Serializer.func_150699_a(String.format("{\"text\":\"\",\"extra\":[{\"text\":\"%s: %s -> %s\"}]}", updateDate.getName(), updateDate.getCurrentVersion(), updateDate.getLatestVersion()))); + } + event.player.addChatComponentMessage(IChatComponent.Serializer.func_150699_a("{\"text\":\"\",\"extra\":[{\"text\":\"Download here!\",\"color\":\"gold\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http://doubledoordev.net\"}},{\"text\":\" <- That is a link btw :p\"}]}")); + } + @SubscribeEvent public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent eventArgs) { @@ -178,6 +186,7 @@ public void syncConfig() debug = configuration.getBoolean("debug", MODID, debug, "Enable debug mode", "d3.core.config.debug"); sillyness = configuration.getBoolean("sillyness", MODID, sillyness, "Enable sillyness", "d3.core.config.sillyness"); + updateWarning = configuration.getBoolean("updateWarning", MODID, updateWarning, "Allow update warnings on login", "d3.core.config.updateWarning"); if (sillyness) MinecraftForge.EVENT_BUS.register(getDevPerks()); else MinecraftForge.EVENT_BUS.unregister(getDevPerks()); diff --git a/src/main/java/net/doubledoordev/d3core/util/CoreConstants.java b/src/main/java/net/doubledoordev/d3core/util/CoreConstants.java index 3354381..284ab05 100644 --- a/src/main/java/net/doubledoordev/d3core/util/CoreConstants.java +++ b/src/main/java/net/doubledoordev/d3core/util/CoreConstants.java @@ -42,6 +42,7 @@ public class CoreConstants public static final String BASEURL = "http://doubledoordev.net/"; public static final String PERKSURL = BASEURL + "perks.json"; public static final String MAVENURL = BASEURL + "maven/"; + public static final String GROUP = "net.doubledoordev."; /** * @see net.doubledoordev.d3core.client.ModConfigGuiFactory */ diff --git a/src/main/resources/assets/D3Core/lang/en_US.lang b/src/main/resources/assets/D3Core/lang/en_US.lang index a49b686..e518d97 100644 --- a/src/main/resources/assets/D3Core/lang/en_US.lang +++ b/src/main/resources/assets/D3Core/lang/en_US.lang @@ -8,3 +8,6 @@ d3.core.config.debug.tooltip=Please enable before making a bug report. d3.core.config.sillyness=Enable sillyness d3.core.config.sillyness.tooltip=Please don't disable, unless you want to piss off the D³ crew :p + +d3.core.config.updateWarning=Update warnings +d3.core.config.updateWarning.tooltip=Please don't disable, unless you are on a modpack. diff --git a/src/main/resources/version.properties b/src/main/resources/version.properties deleted file mode 100644 index 6c41b0e..0000000 --- a/src/main/resources/version.properties +++ /dev/null @@ -1,3 +0,0 @@ -D3Core.version=1.1.0 -D3Core.group=net.doubledoordev.d3core -D3Core.artifactId=D3Core