diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java index e0bd273d9..be21803cf 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java @@ -54,7 +54,7 @@ import org.jackhuang.hellominecraft.utils.system.OS; public final class Main implements NonConsumer { public static String launcherName = "Hello Minecraft! Launcher"; - public static byte firstVer = 2, secondVer = 3, thirdVer = 4; + public static byte firstVer = 2, secondVer = 3, thirdVer = 4, forthVer = 10; public static int minimumLauncherVersion = 16; /** @@ -115,7 +115,7 @@ public final class Main implements NonConsumer { } }); } - + MainFrame.showMainFrame(Settings.isFirstLoad()); } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/DefaultGameLauncher.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/DefaultGameLauncher.java index 770218961..58adee2b3 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/DefaultGameLauncher.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/DefaultGameLauncher.java @@ -26,7 +26,6 @@ import org.jackhuang.hellominecraft.launcher.utils.download.DownloadType; import org.jackhuang.hellominecraft.launcher.settings.Profile; import org.jackhuang.hellominecraft.tasks.ParallelTask; import org.jackhuang.hellominecraft.tasks.TaskWindow; -import org.jackhuang.hellominecraft.tasks.download.FileDownloadTask; import org.jackhuang.hellominecraft.utils.system.Compressor; import org.jackhuang.hellominecraft.utils.system.MessageBox; @@ -46,10 +45,9 @@ public class DefaultGameLauncher extends GameLauncher { downloadLibrariesEvent.register((sender, t) -> { final TaskWindow dw = TaskWindow.getInstance(); ParallelTask parallelTask = new ParallelTask(); - for (DownloadLibraryJob s : t) { + for (DownloadLibraryJob s : t) //parallelTask.addDependsTask(new FileDownloadTask(s.url, s.path).setTag(s.name)); parallelTask.addDependsTask(new LibraryDownloadTask(s)); - } dw.addTask(parallelTask); boolean flag = true; if (t.size() > 0) flag = dw.start(); @@ -58,6 +56,7 @@ public class DefaultGameLauncher extends GameLauncher { return flag; }); decompressNativesEvent.register((sender, value) -> { + if (value == null) return false; for (int i = 0; i < value.decompressFiles.length; i++) try { Compressor.unzip(value.decompressFiles[i], value.decompressTo, value.extractRules[i]); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Settings.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Settings.java index 97257f354..ab091ad74 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Settings.java @@ -62,10 +62,10 @@ public final class Settings { static { settings = initSettings(); - if (!getVersions().containsKey(DEFAULT_PROFILE)) - getVersions().put(DEFAULT_PROFILE, new Profile()); + if (!getProfiles().containsKey(DEFAULT_PROFILE)) + getProfiles().put(DEFAULT_PROFILE, new Profile()); - for (Profile e : getVersions().values()) + for (Profile e : getProfiles().values()) e.checkFormat(); UPDATE_CHECKER = new UpdateChecker(new VersionNumber(Main.firstVer, Main.secondVer, Main.thirdVer), @@ -116,42 +116,42 @@ public final class Settings { } } - public static Profile getVersion(String name) { - return getVersions().get(name); + public static Profile getProfile(String name) { + return getProfiles().get(name); } - public static Map getVersions() { + public static Map getProfiles() { return settings.getConfigurations(); } - public static void setVersion(Profile ver) { - getVersions().put(ver.getName(), ver); + public static void setProfile(Profile ver) { + getProfiles().put(ver.getName(), ver); } - public static Collection getProfiles() { - return CollectionUtils.sortOut(getVersions().values(), (t) -> t != null && t.getName() != null); + public static Collection getProfilesFiltered() { + return CollectionUtils.sortOut(getProfiles().values(), (t) -> t != null && t.getName() != null); } public static Profile getOneProfile() { return settings.getConfigurations().firstEntry().getValue(); } - public static boolean trySetVersion(Profile ver) { - if (ver == null || ver.getName() == null || getVersions().containsKey(ver.getName())) + public static boolean trySetProfile(Profile ver) { + if (ver == null || ver.getName() == null || getProfiles().containsKey(ver.getName())) return false; - getVersions().put(ver.getName(), ver); + getProfiles().put(ver.getName(), ver); return true; } - public static boolean delVersion(Profile ver) { - return delVersion(ver.getName()); + public static boolean delProfile(Profile ver) { + return delProfile(ver.getName()); } - public static boolean delVersion(String ver) { + public static boolean delProfile(String ver) { if (DEFAULT_PROFILE.equals(ver)) { MessageBox.Show(C.i18n("settings.cannot_remove_default_config")); return false; } - return getVersions().remove(ver) != null; + return getProfiles().remove(ver) != null; } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/CrashReporter.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/CrashReporter.java index db4aeffbf..e1313ef38 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/CrashReporter.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/CrashReporter.java @@ -16,14 +16,14 @@ */ package org.jackhuang.hellominecraft.launcher.utils; -import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import javax.swing.SwingUtilities; +import org.jackhuang.hellominecraft.C; import org.jackhuang.hellominecraft.HMCLog; import org.jackhuang.hellominecraft.launcher.Main; -import org.jackhuang.hellominecraft.launcher.launch.MinecraftCrashAdvicer; import org.jackhuang.hellominecraft.utils.NetUtils; import org.jackhuang.hellominecraft.utils.UpdateChecker; import org.jackhuang.hellominecraft.utils.system.MessageBox; @@ -41,18 +41,39 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { public CrashReporter(boolean enableLogger) { this.enableLogger = enableLogger; } + + public boolean checkThrowable(Throwable e) { + String s = StrUtils.getStackTrace(e); + if(s.contains("sun.awt.shell.Win32ShellFolder2") || s.contains("UnsatisfiedLinkError")) { + System.out.println(C.i18n("crash.user_fault")); + try { + MessageBox.Show(C.i18n("crash.user_fault")); + } catch(Throwable t) { + t.printStackTrace(); + } + return false; + } else if(s.contains("java.awt.HeadlessException")) { + System.out.println(C.i18n("crash.headless")); + try { + MessageBox.Show(C.i18n("crash.headless")); + } catch(Throwable t) { + } + } + return true; + } @Override public void uncaughtException(Thread t, Throwable e) { + if (!checkThrowable(e)) return; + String s = StrUtils.getStackTrace(e); + if (!s.contains("org.jackhuang.hellominecraft")) return; try { String text = "\n---- Hello Minecraft! Crash Report ----\n"; - text += " Version: " + Main.makeVersion() + "\n"; - text += " Time: " + DateFormat.getDateInstance().format(new Date()) + "\n"; + text += " Version: " + Main.makeVersion() + "." + Main.forthVer + "\n"; + text += " Time: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\n"; text += " Thread: " + t.toString() + "\n"; - text += "\n Advice: \n "; - text += MinecraftCrashAdvicer.getAdvice(StrUtils.getStackTrace(e), true); text += "\n Content: \n "; - text += StrUtils.getStackTrace(e) + "\n\n"; + text += s + "\n\n"; text += "-- System Details --\n"; text += " Operating System: " + System.getProperty("os.name") + " (" + System.getProperty("os.arch") + ") version " + System.getProperty("os.version") + "\n"; text += " Java Version: " + System.getProperty("java.version") + ", " + System.getProperty("java.vendor") + "\n"; @@ -61,7 +82,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { else System.out.println(text); SwingUtilities.invokeLater(() -> LogWindow.instance.showAsCrashWindow(UpdateChecker.OUT_DATED)); if (!UpdateChecker.OUT_DATED) - reportToServer(text, e); + reportToServer(text, s); } catch (Throwable ex) { try { MessageBox.Show(e.getMessage() + "\n" + ex.getMessage(), "ERROR", MessageBox.ERROR_MESSAGE); @@ -74,10 +95,9 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { private static final HashSet throwableSet = new HashSet<>(); - void reportToServer(String text, Throwable t) { - String s = StrUtils.getStackTrace(t); - if (throwableSet.contains(s)) return; - throwableSet.add(s); + void reportToServer(String text, String stacktrace) { + if (throwableSet.contains(stacktrace)) return; + throwableSet.add(stacktrace); new Thread(() -> { HashMap map = new HashMap<>(); map.put("CrashReport", text); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/FileNameFilter.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/FileNameFilter.java index 2edd61a4d..197fc80e8 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/FileNameFilter.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/FileNameFilter.java @@ -18,6 +18,7 @@ package org.jackhuang.hellominecraft.launcher.utils; import java.io.File; import javax.swing.filechooser.FileFilter; +import org.jackhuang.hellominecraft.utils.system.FileUtils; /** * @@ -33,7 +34,7 @@ public class FileNameFilter extends FileFilter { @Override public boolean accept(File f) { - return f.isDirectory() || f.getName().equals(acceptedName); + return f.isDirectory() || f.getName().equals(acceptedName) && !FileUtils.getExtension(f.getName()).equals("lnk"); } @Override diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java index 9f323be57..4ad7d2f8f 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java @@ -21,7 +21,6 @@ import com.google.gson.JsonSyntaxException; import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -283,6 +282,7 @@ public final class MinecraftVersionManager extends IMinecraftProvider { @Override public GameLauncher.DecompressLibraryJob getDecompressLibraries() { MinecraftVersion v = profile.getSelectedMinecraftVersion().resolve(this, Settings.getInstance().getDownloadSource()); + if (v.libraries == null) return null; ArrayList unzippings = new ArrayList<>(); ArrayList extractRules = new ArrayList<>(); for (IMinecraftLibrary l : v.libraries) { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/GameSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/GameSettingsPanel.java index 7f4e6cfa1..c8e27c05e 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/GameSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/GameSettingsPanel.java @@ -1102,7 +1102,7 @@ btnRefreshLiteLoader.addActionListener(new java.awt.event.ActionListener() { private void btnRemoveProfileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRemoveProfileActionPerformed if (profile == null) return; if (MessageBox.Show(C.i18n("ui.message.sure_remove", profile.getName()), MessageBox.YES_NO_OPTION) == MessageBox.NO_OPTION) return; - if (Settings.delVersion(profile)) { + if (Settings.delProfile(profile)) { cboProfiles.removeItem(profile.getName()); profile = Settings.getOneProfile(); if (profile != null) { @@ -1218,7 +1218,7 @@ btnRefreshLiteLoader.addActionListener(new java.awt.event.ActionListener() { MessageBox.Show(C.i18n("setupwindow.no_empty_name")); return; } - Settings.trySetVersion(new Profile(name).setGameDir(newGameDir.getAbsolutePath())); + Settings.trySetProfile(new Profile(name).setGameDir(newGameDir.getAbsolutePath())); MessageBox.Show(C.i18n("setupwindow.find_in_configurations")); loadProfiles(); } @@ -1438,7 +1438,7 @@ btnRefreshLiteLoader.addActionListener(new java.awt.event.ActionListener() { cboProfiles.removeAllItems(); Profile firstProfile = null, selectedProfile = null; int index = 0, i = 0; - for (Profile s : Settings.getProfiles()) { + for (Profile s : Settings.getProfilesFiltered()) { if (firstProfile == null) firstProfile = s; cboProfiles.addItem(s.getName()); if (Settings.getInstance().getLast() != null && Settings.getInstance().getLast().equals(s.getName())) { @@ -1461,7 +1461,7 @@ btnRefreshLiteLoader.addActionListener(new java.awt.event.ActionListener() { final Profile getProfile() { if (cboProfiles.getSelectedIndex() >= 0) - return Settings.getVersion(cboProfiles.getSelectedItem().toString()); + return Settings.getProfile(cboProfiles.getSelectedItem().toString()); else return null; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java index 8b09e41ed..069f5416d 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java @@ -379,7 +379,7 @@ public class MainPagePanel extends javax.swing.JPanel { }//GEN-LAST:event_txtPasswordKeyPressed boolean isLaunching = false; - + // void genLaunchCode(final Consumer listener) { if (isLaunching) return; @@ -443,7 +443,7 @@ public class MainPagePanel extends javax.swing.JPanel { int loginType = Settings.getInstance().getLoginType(); if (0 <= loginType && loginType < cboLoginMode.getItemCount()) { preaparingAuth = false; - + cboLoginMode.setSelectedIndex(loginType); cboLoginModeItemStateChanged(null); @@ -451,7 +451,7 @@ public class MainPagePanel extends javax.swing.JPanel { } void loadFromSettings() { - for (Profile s : Settings.getProfiles()) cboProfiles.addItem(s.getName()); + for (Profile s : Settings.getProfilesFiltered()) cboProfiles.addItem(s.getName()); } boolean showedNoVersion = false; @@ -460,23 +460,25 @@ public class MainPagePanel extends javax.swing.JPanel { isLoading = true; cboVersions.removeAllItems(); int index = 0, i = 0; - getCurrentProfile().getMinecraftProvider().refreshVersions(); - MinecraftVersion selVersion = getCurrentProfile().getSelectedMinecraftVersion(); - String selectedMC = selVersion == null ? null : selVersion.id; - if (getCurrentProfile().getMinecraftProvider().getVersions().isEmpty()) { - if (!showedNoVersion) - SwingUtilities.invokeLater(() -> { - MessageBox.Show(C.i18n("mainwindow.no_version")); - showedNoVersion = true; - }); - } else { - for (MinecraftVersion mcVersion : getCurrentProfile().getMinecraftProvider().getVersions()) { - if (mcVersion.hidden) continue; - cboVersions.addItem(mcVersion.id); - if (mcVersion.id.equals(selectedMC)) index = i; - i++; + if (getCurrentProfile() != null) { + getCurrentProfile().getMinecraftProvider().refreshVersions(); + MinecraftVersion selVersion = getCurrentProfile().getSelectedMinecraftVersion(); + String selectedMC = selVersion == null ? null : selVersion.id; + if (getCurrentProfile().getMinecraftProvider().getVersions().isEmpty()) { + if (!showedNoVersion) + SwingUtilities.invokeLater(() -> { + MessageBox.Show(C.i18n("mainwindow.no_version")); + showedNoVersion = true; + }); + } else { + for (MinecraftVersion mcVersion : getCurrentProfile().getMinecraftProvider().getVersions()) { + if (mcVersion.hidden) continue; + cboVersions.addItem(mcVersion.id); + if (mcVersion.id.equals(selectedMC)) index = i; + i++; + } + if (index < cboVersions.getItemCount()) cboVersions.setSelectedIndex(index); } - if (index < cboVersions.getItemCount()) cboVersions.setSelectedIndex(index); } isLoading = false; } @@ -533,7 +535,7 @@ public class MainPagePanel extends javax.swing.JPanel { } public Profile getCurrentProfile() { - return Settings.getVersion((String) cboProfiles.getSelectedItem()); + return Settings.getProfile((String) cboProfiles.getSelectedItem()); } public void onSelected() { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/NewProfileWindow.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/NewProfileWindow.java index d3b19ac74..17984589d 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/NewProfileWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/NewProfileWindow.java @@ -32,7 +32,7 @@ public final class NewProfileWindow extends javax.swing.JDialog { setLocationRelativeTo(null); - for (Profile s : Settings.getProfiles()) + for (Profile s : Settings.getProfilesFiltered()) cboProfiles.addItem(s.getName()); } @@ -126,9 +126,9 @@ public final class NewProfileWindow extends javax.swing.JDialog { private void txtNewProfileNameKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNewProfileNameKeyTyped switch (evt.getKeyCode()) { case 13: - Profile newProfile = new Profile(Settings.getVersion(cboProfiles.getSelectedItem().toString())); + Profile newProfile = new Profile(Settings.getProfile(cboProfiles.getSelectedItem().toString())); newProfile.setName(txtNewProfileName.getText()); - Settings.trySetVersion(newProfile); + Settings.trySetProfile(newProfile); case 27: this.dispose(); } @@ -136,9 +136,9 @@ public final class NewProfileWindow extends javax.swing.JDialog { private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOKActionPerformed if (!StrUtils.isBlank(txtNewProfileName.getText())) { - Profile newProfile = new Profile(Settings.getVersion(cboProfiles.getSelectedItem().toString())); + Profile newProfile = new Profile(Settings.getProfile(cboProfiles.getSelectedItem().toString())); newProfile.setName(txtNewProfileName.getText()); - Settings.trySetVersion(newProfile); + Settings.trySetProfile(newProfile); } this.dispose(); }//GEN-LAST:event_btnOKActionPerformed diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/SwingUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/SwingUtils.java index 399764e80..5a6e3b65f 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/SwingUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/SwingUtils.java @@ -19,6 +19,7 @@ package org.jackhuang.hellominecraft.utils; import java.awt.FontMetrics; import java.net.URI; import javax.swing.DefaultListModel; +import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollBar; @@ -169,5 +170,4 @@ public class SwingUtils { } return builder.toString(); } - } diff --git a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N.properties b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N.properties index 09144542e..a1067a4f4 100644 --- a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N.properties +++ b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N.properties @@ -114,6 +114,9 @@ crash.advice.no_lwjgl=\u53ef\u80fd\u662f\u6e38\u620f\u4f9d\u8d56\u5e93\u4e0d\u5b crash.advice.no=\u65e0\u5efa\u8bae\u3002 +crash.user_fault=\u60a8\u7684\u7cfb\u7edf\u6216Java\u73af\u5883\u53ef\u80fd\u5b89\u88c5\u4e0d\u5f53\u5bfc\u81f4\u672c\u8f6f\u4ef6\u5d29\u6e83\uff0c\u8bf7\u68c0\u67e5\u60a8\u7684Java\u73af\u5883\u6216\u60a8\u7684\u7535\u8111\uff01\u53ef\u4ee5\u5c1d\u8bd5\u91cd\u65b0\u5b89\u88c5Java\u3002 +crash.headless=\u5982\u679c\u60a8\u7684\u64cd\u4f5c\u7cfb\u7edf\u662fLinux\uff0c\u8bf7\u6ce8\u610f\u4e0d\u8981\u4f7f\u7528OpenJDK\uff0c\u52a1\u5fc5\u4f7f\u7528Oracle JDK\uff0c\u6216\u5c1d\u8bd5\u6dfb\u52a0-Djava.awt.headless=false\u53c2\u6570\uff0c\u6216\u68c0\u67e5\u60a8\u7684Xserver\u662f\u5426\u6b63\u5e38 + crash.error=\u60a8\u7684Minecraft\u5d29\u6e83\u4e86\u3002 crash.main_class_not_found=\u627e\u4e0d\u5230\u4e3b\u7c7b\uff0c\u53ef\u80fd\u662f\u60a8\u7684JSON\u6587\u4ef6\u586b\u5199\u9519\u8bef\u3002\u65e0\u6cd5\u542f\u52a8\u6e38\u620f\u3002\u53ef\u4ee5\u901a\u8fc7\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 crash.class_path_wrong=\u89e3\u6790Class Path\u65f6\u51fa\u73b0\u9519\u8bef\uff0c\u6b64\u9519\u8bef\u672c\u4e0d\u5e94\u8be5\u53d1\u751f\u3002\u53ef\u80fd\u662f\u542f\u52a8\u811a\u672c\u9519\u8bef\uff0c\u8bf7\u4ed4\u7ec6\u68c0\u67e5\u542f\u52a8\u811a\u672c\u3002 diff --git a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_en_US.properties b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_en_US.properties index 076f1111b..7e7d181ed 100644 --- a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_en_US.properties +++ b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_en_US.properties @@ -114,6 +114,9 @@ crash.advice.no_lwjgl=Maybe drivers caused problems. crash.advice.no=No advice. +crash.user_fault=Your OS or Java environment may not be properly installed resulting in crashing of this software, please check your Java Environment or your computer! +crash.headless=If your OS is Linux, please use Oracle JDK instead of OpenJDK, or add "-Djava.awt.headless=false" JVM argument, or check if your Xserver works normally. + crash.error=Minecraft has crashed. crash.main_class_not_found=Main Class is not found, may be your mc has been broken. crash.class_path_wrong=Maybe the launch script is malformed. diff --git a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_CN.properties b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_CN.properties index 09144542e..a1067a4f4 100644 --- a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_CN.properties +++ b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_CN.properties @@ -114,6 +114,9 @@ crash.advice.no_lwjgl=\u53ef\u80fd\u662f\u6e38\u620f\u4f9d\u8d56\u5e93\u4e0d\u5b crash.advice.no=\u65e0\u5efa\u8bae\u3002 +crash.user_fault=\u60a8\u7684\u7cfb\u7edf\u6216Java\u73af\u5883\u53ef\u80fd\u5b89\u88c5\u4e0d\u5f53\u5bfc\u81f4\u672c\u8f6f\u4ef6\u5d29\u6e83\uff0c\u8bf7\u68c0\u67e5\u60a8\u7684Java\u73af\u5883\u6216\u60a8\u7684\u7535\u8111\uff01\u53ef\u4ee5\u5c1d\u8bd5\u91cd\u65b0\u5b89\u88c5Java\u3002 +crash.headless=\u5982\u679c\u60a8\u7684\u64cd\u4f5c\u7cfb\u7edf\u662fLinux\uff0c\u8bf7\u6ce8\u610f\u4e0d\u8981\u4f7f\u7528OpenJDK\uff0c\u52a1\u5fc5\u4f7f\u7528Oracle JDK\uff0c\u6216\u5c1d\u8bd5\u6dfb\u52a0-Djava.awt.headless=false\u53c2\u6570\uff0c\u6216\u68c0\u67e5\u60a8\u7684Xserver\u662f\u5426\u6b63\u5e38 + crash.error=\u60a8\u7684Minecraft\u5d29\u6e83\u4e86\u3002 crash.main_class_not_found=\u627e\u4e0d\u5230\u4e3b\u7c7b\uff0c\u53ef\u80fd\u662f\u60a8\u7684JSON\u6587\u4ef6\u586b\u5199\u9519\u8bef\u3002\u65e0\u6cd5\u542f\u52a8\u6e38\u620f\u3002\u53ef\u4ee5\u901a\u8fc7\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 crash.class_path_wrong=\u89e3\u6790Class Path\u65f6\u51fa\u73b0\u9519\u8bef\uff0c\u6b64\u9519\u8bef\u672c\u4e0d\u5e94\u8be5\u53d1\u751f\u3002\u53ef\u80fd\u662f\u542f\u52a8\u811a\u672c\u9519\u8bef\uff0c\u8bf7\u4ed4\u7ec6\u68c0\u67e5\u542f\u52a8\u811a\u672c\u3002 diff --git a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_TW.properties b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_TW.properties index b4f16c67b..b388c8dfd 100644 --- a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_TW.properties +++ b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_TW.properties @@ -114,6 +114,9 @@ crash.advice.no_lwjgl=\u53ef\u80fd\u662f\u904a\u6232\u4f9d\u8cf4\u5eab\u4e0d\u5b crash.advice.no=\u7121\u5efa\u8b70\u3002 +crash.user_fault=\u60a8\u7684\u7cfb\u7d71\u6216Java\u74b0\u5883\u53ef\u80fd\u5b89\u88dd\u4e0d\u7576\u5c0e\u81f4\u672c\u8edf\u4ef6\u5d29\u6f70\uff0c\u8acb\u6aa2\u67e5\u60a8\u7684Java\u74b0\u5883\u6216\u60a8\u7684\u96fb\u8166\uff01\u53ef\u4ee5\u5617\u8a66\u91cd\u65b0\u5b89\u88ddJava\u3002 +crash.headless=\u5982\u679c\u60a8\u7684\u64cd\u4f5c\u7cfb\u7d71\u662fLinux\uff0c\u8acb\u6ce8\u610f\u4e0d\u8981\u4f7f\u7528OpenJDK\uff0c\u52d9\u5fc5\u4f7f\u7528Oracle JDK\uff0c\u6216\u5617\u8a66\u6dfb\u52a0-Djava.awt.headless=false\u53c3\u6578\uff0c\u6216\u6aa2\u67e5\u60a8\u7684Xserver\u662f\u5426\u6b63\u5e38 + crash.error=\u60a8\u7684Minecraft\u5d29\u6f70\u4e86\u3002 crash.main_class_not_found=\u627e\u4e0d\u5230\u4e3b\u985e\uff0c\u53ef\u80fd\u662f\u60a8\u7684JSON\u6587\u4ef6\u586b\u5beb\u932f\u8aa4\u3002\u7121\u6cd5\u555f\u52d5\u904a\u6232\u3002\u53ef\u4ee5\u901a\u904e\u4e0b\u8f09\u6574\u5408\u5305\u89e3\u6c7a\u554f\u984c\u3002 crash.class_path_wrong=\u89e3\u6790Class Path\u6642\u51fa\u73fe\u932f\u8aa4\uff0c\u6b64\u932f\u8aa4\u672c\u4e0d\u61c9\u8a72\u767c\u751f\u3002\u53ef\u80fd\u662f\u555f\u52d5\u8173\u672c\u932f\u8aa4\uff0c\u8acb\u4ed4\u7d30\u6aa2\u67e5\u555f\u52d5\u8173\u672c\u3002