From 33947b2d13f37266d583cf53674bbc45b9da7ef8 Mon Sep 17 00:00:00 2001 From: Wyvest <45589059+Wyvest@users.noreply.github.com> Date: Thu, 26 Aug 2021 20:43:52 +0900 Subject: [PATCH] 2.0.0 initial release --- build.gradle | 50 ++++++++---------- settings.gradle | 5 +- .../tweaker/BehindYouLoadingPlugin.java} | 19 ++----- .../tweaker/RequisiteEssentialTweaker.java | 17 ------ .../BehindYou.kt} | 28 +++++----- .../kotlin/net/wyvest/behindyou/Listener.kt | 20 +++++++ .../behindyou/commands/BehindYouCommand.kt | 26 +++++++++ .../config/BehindYouConfig.kt} | 27 ++++++---- .../gui/DownloadConfirmGui.kt | 20 +++---- .../{template => behindyou}/utils/APIUtil.kt | 8 +-- .../utils/StringUtils.kt | 2 +- .../{template => behindyou}/utils/Updater.kt | 35 ++++++------ .../template/commands/TemplateCommand.kt | 26 --------- src/main/resources/assets/template/wyvest.png | Bin 49980 -> 0 bytes src/main/resources/mcmod.info | 8 +-- 15 files changed, 144 insertions(+), 147 deletions(-) rename src/main/java/net/wyvest/{template/tweaker/TemplateLoadingPlugin.java => behindyou/tweaker/BehindYouLoadingPlugin.java} (86%) delete mode 100644 src/main/java/net/wyvest/template/tweaker/RequisiteEssentialTweaker.java rename src/main/kotlin/net/wyvest/{template/ForgeTemplate.kt => behindyou/BehindYou.kt} (53%) create mode 100644 src/main/kotlin/net/wyvest/behindyou/Listener.kt create mode 100644 src/main/kotlin/net/wyvest/behindyou/commands/BehindYouCommand.kt rename src/main/kotlin/net/wyvest/{template/config/TemplateConfig.kt => behindyou/config/BehindYouConfig.kt} (60%) rename src/main/kotlin/net/wyvest/{template => behindyou}/gui/DownloadConfirmGui.kt (81%) rename src/main/kotlin/net/wyvest/{template => behindyou}/utils/APIUtil.kt (88%) rename src/main/kotlin/net/wyvest/{template => behindyou}/utils/StringUtils.kt (96%) rename src/main/kotlin/net/wyvest/{template => behindyou}/utils/Updater.kt (78%) delete mode 100644 src/main/kotlin/net/wyvest/template/commands/TemplateCommand.kt delete mode 100644 src/main/resources/assets/template/wyvest.png diff --git a/build.gradle b/build.gradle index 4198d5c..d45b253 100644 --- a/build.gradle +++ b/build.gradle @@ -5,9 +5,9 @@ plugins { id "org.jetbrains.kotlin.jvm" version "1.5.21" } -version = "1.0.0" +version = "2.0.0" group = "net.wyvest" -archivesBaseName = "ForgeTemplate" +archivesBaseName = "BehindYouv2" sourceCompatibility = targetCompatibility = 1.8 compileJava.options.encoding = "UTF-8" @@ -17,8 +17,8 @@ minecraft { runDir = "run" mappings = "stable_22" makeObfSourceJar = false - clientJvmArgs += '-Dfml.coreMods.load=net.wyvest.template.tweaker.TemplateLoadingPlugin' - clientRunArgs += '--tweakClass net.wyvest.template.tweaker.RequisiteEssentialTweaker' + clientJvmArgs += '-Dfml.coreMods.load=net.wyvest.behindyou.tweaker.BehindYouLoadingPlugin' + clientRunArgs += '--tweakClass net.wyvest.requisiteessentialloader.RequisiteEssentialTweaker' } configurations { @@ -32,31 +32,24 @@ repositories { maven { url 'https://repo.sk1er.club/repository/maven-releases/' } maven { url 'https://jitpack.io/' } maven { url 'https://repo.spongepowered.org/repository/maven-public/' } - maven { - url 'http://maven.matthewtgm.xyz/repository/maven-public/' - allowInsecureProtocol = true - } } dependencies { // Libraries provided 'xyz.matthewtgm:Requisite:1.1.1' - include('xyz.matthewtgm:RequisiteLaunchwrapper:1.1') { - transitive = false - } - include('gg.essential:loader-launchwrapper:1.1.0') { - transitive = false - } + include 'com.github.W-OVERFLOW:RequisiteEssentialLoader:7a4eb4eeb7' + implementation ('xyz.matthewtgm:RequisiteLaunchwrapper:1.1') + implementation ('gg.essential:loader-launchwrapper:1.1.0') provided 'gg.essential:essential-1.8.9-forge:1300' } jar { manifest.attributes( 'ModSide': 'CLIENT', - 'FMLCorePlugin': 'net.wyvest.template.tweaker.TemplateLoadingPlugin', + 'FMLCorePlugin': 'net.wyvest.behindyou.tweaker.BehindYouLoadingPlugin', 'FMLCorePluginContainsFMLMod': true, 'ForceLoadAsMod': true, - 'TweakClass': 'net.wyvest.template.tweaker.RequisiteEssentialTweaker', + 'TweakClass': 'net.wyvest.requisiteessentialloader.RequisiteEssentialTweaker', 'TweakOrder': '0' ) @@ -85,19 +78,6 @@ processResources { } } -/** - * This task simply moves resources so they can be accessed at runtime, Forge is quite weird isn"t it - */ -task moveResources { - doLast { - ant.move file: "${buildDir}/resources/main", - todir: "${buildDir}/classes/java" - } -} - -moveResources.dependsOn processResources -classes.dependsOn moveResources - // This forces the build task to run shadowJar after tasks.reobfJar.dependsOn(tasks.shadowJar) @@ -139,3 +119,15 @@ compileTestKotlin { jvmTarget = "1.8" } } + +reobf { + shadowJar { + classpath = sourceSets.main.compileClasspath + } +} + +sourceSets { + main { + output.resourcesDir = file("${buildDir}/classes/kotlin/main") + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 67f5b2e..5356b63 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,11 +18,10 @@ pluginManagement { resolutionStrategy { eachPlugin { // If the "net.minecraftforge.gradle.forge" plugin is requested we redirect it to asbyth's ForgeGradle fork - if (requested.id.id == "net.minecraftforge.gradle.forge") { + if (requested.id.id == "net.minecraftforge.gradle.forge") useModule("com.github.asbyth:ForgeGradle:${requested.version}") - } } } } -rootProject.name = "KotlinForgeTemplate" \ No newline at end of file +rootProject.name = "BehindYouv2" \ No newline at end of file diff --git a/src/main/java/net/wyvest/template/tweaker/TemplateLoadingPlugin.java b/src/main/java/net/wyvest/behindyou/tweaker/BehindYouLoadingPlugin.java similarity index 86% rename from src/main/java/net/wyvest/template/tweaker/TemplateLoadingPlugin.java rename to src/main/java/net/wyvest/behindyou/tweaker/BehindYouLoadingPlugin.java index 1d0d65d..4ec9a00 100644 --- a/src/main/java/net/wyvest/template/tweaker/TemplateLoadingPlugin.java +++ b/src/main/java/net/wyvest/behindyou/tweaker/BehindYouLoadingPlugin.java @@ -1,4 +1,4 @@ -package net.wyvest.template.tweaker; +package net.wyvest.behindyou.tweaker; import kotlin.KotlinVersion; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; @@ -10,16 +10,15 @@ import java.io.File; import java.lang.reflect.Method; import java.net.URI; -import java.net.URL; import java.util.Map; /** * Adapted from Skytils under AGPLv3 * https://github.com/Skytils/SkytilsMod/blob/1.x/LICENSE.md */ -public class TemplateLoadingPlugin implements IFMLLoadingPlugin { +public class BehindYouLoadingPlugin implements IFMLLoadingPlugin { - public TemplateLoadingPlugin() { + public BehindYouLoadingPlugin() { if (!KotlinVersion.CURRENT.isAtLeast(1, 5, 0)) { showMessage(new File(new File(KotlinVersion.class.getProtectionDomain().getCodeSource().getLocation().toString()).getParentFile().getParentFile().getName())); } @@ -76,16 +75,6 @@ public void mouseClicked(MouseEvent event) { } }); - Icon icon = null; - try { - URL url = TemplateLoadingPlugin.class.getResource("/assets/template/wyvest.png"); - if (url != null) { - icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(url).getScaledInstance(50, 50, Image.SCALE_DEFAULT)); - } - } catch (Exception e) { - e.printStackTrace(); - } - JButton close = new JButton("Close"); close.addMouseListener(new MouseAdapter() { @Override @@ -101,7 +90,7 @@ public void mouseClicked(MouseEvent e) { "Template Error", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, - icon, + null, options, options[0] ); diff --git a/src/main/java/net/wyvest/template/tweaker/RequisiteEssentialTweaker.java b/src/main/java/net/wyvest/template/tweaker/RequisiteEssentialTweaker.java deleted file mode 100644 index 23ded82..0000000 --- a/src/main/java/net/wyvest/template/tweaker/RequisiteEssentialTweaker.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.wyvest.template.tweaker; - -import gg.essential.loader.stage0.EssentialSetupTweaker; -import net.minecraft.launchwrapper.LaunchClassLoader; -import xyz.matthewtgm.requisite.launchwrapper.RequisiteLaunchwrapper; - -public class RequisiteEssentialTweaker extends EssentialSetupTweaker { - - @Override - public void injectIntoClassLoader(LaunchClassLoader classLoader) { - super.injectIntoClassLoader(classLoader); - System.out.println("Essential has been loaded."); - RequisiteLaunchwrapper.inject(classLoader); - System.out.println("Requisite has been loaded."); - } - -} \ No newline at end of file diff --git a/src/main/kotlin/net/wyvest/template/ForgeTemplate.kt b/src/main/kotlin/net/wyvest/behindyou/BehindYou.kt similarity index 53% rename from src/main/kotlin/net/wyvest/template/ForgeTemplate.kt rename to src/main/kotlin/net/wyvest/behindyou/BehindYou.kt index 07bd9c4..b94f9b5 100644 --- a/src/main/kotlin/net/wyvest/template/ForgeTemplate.kt +++ b/src/main/kotlin/net/wyvest/behindyou/BehindYou.kt @@ -1,28 +1,29 @@ -package net.wyvest.template +package net.wyvest.behindyou import net.minecraft.client.Minecraft import net.minecraft.util.EnumChatFormatting import net.minecraftforge.fml.common.Mod import net.minecraftforge.fml.common.event.FMLInitializationEvent import net.minecraftforge.fml.common.event.FMLPreInitializationEvent -import net.wyvest.template.commands.TemplateCommand -import net.wyvest.template.config.TemplateConfig -import net.wyvest.template.utils.Updater +import net.wyvest.behindyou.commands.BehindYouCommand +import net.wyvest.behindyou.config.BehindYouConfig +import net.wyvest.behindyou.utils.Updater import xyz.matthewtgm.requisite.util.ChatHelper +import xyz.matthewtgm.requisite.util.ForgeHelper import java.io.File -@Mod(name = ForgeTemplate.NAME, modid = ForgeTemplate.ID, version = ForgeTemplate.VERSION, modLanguageAdapter = "gg.essential.api.utils.KotlinAdapter") -object ForgeTemplate { - const val NAME = "ForgeTemplate" - const val VERSION = "1.0.0" - const val ID = "forgetemplate" +@Mod(name = BehindYou.NAME, modid = BehindYou.ID, version = BehindYou.VERSION, modLanguageAdapter = "gg.essential.api.utils.KotlinAdapter") +object BehindYou { + const val NAME = "BehindYouv2" + const val VERSION = "2.0.0" + const val ID = "behindyouv2" val mc: Minecraft get() = Minecraft.getMinecraft() - fun sendMessage(message: String?) { + fun sendMessage(message: String) { ChatHelper.sendMessage(EnumChatFormatting.DARK_PURPLE.toString() + "[$NAME] ", message) } lateinit var jarFile: File - private val modDir = File(File(File(mc.mcDataDir, "config"), "Wyvest"), NAME) + val modDir = File(File(File(mc.mcDataDir, "config"), "Wyvest"), NAME) @Mod.EventHandler private fun onFMLPreInitialization(event: FMLPreInitializationEvent) { @@ -32,8 +33,9 @@ object ForgeTemplate { @Mod.EventHandler fun onFMLInitialization(event: FMLInitializationEvent) { - TemplateConfig.initialize() - TemplateCommand.register() + BehindYouConfig.initialize() + BehindYouCommand.register() Updater.update() + ForgeHelper.registerEventListener(Listener) } } \ No newline at end of file diff --git a/src/main/kotlin/net/wyvest/behindyou/Listener.kt b/src/main/kotlin/net/wyvest/behindyou/Listener.kt new file mode 100644 index 0000000..cdee9ad --- /dev/null +++ b/src/main/kotlin/net/wyvest/behindyou/Listener.kt @@ -0,0 +1,20 @@ +package net.wyvest.behindyou + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent +import net.wyvest.behindyou.config.BehindYouConfig + +object Listener { + + @SubscribeEvent + fun listen(e : TickEvent.ClientTickEvent) { + if (e.phase == TickEvent.Phase.END) { + if (BehindYouConfig.toggled) { + if (BehindYou.mc.gameSettings.thirdPersonView == 1) { + ++BehindYou.mc.gameSettings.thirdPersonView + } + } + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/net/wyvest/behindyou/commands/BehindYouCommand.kt b/src/main/kotlin/net/wyvest/behindyou/commands/BehindYouCommand.kt new file mode 100644 index 0000000..8043c1d --- /dev/null +++ b/src/main/kotlin/net/wyvest/behindyou/commands/BehindYouCommand.kt @@ -0,0 +1,26 @@ +package net.wyvest.behindyou.commands + +import gg.essential.api.EssentialAPI +import gg.essential.api.commands.Command +import gg.essential.api.commands.DefaultHandler +import gg.essential.api.commands.SubCommand +import net.wyvest.behindyou.BehindYou +import net.wyvest.behindyou.config.BehindYouConfig + +@Suppress("unused") +object BehindYouCommand : Command(BehindYou.ID, true) { + + override val commandAliases = setOf( + Alias("behind") + ) + + @DefaultHandler + fun handle() { + EssentialAPI.getGuiUtil().openScreen(BehindYouConfig.gui()) + } + + @SubCommand("config", description = "Opens the config GUI for " + BehindYou.NAME) + fun config() { + EssentialAPI.getGuiUtil().openScreen(BehindYouConfig.gui()) + } +} \ No newline at end of file diff --git a/src/main/kotlin/net/wyvest/template/config/TemplateConfig.kt b/src/main/kotlin/net/wyvest/behindyou/config/BehindYouConfig.kt similarity index 60% rename from src/main/kotlin/net/wyvest/template/config/TemplateConfig.kt rename to src/main/kotlin/net/wyvest/behindyou/config/BehindYouConfig.kt index 60b447e..4d5e5b4 100644 --- a/src/main/kotlin/net/wyvest/template/config/TemplateConfig.kt +++ b/src/main/kotlin/net/wyvest/behindyou/config/BehindYouConfig.kt @@ -1,22 +1,31 @@ -package net.wyvest.template.config +package net.wyvest.behindyou.config import gg.essential.api.EssentialAPI import gg.essential.vigilance.Vigilant import gg.essential.vigilance.data.Property import gg.essential.vigilance.data.PropertyType -import net.wyvest.template.ForgeTemplate -import net.wyvest.template.ForgeTemplate.NAME -import net.wyvest.template.ForgeTemplate.mc -import net.wyvest.template.gui.DownloadConfirmGui -import net.wyvest.template.utils.Updater +import net.wyvest.behindyou.BehindYou +import net.wyvest.behindyou.BehindYou.NAME +import net.wyvest.behindyou.BehindYou.mc +import net.wyvest.behindyou.gui.DownloadConfirmGui +import net.wyvest.behindyou.utils.Updater import java.io.File -object TemplateConfig : Vigilant(File("config/Wyvest/$NAME/${ForgeTemplate.ID}.toml"), NAME) { +object BehindYouConfig : Vigilant(File(BehindYou.modDir, "${BehindYou.ID}.toml"), NAME) { + + @Property( + type = PropertyType.SWITCH, + name = "Toggle Mod", + description = "Toggle the mod.", + category = "General" + ) + var toggled = true + @Property( type = PropertyType.SWITCH, name = "Show Update Notification", description = "Show a notification when you start Minecraft informing you of new updates.", - category = "Updater" + category = "General" ) var showUpdateNotification = true @@ -24,7 +33,7 @@ object TemplateConfig : Vigilant(File("config/Wyvest/$NAME/${ForgeTemplate.ID}.t type = PropertyType.BUTTON, name = "Update Now", description = "Update $NAME by clicking the button.", - category = "Updater" + category = "General" ) fun update() { if (Updater.shouldUpdate) EssentialAPI.getGuiUtil() diff --git a/src/main/kotlin/net/wyvest/template/gui/DownloadConfirmGui.kt b/src/main/kotlin/net/wyvest/behindyou/gui/DownloadConfirmGui.kt similarity index 81% rename from src/main/kotlin/net/wyvest/template/gui/DownloadConfirmGui.kt rename to src/main/kotlin/net/wyvest/behindyou/gui/DownloadConfirmGui.kt index 58514fd..e8a96eb 100644 --- a/src/main/kotlin/net/wyvest/template/gui/DownloadConfirmGui.kt +++ b/src/main/kotlin/net/wyvest/behindyou/gui/DownloadConfirmGui.kt @@ -1,4 +1,4 @@ -package net.wyvest.template.gui +package net.wyvest.behindyou.gui import gg.essential.api.EssentialAPI import gg.essential.api.utils.Multithreading @@ -7,10 +7,10 @@ import net.minecraft.client.gui.GuiMainMenu import net.minecraft.client.gui.GuiScreen import net.minecraft.client.renderer.GlStateManager import net.minecraft.util.EnumChatFormatting -import net.wyvest.template.ForgeTemplate -import net.wyvest.template.utils.Updater -import net.wyvest.template.utils.Updater.shouldUpdate -import net.wyvest.template.utils.Updater.updateUrl +import net.wyvest.behindyou.BehindYou +import net.wyvest.behindyou.utils.Updater +import net.wyvest.behindyou.utils.Updater.shouldUpdate +import net.wyvest.behindyou.utils.Updater.updateUrl import java.io.File import kotlin.math.max @@ -29,19 +29,19 @@ class DownloadConfirmGui(private val parent: GuiScreen?) : GuiScreen() { Multithreading.runAsync { if (Updater.download( updateUrl, - File("mods/${ForgeTemplate.NAME}-${Updater.latestTag.substringAfter("v")}.jar") + File("mods/${BehindYou.NAME}-${Updater.latestTag.substringAfter("v")}.jar") ) && Updater.download( "https://github.com/Wyvest/Deleter/releases/download/v1.2/Deleter-1.2.jar", File("config/Wyvest/Deleter-1.2.jar") ) ) { EssentialAPI.getNotifications() - .push(ForgeTemplate.NAME, "The ingame updater has successfully installed the newest version.") + .push(BehindYou.NAME, "The ingame updater has successfully installed the newest version.") Updater.addShutdownHook() shouldUpdate = false } else { EssentialAPI.getNotifications().push( - ForgeTemplate.NAME, + BehindYou.NAME, "The ingame updater has NOT installed the newest version as something went wrong." ) } @@ -63,7 +63,7 @@ class DownloadConfirmGui(private val parent: GuiScreen?) : GuiScreen() { GlStateManager.scale(2f, 2f, 0f) drawCenteredString( fontRendererObj, - EnumChatFormatting.DARK_PURPLE.toString() + ForgeTemplate.NAME, + EnumChatFormatting.DARK_PURPLE.toString() + BehindYou.NAME, width / 4, 3, -1 @@ -74,7 +74,7 @@ class DownloadConfirmGui(private val parent: GuiScreen?) : GuiScreen() { val lines = listOf( "Are you sure you want to update?", "You can download it ingame at any time via the configuration screen.", - "(This will update from v${ForgeTemplate.VERSION} to ${Updater.latestTag})" + "(This will update from v${BehindYou.VERSION} to ${Updater.latestTag})" ) var offset = max(85 - lines.size * 10, 10) diff --git a/src/main/kotlin/net/wyvest/template/utils/APIUtil.kt b/src/main/kotlin/net/wyvest/behindyou/utils/APIUtil.kt similarity index 88% rename from src/main/kotlin/net/wyvest/template/utils/APIUtil.kt rename to src/main/kotlin/net/wyvest/behindyou/utils/APIUtil.kt index 3b12a6b..d4e2c43 100644 --- a/src/main/kotlin/net/wyvest/template/utils/APIUtil.kt +++ b/src/main/kotlin/net/wyvest/behindyou/utils/APIUtil.kt @@ -1,8 +1,8 @@ -package net.wyvest.template.utils +package net.wyvest.behindyou.utils import com.google.gson.JsonObject import com.google.gson.JsonParser -import net.wyvest.template.ForgeTemplate +import net.wyvest.behindyou.BehindYou import org.apache.http.HttpRequest import org.apache.http.HttpResponse import org.apache.http.HttpVersion @@ -22,7 +22,7 @@ object APIUtil { private val parser = JsonParser() private val builder: HttpClientBuilder = - HttpClients.custom().setUserAgent("${ForgeTemplate.NAME}/${ForgeTemplate.VERSION}") + HttpClients.custom().setUserAgent("${BehindYou.NAME}/${BehindYou.VERSION}") .addInterceptorFirst { request: HttpRequest, _: HttpContext? -> if (!request.containsHeader("Pragma")) request.addHeader("Pragma", "no-cache") if (!request.containsHeader("Cache-Control")) request.addHeader("Cache-Control", "no-cache") @@ -55,7 +55,7 @@ object APIUtil { } } catch (ex: Throwable) { ex.printStackTrace() - ForgeTemplate.sendMessage("§cAn error has occured whilst fetching a resource. See logs for more details.") + BehindYou.sendMessage("§cAn error has occured whilst fetching a resource. See logs for more details.") } finally { client.close() } diff --git a/src/main/kotlin/net/wyvest/template/utils/StringUtils.kt b/src/main/kotlin/net/wyvest/behindyou/utils/StringUtils.kt similarity index 96% rename from src/main/kotlin/net/wyvest/template/utils/StringUtils.kt rename to src/main/kotlin/net/wyvest/behindyou/utils/StringUtils.kt index 62a666d..0c89681 100644 --- a/src/main/kotlin/net/wyvest/template/utils/StringUtils.kt +++ b/src/main/kotlin/net/wyvest/behindyou/utils/StringUtils.kt @@ -1,4 +1,4 @@ -package net.wyvest.template.utils +package net.wyvest.behindyou.utils import net.minecraft.util.EnumChatFormatting import org.apache.commons.lang3.StringUtils as ApacheStringUtils diff --git a/src/main/kotlin/net/wyvest/template/utils/Updater.kt b/src/main/kotlin/net/wyvest/behindyou/utils/Updater.kt similarity index 78% rename from src/main/kotlin/net/wyvest/template/utils/Updater.kt rename to src/main/kotlin/net/wyvest/behindyou/utils/Updater.kt index 68497d3..2e8b3d5 100644 --- a/src/main/kotlin/net/wyvest/template/utils/Updater.kt +++ b/src/main/kotlin/net/wyvest/behindyou/utils/Updater.kt @@ -1,4 +1,4 @@ -package net.wyvest.template.utils +package net.wyvest.behindyou.utils import gg.essential.api.EssentialAPI import kotlinx.coroutines.CoroutineName @@ -7,9 +7,10 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import net.minecraft.util.Util import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion -import net.wyvest.template.ForgeTemplate -import net.wyvest.template.ForgeTemplate.mc -import net.wyvest.template.gui.DownloadConfirmGui +import net.wyvest.behindyou.BehindYou +import net.wyvest.behindyou.BehindYou.mc +import net.wyvest.behindyou.config.BehindYouConfig +import net.wyvest.behindyou.gui.DownloadConfirmGui import org.apache.http.HttpResponse import org.apache.http.client.HttpClient import org.apache.http.client.config.RequestConfig @@ -31,24 +32,26 @@ object Updater { * https://github.com/My-Name-Is-Jeff/SimpleToggleSprint/blob/1.8.9/LICENSE */ fun update() { - CoroutineScope(Dispatchers.IO + CoroutineName("${ForgeTemplate.NAME}-UpdateChecker")).launch { + CoroutineScope(Dispatchers.IO + CoroutineName("${BehindYou.NAME}-UpdateChecker")).launch { val latestRelease = - APIUtil.getJSONResponse("https://api.github.com/repos/Wyvest/${ForgeTemplate.ID}/releases/latest") + APIUtil.getJSONResponse("https://api.github.com/repos/Wyvest/${BehindYou.ID}/releases/latest") latestTag = latestRelease.get("tag_name").asString - val currentVersion = DefaultArtifactVersion(ForgeTemplate.VERSION.substringBefore("-")) + val currentVersion = DefaultArtifactVersion(BehindYou.VERSION.substringBefore("-")) val latestVersion = DefaultArtifactVersion(latestTag.substringAfter("v").substringBefore("-")) - if ((ForgeTemplate.VERSION.contains("BETA") && currentVersion >= latestVersion)) { + if ((BehindYou.VERSION.contains("BETA") && currentVersion >= latestVersion)) { return@launch } else if (currentVersion < latestVersion) { updateUrl = latestRelease["assets"].asJsonArray[0].asJsonObject["browser_download_url"].asString } if (updateUrl.isNotEmpty()) { - EssentialAPI.getNotifications() - .push("Mod Update", "${ForgeTemplate.NAME} $latestTag is available!\nClick here to download it!", 5f) { - EssentialAPI.getGuiUtil().openScreen(DownloadConfirmGui(mc.currentScreen)) - } + if (BehindYouConfig.showUpdateNotification) { + EssentialAPI.getNotifications() + .push("Mod Update", "${BehindYou.NAME} $latestTag is available!\nClick here to download it!", 5f) { + EssentialAPI.getGuiUtil().openScreen(DownloadConfirmGui(mc.currentScreen)) + } + } shouldUpdate = true } } @@ -87,18 +90,18 @@ object Updater { */ fun addShutdownHook() { EssentialAPI.getShutdownHookUtil().register(Thread { - println("Deleting old ${ForgeTemplate.NAME} jar file...") + println("Deleting old ${BehindYou.NAME} jar file...") try { val runtime = getJavaRuntime() if (Util.getOSType() == Util.EnumOS.OSX) { println("On Mac, trying to open mods folder") - Desktop.getDesktop().open(ForgeTemplate.jarFile.parentFile) + Desktop.getDesktop().open(BehindYou.jarFile.parentFile) } println("Using runtime $runtime") val file = File("config/Wyvest/Deleter-1.2.jar") - println("\"$runtime\" -jar \"${file.absolutePath}\" \"${ForgeTemplate.jarFile.absolutePath}\"") + println("\"$runtime\" -jar \"${file.absolutePath}\" \"${BehindYou.jarFile.absolutePath}\"") Runtime.getRuntime() - .exec("\"$runtime\" -jar \"${file.absolutePath}\" \"${ForgeTemplate.jarFile.absolutePath}\"") + .exec("\"$runtime\" -jar \"${file.absolutePath}\" \"${BehindYou.jarFile.absolutePath}\"") } catch (e: Throwable) { e.printStackTrace() } diff --git a/src/main/kotlin/net/wyvest/template/commands/TemplateCommand.kt b/src/main/kotlin/net/wyvest/template/commands/TemplateCommand.kt deleted file mode 100644 index 8756d6f..0000000 --- a/src/main/kotlin/net/wyvest/template/commands/TemplateCommand.kt +++ /dev/null @@ -1,26 +0,0 @@ -package net.wyvest.template.commands - -import gg.essential.api.EssentialAPI -import gg.essential.api.commands.Command -import gg.essential.api.commands.DefaultHandler -import gg.essential.api.commands.SubCommand -import net.wyvest.template.ForgeTemplate -import net.wyvest.template.config.TemplateConfig - -@Suppress("unused") -object TemplateCommand : Command(ForgeTemplate.ID, true) { - - override val commandAliases = setOf( - Alias("wyvesttemplate") - ) - - @DefaultHandler - fun handle() { - EssentialAPI.getGuiUtil().openScreen(TemplateConfig.gui()) - } - - @SubCommand("config", description = "Opens the config GUI for " + ForgeTemplate.NAME) - fun config() { - EssentialAPI.getGuiUtil().openScreen(TemplateConfig.gui()) - } -} \ No newline at end of file diff --git a/src/main/resources/assets/template/wyvest.png b/src/main/resources/assets/template/wyvest.png deleted file mode 100644 index 693fa473d522e6433bcd6752e2b21dd15c13dee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49980 zcmV((K;XZLP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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

I~7VWvFt85TkXDfhaqS;zkUmBm-h#%l<)HaJPuC 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

}FQaGD;`|2e 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 T@ow8)paup{S3j3^P6