aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt
new file mode 100644
index 000000000..6b9e56145
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt
@@ -0,0 +1,117 @@
+package at.hannibal2.skyhanni.utils
+
+import net.minecraftforge.fml.common.FMLCommonHandler
+import java.awt.Desktop
+import java.awt.event.MouseAdapter
+import java.awt.event.MouseEvent
+import java.net.URI
+import javax.swing.JButton
+import javax.swing.JFrame
+import javax.swing.JOptionPane
+import javax.swing.UIManager
+
+object NEUVersionCheck {
+
+ @JvmStatic
+ fun checkIfNeuIsLoaded() {
+ try {
+ Class.forName("io.github.moulberry.notenoughupdates.NotEnoughUpdates")
+ } catch (e: Throwable) {
+ neuWarning(
+ "NotEnoughUpdates is missing!\n" +
+ "SkyHanni requires the latest version of NotEnoughUpdates to work.\n" +
+ "Use these links to download the latest version:"
+ )
+ return
+ }
+
+ try {
+ val clazz = Class.forName("io.github.moulberry.notenoughupdates.util.ItemResolutionQuery")
+
+ for (field in clazz.methods) {
+ if (field.name == "findInternalNameByDisplayName") return
+ }
+ } catch (_: Throwable) {
+ }
+ outdated()
+ }
+
+ private fun outdated() {
+ neuWarning(
+ "NotEnoughUpdates is outdated!\n" +
+ "SkyHanni requires the latest version of NotEnoughUpdates to work.\n" +
+ "Use these links to download the latest version:"
+ )
+ }
+
+ private fun neuWarning(text: String) {
+ openPopupWindow(
+ text,
+ Pair("Join SkyHanni Discord", "https://discord.com/invite/8DXVN4BJz3"),
+ Pair("Open SkyHanni GitHub", "https://github.com/hannibal002/SkyHanni"),
+ Pair("Join NEU Discord", "https://discord.gg/moulberry"),
+ Pair("Open NEU GitHub", "https://github.com/NotEnoughUpdates/NotEnoughUpdates"),
+ )
+ closeMinecraft()
+ }
+
+ /**
+ * Taken and modified from Skytils
+ */
+ private fun openPopupWindow(errorMessage: String, vararg options: Pair<String, String>) {
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
+ } catch (e: java.lang.Exception) {
+ e.printStackTrace()
+ }
+
+ val frame = JFrame()
+ frame.isUndecorated = true
+ frame.isAlwaysOnTop = true
+ frame.setLocationRelativeTo(null)
+ frame.isVisible = true
+
+ val buttons = mutableListOf<JButton>()
+ for ((name, link) in options) {
+ val button = JButton(name)
+ button.addMouseListener(object : MouseAdapter() {
+ override fun mouseClicked(event: MouseEvent) {
+ try {
+ Desktop.getDesktop().browse(URI(link))
+ } catch (e: java.lang.Exception) {
+ e.printStackTrace()
+ }
+ }
+ })
+ buttons.add(button)
+ }
+ val close = JButton("Close")
+ close.addMouseListener(object : MouseAdapter() {
+ override fun mouseClicked(event: MouseEvent) {
+ try {
+ closeMinecraft()
+ } catch (e: java.lang.Exception) {
+ e.printStackTrace()
+ }
+ }
+ })
+ buttons.add(close)
+
+ val allOptions = buttons.toTypedArray()
+ JOptionPane.showOptionDialog(
+ frame,
+ errorMessage,
+ "SkyHanni Error",
+ JOptionPane.DEFAULT_OPTION,
+ JOptionPane.ERROR_MESSAGE,
+ null,
+ allOptions,
+ allOptions[0]
+ )
+ }
+
+ fun closeMinecraft() {
+ FMLCommonHandler.instance().handleExit(-1)
+ FMLCommonHandler.instance().expectServerStopped()
+ }
+} \ No newline at end of file