From efe491ca2d0114c3c3f87134b4fce1ef6d5bde34 Mon Sep 17 00:00:00 2001 From: NotCoded <66999075+not-coded@users.noreply.github.com> Date: Thu, 7 Mar 2024 20:48:51 +0100 Subject: [PATCH 1/6] bump version + remove unnecessary stuff --- .gitattributes | 1 - README.md | 2 -- assets/showcase.gif | 3 --- build.gradle | 2 +- 4 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 .gitattributes delete mode 100644 assets/showcase.gif diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index d41a940..0000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.gif filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md index f4537c0..d593884 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,6 @@ The combat test installer allows you to install the combat test snapshots made b ![launcher_installed_box](https://raw.githubusercontent.com/nexia-cts/combat-test-installer/main/assets/launcher_installed_box.png) -![showcase](https://media.githubusercontent.com/media/nexia-cts/combat-test-installer/main/assets/showcase.gif) - # Credits [Fabric Installer](https://github.com/FabricMC/fabric-installer/) diff --git a/assets/showcase.gif b/assets/showcase.gif deleted file mode 100644 index 92c94cd..0000000 --- a/assets/showcase.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:10abca38d85074c2eb4162ea75d293dfa1d43ba65d42536e112f6a90eebe1cd6 -size 289898179 diff --git a/build.gradle b/build.gradle index 51bdf5e..e985054 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 group = 'com.nexia' -version = '1.0.2' +version = '1.0.3' repositories { mavenCentral() From 3cdad232b9ff9ca5bc5169ae48934a194fa5b95f Mon Sep 17 00:00:00 2001 From: NotCoded <66999075+not-coded@users.noreply.github.com> Date: Thu, 7 Mar 2024 21:14:31 +0100 Subject: [PATCH 2/6] errors get shown now --- .../nexia/installer/util/InstallerHelper.java | 5 +-- .../nexia/installer/util/InstallerUtils.java | 23 ++++++++++++ .../java/com/nexia/installer/util/Utils.java | 2 +- .../util/fabric/FabricInstallerHelper.java | 35 ++++--------------- src/main/resources/lang/installer.properties | 1 + 5 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/nexia/installer/util/InstallerHelper.java b/src/main/java/com/nexia/installer/util/InstallerHelper.java index 189589e..b3ba44c 100644 --- a/src/main/java/com/nexia/installer/util/InstallerHelper.java +++ b/src/main/java/com/nexia/installer/util/InstallerHelper.java @@ -56,8 +56,9 @@ public JPanel setPanel(InstallerGUI gui) { buttonInstall.setEnabled(false); try { launch(); - } catch (IOException ex) { - throw new RuntimeException(ex); + } catch (IOException | RuntimeException ex) { + InstallerUtils.showError(ex.getMessage()); + ex.printStackTrace(); } }); diff --git a/src/main/java/com/nexia/installer/util/InstallerUtils.java b/src/main/java/com/nexia/installer/util/InstallerUtils.java index 708b061..9ca0d9b 100644 --- a/src/main/java/com/nexia/installer/util/InstallerUtils.java +++ b/src/main/java/com/nexia/installer/util/InstallerUtils.java @@ -133,6 +133,29 @@ public static ProfileInstaller.LauncherType showLauncherTypeSelection() { return result == JOptionPane.YES_OPTION ? ProfileInstaller.LauncherType.MICROSOFT_STORE : ProfileInstaller.LauncherType.WIN32; } + public static void showError(String error) { + Object[] options = {"Restart Program"}; + int result = JOptionPane.showOptionDialog(null, + error, + Main.BUNDLE.getString("installer.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.ERROR_MESSAGE, + null, + options, + options[0] + ); + + if(result == JOptionPane.OK_OPTION) { + try { + InstallerGUI.instance.dispose(); + Main.main(new String[]{}); + } catch (Exception ignored) { + System.exit(0); + } + } + + } + private static void showDone(VersionHandler.GameVersion gameVersion) { Object[] options = {"OK", "Install Fabric"}; int result = JOptionPane.showOptionDialog(null, diff --git a/src/main/java/com/nexia/installer/util/Utils.java b/src/main/java/com/nexia/installer/util/Utils.java index c1abf14..36aed3c 100644 --- a/src/main/java/com/nexia/installer/util/Utils.java +++ b/src/main/java/com/nexia/installer/util/Utils.java @@ -136,7 +136,7 @@ public static String getProfileIcon() { return "data:image/png;base64," + Base64.getEncoder().encodeToString(Arrays.copyOf(ret, offset)); } catch (IOException e) { - return "furnace"; // Fallback to furnace icon if we cant load Nexia icon. + return "furnace"; // Fallback to default icon if we cant load the icon. } } } diff --git a/src/main/java/com/nexia/installer/util/fabric/FabricInstallerHelper.java b/src/main/java/com/nexia/installer/util/fabric/FabricInstallerHelper.java index 07334fb..60d28da 100644 --- a/src/main/java/com/nexia/installer/util/fabric/FabricInstallerHelper.java +++ b/src/main/java/com/nexia/installer/util/fabric/FabricInstallerHelper.java @@ -64,8 +64,9 @@ public JPanel setPanel(InstallerGUI gui) { buttonInstall.setEnabled(false); try { launch(); - } catch (IOException ex) { - throw new RuntimeException(ex); + } catch (IOException | RuntimeException ex) { + InstallerUtils.showError(ex.getMessage()); + ex.printStackTrace(); } }); @@ -124,13 +125,13 @@ public void launch() throws IOException { if (successBufferedInputStream.available() == 0) hasError = true; if(hasError) { - this.error(); + InstallerUtils.showError(Main.BUNDLE.getString("installer.prompt.install.error")); } else { this.showDone(gameVersion); } } catch (Exception ignored) { - this.error(); + InstallerUtils.showError(Main.BUNDLE.getString("installer.prompt.install.error")); } buttonInstall.setEnabled(true); @@ -170,7 +171,7 @@ private File getJarFile() throws IOException { private String getFabricVersion() { - String version = "0.11.1"; + String version = "0.11.2"; try { String response = HttpAPI.get("https://api.github.com/repos/rizecookey/fabric-installer/releases/latest"); @@ -197,29 +198,5 @@ private void showDone(FabricVersionHandler.GameVersion gameVersion) { if(result == JOptionPane.NO_OPTION) InstallerGUI.instance.pane.setSelectedComponent(InstallerGUI.instance.vanilla); } - - private void error() { - Object[] options = {"OK", "Cancel"}; - int result = JOptionPane.showOptionDialog(null, - MessageFormat.format(Main.BUNDLE.getString("installer.prompt.install.error"), ""), - Main.BUNDLE.getString("installer.title"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.ERROR_MESSAGE, - null, - options, - options[0] - ); - - if(result == JOptionPane.OK_OPTION) { - try { - InstallerGUI.instance.dispose(); - Main.main(new String[]{}); - } catch (Exception ignored) { - System.exit(0); - } - } - - buttonInstall.setEnabled(true); - } } diff --git a/src/main/resources/lang/installer.properties b/src/main/resources/lang/installer.properties index 700ca29..adeb4b8 100644 --- a/src/main/resources/lang/installer.properties +++ b/src/main/resources/lang/installer.properties @@ -4,6 +4,7 @@ installer.button.install=Install installer.prompt.install.done={0} has been installed, if you want to install fabric then click on the "Install Fabric" button. installer.prompt.install.done.fabric={0} has been installed, if you want to install vanilla then click on the "Install Vanilla" button. installer.exception.no.launcher.directory=No launcher directory found! +installer.exception.no.launcher.profile=No launcher profile.json found! installer.prompt.launcher.type.body=The Combat Test Installer has detected 2 different installations of the Minecraft Launcher, which launcher do you wish to install the Combat Tests to?\n\n- Select Microsoft Store if you are playing Minecraft through the Xbox App or the Windows Store.\n- Select Standalone if you downloaded the Minecraft launcher directly from the Minecraft.net website.\n\nIf you are unsure try the Microsoft Store option first, you can always re-run the installer. installer.prompt.launcher.type.xbox=Microsoft Store / Xbox installer.prompt.launcher.type.win32=Standalone (Win32) From eed3cc1921f4782e49a68dcb9c89e537e25186a6 Mon Sep 17 00:00:00 2001 From: NotCoded <66999075+not-coded@users.noreply.github.com> Date: Tue, 26 Mar 2024 21:44:58 +0100 Subject: [PATCH 3/6] add icon to taskbar, add view cts modlist as option in fabric when done installing --- .../com/nexia/installer/InstallerGUI.java | 18 +++++++++++- .../nexia/installer/game/VersionHandler.java | 28 +++++++++---------- .../util/fabric/FabricInstallerHelper.java | 17 ++++++++--- src/main/resources/lang/installer.properties | 2 +- 4 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/nexia/installer/InstallerGUI.java b/src/main/java/com/nexia/installer/InstallerGUI.java index cbb1d5c..7da5114 100644 --- a/src/main/java/com/nexia/installer/InstallerGUI.java +++ b/src/main/java/com/nexia/installer/InstallerGUI.java @@ -6,6 +6,7 @@ import javax.swing.*; import java.awt.*; import java.io.File; +import java.lang.reflect.Method; import java.util.function.Consumer; import java.util.function.Supplier; @@ -57,14 +58,29 @@ public static void load() throws UnsupportedLookAndFeelException, ClassNotFoundE gui.setContentPane(gui.pane); - gui.updateSize(true); gui.setTitle(Main.BUNDLE.getString("installer.title")); + gui.setIconImage(Main.icon); + gui.setTaskBarImage(Main.icon); + gui.setLocationRelativeTo(null); gui.setVisible(true); } + private void setTaskBarImage(Image image) { + try { + // Only supported in Java 9 + + Class taskbarClass = Class.forName("java.awt.Taskbar"); + Method getTaskbar = taskbarClass.getDeclaredMethod("getTaskbar"); + Method setIconImage = taskbarClass.getDeclaredMethod("setIconImage", Image.class); + Object taskbar = getTaskbar.invoke(null); + setIconImage.invoke(taskbar, image); + } catch (Exception e) { + // Ignored, running on Java 8 + } + } + private void updateSize(boolean updateMinimum) { if (updateMinimum) setMinimumSize(null); setPreferredSize(null); diff --git a/src/main/java/com/nexia/installer/game/VersionHandler.java b/src/main/java/com/nexia/installer/game/VersionHandler.java index 57e7a3d..28dcc65 100644 --- a/src/main/java/com/nexia/installer/game/VersionHandler.java +++ b/src/main/java/com/nexia/installer/game/VersionHandler.java @@ -6,23 +6,23 @@ public class VersionHandler { public static List versions = new ArrayList<>(); - public static GameVersion CombatTest8c = new GameVersion("Combat Test 8c", "1.16_combat-6", new Download("f76157734ee0611fbef7d636156f20fa67c34514", 7463, "https://www.rizecookey.net/dl/file/combat-test-patched/1_16_combat-6.zip")); + public static GameVersion CombatTest8c = new GameVersion("Combat Test 8c", "1.16_combat-6", new Download("f76157734ee0611fbef7d636156f20fa67c34514", "https://www.rizecookey.net/dl/file/combat-test-patched/1_16_combat-6.zip")); - public static GameVersion CombatTest8b = new GameVersion("Combat Test 8b", "1.16_combat-5", new Download("9b2b984d635d373564b50803807225c75d7fd447", 7044, "https://launcher.mojang.com/experiments/combat/9b2b984d635d373564b50803807225c75d7fd447/1_16_combat-5.zip")); + public static GameVersion CombatTest8b = new GameVersion("Combat Test 8b", "1.16_combat-5", new Download("9b2b984d635d373564b50803807225c75d7fd447", "https://launcher.mojang.com/experiments/combat/9b2b984d635d373564b50803807225c75d7fd447/1_16_combat-5.zip")); - public static GameVersion CombatTest8 = new GameVersion("Combat Test 8", "1.16_combat-4", new Download("b4306b421183bd084b2831bd8d33a5db05ae9f9c", 7046, "https://cdn.discordapp.com/attachments/369990015096455168/947864881028272198/1_16_combat-4.zip")); + public static GameVersion CombatTest8 = new GameVersion("Combat Test 8", "1.16_combat-4", new Download("b4306b421183bd084b2831bd8d33a5db05ae9f9c", "https://cdn.discordapp.com/attachments/369990015096455168/947864881028272198/1_16_combat-4.zip")); - public static GameVersion CombatTest7c = new GameVersion("Combat Test 7c", "1.16_combat-3", new Download("2557b99d95588505e988886220779087d7d6b1e9", 7049, "https://piston-data.mojang.com/experiments/combat/2557b99d95588505e988886220779087d7d6b1e9/1_16_combat-3.zip")); + public static GameVersion CombatTest7c = new GameVersion("Combat Test 7c", "1.16_combat-3", new Download("2557b99d95588505e988886220779087d7d6b1e9", "https://piston-data.mojang.com/experiments/combat/2557b99d95588505e988886220779087d7d6b1e9/1_16_combat-3.zip")); - public static GameVersion CombatTest7b = new GameVersion("Combat Test 7b", "1.16_combat-2", new Download("43266ea8f2c20601d9fb264d5aa85df8052abc9e", 7051, "https://archive.org/download/Combat_Test_7ab/1_16_combat-2.zip")); - public static GameVersion CombatTest7 = new GameVersion("Combat Test 7", "1.16_combat-1", new Download("47bb5be6cb3ba215539ee97dfae66724c73c3dd5", 7045, "https://archive.org/download/Combat_Test_7ab/1_16_combat-1.zip")); + public static GameVersion CombatTest7b = new GameVersion("Combat Test 7b", "1.16_combat-2", new Download("43266ea8f2c20601d9fb264d5aa85df8052abc9e", "https://archive.org/download/Combat_Test_7ab/1_16_combat-2.zip")); + public static GameVersion CombatTest7 = new GameVersion("Combat Test 7", "1.16_combat-1", new Download("47bb5be6cb3ba215539ee97dfae66724c73c3dd5", "https://archive.org/download/Combat_Test_7ab/1_16_combat-1.zip")); - public static GameVersion CombatTest6 = new GameVersion("Combat Test 6", "1.16_combat-0", new Download("5a8ceec8681ed96ab6ecb9607fb5d19c8a755559", 7049, "https://piston-data.mojang.com/experiments/combat/5a8ceec8681ed96ab6ecb9607fb5d19c8a755559/1_16_combat-0.zip")); - public static GameVersion CombatTest5 = new GameVersion("Combat Test 5", "1.15_combat-6", new Download("52263d42a626b40c947e523128f7a195ec5af76a", 7061, "https://piston-data.mojang.com/experiments/combat/52263d42a626b40c947e523128f7a195ec5af76a/1_15_combat-6.zip")); - public static GameVersion CombatTest4 = new GameVersion("Combat Test 4", "1.15_combat-1", new Download("ac11ea96f3bb2fa2b9b76ab1d20cacb1b1f7ef60", 7059, "https://piston-data.mojang.com/experiments/combat/ac11ea96f3bb2fa2b9b76ab1d20cacb1b1f7ef60/1_15_combat-1.zip")); - public static GameVersion CombatTest3 = new GameVersion("Combat Test 3", "1.14_combat-3", new Download("0f209c9c84b81c7d4c88b4632155b9ae550beb89", 6433, "https://piston-data.mojang.com/experiments/combat/0f209c9c84b81c7d4c88b4632155b9ae550beb89/1_14_combat-3.zip")); - public static GameVersion CombatTest2 = new GameVersion("Combat Test 2", "1.14_combat-0", new Download("d164bb6ecc5fca9ac02878c85f11befae61ac1ca", 6287, "https://piston-data.mojang.com/experiments/combat/d164bb6ecc5fca9ac02878c85f11befae61ac1ca/1_14_combat-0.zip")); - public static GameVersion CombatTest1 = new GameVersion("1.14.3 - Combat Test", "1.14_combat-212796", new Download("610f5c9874ba8926d5ae1bcce647e5f0e6e7c889",4843, "https://piston-data.mojang.com/experiments/combat/610f5c9874ba8926d5ae1bcce647e5f0e6e7c889/1_14_combat-212796.zip")); + public static GameVersion CombatTest6 = new GameVersion("Combat Test 6", "1.16_combat-0", new Download("5a8ceec8681ed96ab6ecb9607fb5d19c8a755559", "https://piston-data.mojang.com/experiments/combat/5a8ceec8681ed96ab6ecb9607fb5d19c8a755559/1_16_combat-0.zip")); + public static GameVersion CombatTest5 = new GameVersion("Combat Test 5", "1.15_combat-6", new Download("52263d42a626b40c947e523128f7a195ec5af76a", "https://piston-data.mojang.com/experiments/combat/52263d42a626b40c947e523128f7a195ec5af76a/1_15_combat-6.zip")); + public static GameVersion CombatTest4 = new GameVersion("Combat Test 4", "1.15_combat-1", new Download("ac11ea96f3bb2fa2b9b76ab1d20cacb1b1f7ef60", "https://piston-data.mojang.com/experiments/combat/ac11ea96f3bb2fa2b9b76ab1d20cacb1b1f7ef60/1_15_combat-1.zip")); + public static GameVersion CombatTest3 = new GameVersion("Combat Test 3", "1.14_combat-3", new Download("0f209c9c84b81c7d4c88b4632155b9ae550beb89", "https://piston-data.mojang.com/experiments/combat/0f209c9c84b81c7d4c88b4632155b9ae550beb89/1_14_combat-3.zip")); + public static GameVersion CombatTest2 = new GameVersion("Combat Test 2", "1.14_combat-0", new Download("d164bb6ecc5fca9ac02878c85f11befae61ac1ca", "https://piston-data.mojang.com/experiments/combat/d164bb6ecc5fca9ac02878c85f11befae61ac1ca/1_14_combat-0.zip")); + public static GameVersion CombatTest1 = new GameVersion("1.14.3 - Combat Test", "1.14_combat-212796", new Download("610f5c9874ba8926d5ae1bcce647e5f0e6e7c889", "https://piston-data.mojang.com/experiments/combat/610f5c9874ba8926d5ae1bcce647e5f0e6e7c889/1_14_combat-212796.zip")); public static class GameVersion { String version; @@ -52,12 +52,10 @@ public Download getDownload() { public static class Download { public final String sha1; - public final long size; public final String url; - public Download(String sha1, long size, String url) { + public Download(String sha1, String url) { this.sha1 = sha1; - this.size = size; this.url = url; } } diff --git a/src/main/java/com/nexia/installer/util/fabric/FabricInstallerHelper.java b/src/main/java/com/nexia/installer/util/fabric/FabricInstallerHelper.java index 60d28da..105d661 100644 --- a/src/main/java/com/nexia/installer/util/fabric/FabricInstallerHelper.java +++ b/src/main/java/com/nexia/installer/util/fabric/FabricInstallerHelper.java @@ -11,6 +11,8 @@ import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; @@ -171,7 +173,7 @@ private File getJarFile() throws IOException { private String getFabricVersion() { - String version = "0.11.2"; + String version = "1.0.0"; try { String response = HttpAPI.get("https://api.github.com/repos/rizecookey/fabric-installer/releases/latest"); @@ -184,8 +186,8 @@ private String getFabricVersion() { } catch (Exception ignored) { return version; } } - private void showDone(FabricVersionHandler.GameVersion gameVersion) { - Object[] options = {"OK", "Install Vanilla"}; + private void showDone(FabricVersionHandler.GameVersion gameVersion) throws URISyntaxException, IOException { + Object[] options = {"OK", "View CTS Mod List"}; int result = JOptionPane.showOptionDialog(null, MessageFormat.format(Main.BUNDLE.getString("installer.prompt.install.done.fabric"), gameVersion.getVersion()), Main.BUNDLE.getString("installer.title"), @@ -196,7 +198,14 @@ private void showDone(FabricVersionHandler.GameVersion gameVersion) { options[0] ); - if(result == JOptionPane.NO_OPTION) InstallerGUI.instance.pane.setSelectedComponent(InstallerGUI.instance.vanilla); + if(result == JOptionPane.NO_OPTION) { + URI url = new URI("https://github.com/nexia-cts/cts-mod-list"); + if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { + Desktop.getDesktop().browse(url); + } else { + throw new UnsupportedOperationException("Failed to open " + url.toURL()); + } + } } } diff --git a/src/main/resources/lang/installer.properties b/src/main/resources/lang/installer.properties index adeb4b8..30e9bb0 100644 --- a/src/main/resources/lang/installer.properties +++ b/src/main/resources/lang/installer.properties @@ -2,7 +2,7 @@ installer.prompt.game.version=Minecraft Version: installer.prompt.select.location=Select Install Location: installer.button.install=Install installer.prompt.install.done={0} has been installed, if you want to install fabric then click on the "Install Fabric" button. -installer.prompt.install.done.fabric={0} has been installed, if you want to install vanilla then click on the "Install Vanilla" button. +installer.prompt.install.done.fabric={0} has been installed, if you want mods for fabric then you should check out the CTS Mod List by clicking on the "View CTS Mod List" button. installer.exception.no.launcher.directory=No launcher directory found! installer.exception.no.launcher.profile=No launcher profile.json found! installer.prompt.launcher.type.body=The Combat Test Installer has detected 2 different installations of the Minecraft Launcher, which launcher do you wish to install the Combat Tests to?\n\n- Select Microsoft Store if you are playing Minecraft through the Xbox App or the Windows Store.\n- Select Standalone if you downloaded the Minecraft launcher directly from the Minecraft.net website.\n\nIf you are unsure try the Microsoft Store option first, you can always re-run the installer. From b473234383d8fda2c59b9d85948aa0a85d853ab4 Mon Sep 17 00:00:00 2001 From: NotCoded <66999075+not-coded@users.noreply.github.com> Date: Tue, 26 Mar 2024 22:29:15 +0100 Subject: [PATCH 4/6] change cts 8 download link --- src/main/java/com/nexia/installer/game/VersionHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/nexia/installer/game/VersionHandler.java b/src/main/java/com/nexia/installer/game/VersionHandler.java index 28dcc65..d7157d4 100644 --- a/src/main/java/com/nexia/installer/game/VersionHandler.java +++ b/src/main/java/com/nexia/installer/game/VersionHandler.java @@ -10,7 +10,7 @@ public class VersionHandler { public static GameVersion CombatTest8b = new GameVersion("Combat Test 8b", "1.16_combat-5", new Download("9b2b984d635d373564b50803807225c75d7fd447", "https://launcher.mojang.com/experiments/combat/9b2b984d635d373564b50803807225c75d7fd447/1_16_combat-5.zip")); - public static GameVersion CombatTest8 = new GameVersion("Combat Test 8", "1.16_combat-4", new Download("b4306b421183bd084b2831bd8d33a5db05ae9f9c", "https://cdn.discordapp.com/attachments/369990015096455168/947864881028272198/1_16_combat-4.zip")); + public static GameVersion CombatTest8 = new GameVersion("Combat Test 8", "1.16_combat-4", new Download("b4306b421183bd084b2831bd8d33a5db05ae9f9c", "https://notcoded.needs.rest/r/1_16_combat-4.zip")); public static GameVersion CombatTest7c = new GameVersion("Combat Test 7c", "1.16_combat-3", new Download("2557b99d95588505e988886220779087d7d6b1e9", "https://piston-data.mojang.com/experiments/combat/2557b99d95588505e988886220779087d7d6b1e9/1_16_combat-3.zip")); From 58bca1826fd1612db57862e40f00419a30d9ef48 Mon Sep 17 00:00:00 2001 From: NotCoded <66999075+not-coded@users.noreply.github.com> Date: Tue, 26 Mar 2024 22:36:52 +0100 Subject: [PATCH 5/6] tweaks to http in utils --- src/main/java/com/nexia/installer/util/Utils.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/nexia/installer/util/Utils.java b/src/main/java/com/nexia/installer/util/Utils.java index 36aed3c..b828cdb 100644 --- a/src/main/java/com/nexia/installer/util/Utils.java +++ b/src/main/java/com/nexia/installer/util/Utils.java @@ -22,6 +22,8 @@ public class Utils { public static final DateFormat ISO_8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + public static String userAgent = "Mozilla/5.0 (compatible; combat-test-installer; +https://github.com/nexia-cts/combat-test-installer)"; + public static void extractZip(Path file, Path path) throws IOException { ZipInputStream zipIn = new ZipInputStream(Files.newInputStream(Paths.get(file.toString()))); ZipEntry entry = zipIn.getNextEntry(); @@ -56,7 +58,7 @@ public static void writeToFile(Path path, String string) throws IOException { Files.write(path, string.getBytes(StandardCharsets.UTF_8)); } - public static void downloadFile(URL url, Path path) throws IOException { + public static void downloadFile(URL url, Path path) { try (InputStream in = openUrl(url)) { Files.createDirectories(path.getParent()); Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING); @@ -67,7 +69,8 @@ public static void downloadFile(URL url, Path path) throws IOException { t.addSuppressed(t2); } - throw t; + InstallerUtils.showError(t.getMessage()); + t.printStackTrace(); } } @@ -76,6 +79,7 @@ public static void downloadFile(URL url, Path path) throws IOException { private static InputStream openUrl(URL url) throws IOException { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestProperty("User-Agent", userAgent); conn.setConnectTimeout(HTTP_TIMEOUT_MS); conn.setReadTimeout(HTTP_TIMEOUT_MS); conn.connect(); From 7c7356be7ec2c5c58d214f8ad7dc75c55ffaaf28 Mon Sep 17 00:00:00 2001 From: NotCoded <66999075+not-coded@users.noreply.github.com> Date: Wed, 27 Mar 2024 11:41:46 +0100 Subject: [PATCH 6/6] add new images --- README.md | 17 +++++++++++++++-- assets/launcher_installed_box.png | Bin 7838 -> 0 bytes assets/launcher_installed_box_fabric.png | Bin 0 -> 15958 bytes assets/launcher_installed_box_vanilla.png | Bin 0 -> 7940 bytes assets/launcher_opened.png | Bin 7869 -> 0 bytes assets/launcher_opened_fabric.png | Bin 0 -> 9805 bytes assets/launcher_opened_vanilla.png | Bin 0 -> 8848 bytes 7 files changed, 15 insertions(+), 2 deletions(-) delete mode 100644 assets/launcher_installed_box.png create mode 100644 assets/launcher_installed_box_fabric.png create mode 100644 assets/launcher_installed_box_vanilla.png delete mode 100644 assets/launcher_opened.png create mode 100644 assets/launcher_opened_fabric.png create mode 100644 assets/launcher_opened_vanilla.png diff --git a/README.md b/README.md index d593884..0d72dc3 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,25 @@ # Combat Test Installer + The combat test installer allows you to install the combat test snapshots made by jeb_, such as [Combat Test 8c](https://minecraft.wiki/w/Java_Edition_Combat_Test_8c) *(latest)*, or [1.14.3 - Combat Test](https://minecraft.wiki/w/Java_Edition_1.14.3_-_Combat_Test) *(first)* -![launcher_opened](https://raw.githubusercontent.com/nexia-cts/combat-test-installer/main/assets/launcher_opened.png) +It also allows you to **install fabric** for the Combat Test Snapshots that have it. + +
+ +![Launcher opened in Vanilla Tab](https://raw.githubusercontent.com/nexia-cts/combat-test-installer/main/assets/launcher_opened_vanilla.png) + +![Launcher successfull installed box in Vanilla](https://raw.githubusercontent.com/nexia-cts/combat-test-installer/main/assets/launcher_installed_box_vanilla.png) -![launcher_installed_box](https://raw.githubusercontent.com/nexia-cts/combat-test-installer/main/assets/launcher_installed_box.png) +
+ +![Launcher opened in Fabric Tab](https://raw.githubusercontent.com/nexia-cts/combat-test-installer/main/assets/launcher_opened_fabric.png) + +![Launcher successfull installed box in Vanilla](https://raw.githubusercontent.com/nexia-cts/combat-test-installer/main/assets/launcher_installed_box_fabric.png) # Credits + [Fabric Installer](https://github.com/FabricMC/fabric-installer/) # License + Licensed under the [Apache License 2.0](https://github.com/nexia-cts/combat-test-installer/blob/main/LICENSE). diff --git a/assets/launcher_installed_box.png b/assets/launcher_installed_box.png deleted file mode 100644 index 1d08ba6f641b1a4acb4f8e803a27517c5cdfa83f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7838 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 BgdP9@ literal 0 HcmV?d00001 diff --git a/assets/launcher_opened.png b/assets/launcher_opened.png deleted file mode 100644 index d3d18e8ce06fa21798fe451b7bc3bcff1f72b7c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7869 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 literal 0 HcmV?d00001 diff --git a/assets/launcher_opened_vanilla.png b/assets/launcher_opened_vanilla.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ed52ebfc41a76a226e01bc4b15f051cfce624f GIT binary patch literal 8848 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 O05xT;r`1oa!u}8U