Compare commits
22
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a230ef6b5 | ||
|
|
c12ae9fdf8 | ||
|
|
773ef4282c | ||
|
|
9edfe29659 | ||
|
|
5591d92e25 | ||
|
|
65bdb29e71 | ||
|
|
355df211db | ||
|
|
fa66549f53 | ||
|
|
6e48dbd6c6 | ||
|
|
e3c7278759 | ||
|
|
dd1829d8ca | ||
|
|
60ac16a3ea | ||
|
|
b400a9a3ef | ||
|
|
c7cc2d0733 | ||
|
|
861223e909 | ||
|
|
70ecbc734e | ||
|
|
2ca7e7c830 | ||
|
|
9a0db56ac3 | ||
|
|
c1ae5875ba | ||
|
|
1d0ae427bf | ||
|
|
3dde2d19e2 | ||
|
|
d5ec6d7b85 |
No files matched your search
@@ -54,12 +54,14 @@ jobs:
|
||||
echo "" >> RELEASE_NOTE
|
||||
echo "| File Name | SHA-256 Checksum |" >> RELEASE_NOTE
|
||||
echo "| --- | --- |" >> RELEASE_NOTE
|
||||
echo "| HMCL-$HMCL_VERSION.exe | $(cat HMCL-$HMCL_VERSION.exe.sha256) |" >> RELEASE_NOTE
|
||||
echo "| HMCL-$HMCL_VERSION.jar | $(cat HMCL-$HMCL_VERSION.jar.sha256) |" >> RELEASE_NOTE
|
||||
echo "| HMCL-$HMCL_VERSION.sh | $(cat HMCL-$HMCL_VERSION.sh.sha256) |" >> RELEASE_NOTE
|
||||
echo "| [HMCL-$HMCL_VERSION.exe]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.exe) | $(cat HMCL-$HMCL_VERSION.exe.sha256) |" >> RELEASE_NOTE
|
||||
echo "| [HMCL-$HMCL_VERSION.jar]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.jar) | $(cat HMCL-$HMCL_VERSION.jar.sha256) |" >> RELEASE_NOTE
|
||||
echo "| [HMCL-$HMCL_VERSION.sh]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.sh) | $(cat HMCL-$HMCL_VERSION.sh.sha256) |" >> RELEASE_NOTE
|
||||
env:
|
||||
GH_DOWNLOAD_BASE_URL: https://github.com/HMCL-dev/HMCL/releases/download
|
||||
- name: Create release
|
||||
if: ${{ env.continue == 'true' }}
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
body_path: RELEASE_NOTE
|
||||
files: |
|
||||
@@ -69,6 +71,7 @@ jobs:
|
||||
target_commitish: ${{ env.HMCL_COMMIT_SHA }}
|
||||
name: ${{ env.HMCL_TAG_NAME }}
|
||||
tag_name: ${{ env.HMCL_TAG_NAME }}
|
||||
prerelease: ture
|
||||
stable-check-update:
|
||||
if: ${{ github.repository_owner == 'HMCL-dev' }}
|
||||
needs: dev-check-update
|
||||
@@ -118,12 +121,14 @@ jobs:
|
||||
echo "" >> RELEASE_NOTE
|
||||
echo "| File Name | SHA-256 Checksum |" >> RELEASE_NOTE
|
||||
echo "| --- | --- |" >> RELEASE_NOTE
|
||||
echo "| HMCL-$HMCL_VERSION.exe | $(cat HMCL-$HMCL_VERSION.exe.sha256) |" >> RELEASE_NOTE
|
||||
echo "| HMCL-$HMCL_VERSION.jar | $(cat HMCL-$HMCL_VERSION.jar.sha256) |" >> RELEASE_NOTE
|
||||
echo "| HMCL-$HMCL_VERSION.sh | $(cat HMCL-$HMCL_VERSION.sh.sha256) |" >> RELEASE_NOTE
|
||||
echo "| [HMCL-$HMCL_VERSION.exe]($GH_DOWNLOAD_BASE_URL/release-$HMCL_VERSION/HMCL-$HMCL_VERSION.exe) | $(cat HMCL-$HMCL_VERSION.exe.sha256) |" >> RELEASE_NOTE
|
||||
echo "| [HMCL-$HMCL_VERSION.jar]($GH_DOWNLOAD_BASE_URL/release-$HMCL_VERSION/HMCL-$HMCL_VERSION.jar) | $(cat HMCL-$HMCL_VERSION.jar.sha256) |" >> RELEASE_NOTE
|
||||
echo "| [HMCL-$HMCL_VERSION.sh]($GH_DOWNLOAD_BASE_URL/release-$HMCL_VERSION/HMCL-$HMCL_VERSION.sh) | $(cat HMCL-$HMCL_VERSION.sh.sha256) |" >> RELEASE_NOTE
|
||||
env:
|
||||
GH_DOWNLOAD_BASE_URL: https://github.com/HMCL-dev/HMCL/releases/download
|
||||
- name: Create release
|
||||
if: ${{ env.continue == 'true' }}
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
body_path: RELEASE_NOTE
|
||||
files: |
|
||||
|
||||
@@ -25,7 +25,7 @@ val buildNumber = System.getenv("BUILD_NUMBER")?.toInt().let { number ->
|
||||
if (!shortCommit.isNullOrEmpty()) "$prefix-$shortCommit" else "SNAPSHOT"
|
||||
}
|
||||
}
|
||||
val versionRoot = System.getenv("VERSION_ROOT") ?: "3.5"
|
||||
val versionRoot = System.getenv("VERSION_ROOT") ?: "3.6"
|
||||
val versionType = System.getenv("VERSION_TYPE") ?: if (isOfficial) "nightly" else "unofficial"
|
||||
|
||||
val microsoftAuthId = System.getenv("MICROSOFT_AUTH_ID") ?: ""
|
||||
|
||||
@@ -36,10 +36,14 @@ import org.jackhuang.hmcl.mod.ModpackProvider;
|
||||
import org.jackhuang.hmcl.setting.*;
|
||||
import org.jackhuang.hmcl.task.*;
|
||||
import org.jackhuang.hmcl.ui.*;
|
||||
import org.jackhuang.hmcl.ui.construct.*;
|
||||
import org.jackhuang.hmcl.ui.construct.DialogCloseEvent;
|
||||
import org.jackhuang.hmcl.ui.construct.MessageDialogPane;
|
||||
import org.jackhuang.hmcl.ui.construct.MessageDialogPane.MessageType;
|
||||
import org.jackhuang.hmcl.ui.construct.PromptDialogPane;
|
||||
import org.jackhuang.hmcl.ui.construct.TaskExecutorDialogPane;
|
||||
import org.jackhuang.hmcl.util.*;
|
||||
import org.jackhuang.hmcl.util.i18n.I18n;
|
||||
import org.jackhuang.hmcl.util.io.FileUtils;
|
||||
import org.jackhuang.hmcl.util.io.ResponseCodeException;
|
||||
import org.jackhuang.hmcl.util.platform.*;
|
||||
import org.jackhuang.hmcl.util.versioning.GameVersionNumber;
|
||||
@@ -60,9 +64,10 @@ import static javafx.application.Platform.runLater;
|
||||
import static javafx.application.Platform.setImplicitExit;
|
||||
import static org.jackhuang.hmcl.ui.FXUtils.runInFX;
|
||||
import static org.jackhuang.hmcl.util.Lang.resolveException;
|
||||
import static org.jackhuang.hmcl.util.logging.Logger.LOG;
|
||||
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||
import static org.jackhuang.hmcl.util.platform.Platform.*;
|
||||
import static org.jackhuang.hmcl.util.logging.Logger.LOG;
|
||||
import static org.jackhuang.hmcl.util.platform.Platform.SYSTEM_PLATFORM;
|
||||
import static org.jackhuang.hmcl.util.platform.Platform.isCompatibleWithX86Java;
|
||||
|
||||
public final class LauncherHelper {
|
||||
|
||||
@@ -178,6 +183,9 @@ public final class LauncherHelper {
|
||||
.thenComposeAsync(() -> logIn(account).withStage("launch.state.logging_in"))
|
||||
.thenComposeAsync(authInfo -> Task.supplyAsync(() -> {
|
||||
LaunchOptions launchOptions = repository.getLaunchOptions(selectedVersion, javaVersionRef.get(), profile.getGameDir(), javaAgents, scriptFile != null);
|
||||
|
||||
LOG.info("Here's the structure of game mod directory:\n" + FileUtils.printFileStructure(repository.getModManager(selectedVersion).getModsDirectory(), 10));
|
||||
|
||||
return new HMCLGameLauncher(
|
||||
repository,
|
||||
version.get(),
|
||||
@@ -522,6 +530,9 @@ public final class LauncherHelper {
|
||||
case MODDED_JAVA_17:
|
||||
suggestions.add(i18n("launch.advice.modded_java", 17, gameVersion));
|
||||
break;
|
||||
case MODDED_JAVA_21:
|
||||
suggestions.add(i18n("launch.advice.modded_java", 21, gameVersion));
|
||||
break;
|
||||
case VANILLA_JAVA_8_51:
|
||||
suggestions.add(i18n("launch.advice.java8_51_1_13"));
|
||||
break;
|
||||
|
||||
@@ -59,6 +59,7 @@ public enum SVG {
|
||||
ALERT_OUTLINE("M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16"),
|
||||
PLUS("M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z"),
|
||||
PLUS_CIRCLE_OUTLINE("M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M13,7H11V11H7V13H11V17H13V13H17V11H13V7Z"),
|
||||
MINUS("M19 13H5V11H19V13Z"),
|
||||
IMPORT_ICON("M14,12L10,8V11H2V13H10V16M20,18V6C20,4.89 19.1,4 18,4H6A2,2 0 0,0 4,6V9H6V6H18V18H6V15H4V18A2,2 0 0,0 6,20H18A2,2 0 0,0 20,18Z"),
|
||||
EXPORT("M23,12L19,8V11H10V13H19V16M1,18V6C1,4.89 1.9,4 3,4H15A2,2 0 0,1 17,6V9H15V6H3V18H15V15H17V18A2,2 0 0,1 15,20H3A2,2 0 0,1 1,18Z"),
|
||||
OPEN_IN_NEW("M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z"),
|
||||
|
||||
@@ -17,7 +17,6 @@ import javafx.scene.layout.Priority;
|
||||
import org.jackhuang.hmcl.setting.Theme;
|
||||
import org.jackhuang.hmcl.ui.FXUtils;
|
||||
import org.jackhuang.hmcl.ui.SVG;
|
||||
import org.jackhuang.hmcl.util.Lazy;
|
||||
import org.jackhuang.hmcl.util.StringUtils;
|
||||
|
||||
public class IconedTwoLineListItem extends HBox {
|
||||
@@ -29,13 +28,8 @@ public class IconedTwoLineListItem extends HBox {
|
||||
|
||||
private final ImageView imageView = new ImageView();
|
||||
private final TwoLineListItem twoLineListItem = new TwoLineListItem();
|
||||
private final Lazy<JFXButton> externalLinkButton = new Lazy<>(() -> {
|
||||
JFXButton button = new JFXButton();
|
||||
button.getStyleClass().add("toggle-icon4");
|
||||
button.setGraphic(SVG.OPEN_IN_NEW.createIcon(Theme.blackFill(), -1, -1));
|
||||
button.setOnAction(e -> FXUtils.openLink(externalLink.get()));
|
||||
return button;
|
||||
});
|
||||
private JFXButton externalLinkButton;
|
||||
|
||||
@SuppressWarnings("FieldCanBeLocal")
|
||||
private final InvalidationListener observer;
|
||||
|
||||
@@ -52,7 +46,7 @@ public class IconedTwoLineListItem extends HBox {
|
||||
getChildren().clear();
|
||||
if (image.get() != null) getChildren().add(imageView);
|
||||
getChildren().add(twoLineListItem);
|
||||
if (StringUtils.isNotBlank(externalLink.get())) getChildren().add(externalLinkButton.get());
|
||||
if (StringUtils.isNotBlank(externalLink.get())) getChildren().add(getExternalLinkButton());
|
||||
}, image, externalLink);
|
||||
}
|
||||
|
||||
@@ -111,4 +105,14 @@ public class IconedTwoLineListItem extends HBox {
|
||||
public ImageView getImageView() {
|
||||
return imageView;
|
||||
}
|
||||
|
||||
public JFXButton getExternalLinkButton() {
|
||||
if (externalLinkButton == null) {
|
||||
externalLinkButton = new JFXButton();
|
||||
externalLinkButton.getStyleClass().add("toggle-icon4");
|
||||
externalLinkButton.setGraphic(SVG.OPEN_IN_NEW.createIcon(Theme.blackFill(), -1, -1));
|
||||
externalLinkButton.setOnAction(e -> FXUtils.openLink(externalLink.get()));
|
||||
}
|
||||
return externalLinkButton;
|
||||
}
|
||||
}
|
||||
@@ -18,10 +18,8 @@
|
||||
package org.jackhuang.hmcl.ui.decorator;
|
||||
|
||||
import com.jfoenix.controls.JFXButton;
|
||||
import com.jfoenix.svg.SVGGlyph;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.collections.ListChangeListener;
|
||||
import javafx.css.PseudoClass;
|
||||
import javafx.geometry.Bounds;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Pos;
|
||||
@@ -44,13 +42,8 @@ import org.jackhuang.hmcl.ui.animation.AnimationProducer;
|
||||
import org.jackhuang.hmcl.ui.animation.ContainerAnimations;
|
||||
import org.jackhuang.hmcl.ui.animation.TransitionPane;
|
||||
import org.jackhuang.hmcl.ui.wizard.Navigation;
|
||||
import org.jackhuang.hmcl.util.Lang;
|
||||
|
||||
public class DecoratorSkin extends SkinBase<Decorator> {
|
||||
private static final PseudoClass TRANSPARENT = PseudoClass.getPseudoClass("transparent");
|
||||
private static final SVGGlyph minus = Lang.apply(new SVGGlyph(0, "MINUS", "M804.571 420.571v109.714q0 22.857-16 38.857t-38.857 16h-694.857q-22.857 0-38.857-16t-16-38.857v-109.714q0-22.857 16-38.857t38.857-16h694.857q22.857 0 38.857 16t16 38.857z", Color.WHITE),
|
||||
glyph -> { glyph.setSize(12, 2); glyph.setTranslateY(4); });
|
||||
|
||||
private final StackPane root, parent;
|
||||
private final StackPane titleContainer;
|
||||
private final Stage primaryStage;
|
||||
@@ -69,8 +62,6 @@ public class DecoratorSkin extends SkinBase<Decorator> {
|
||||
|
||||
primaryStage = control.getPrimaryStage();
|
||||
|
||||
minus.fillProperty().bind(Theme.foregroundFillBinding());
|
||||
|
||||
Decorator skinnable = getSkinnable();
|
||||
root = new StackPane();
|
||||
root.getStyleClass().add("window");
|
||||
@@ -202,9 +193,7 @@ public class DecoratorSkin extends SkinBase<Decorator> {
|
||||
btnHelp.setOnAction(e -> FXUtils.openLink("https://docs.hmcl.net/help.html"));
|
||||
|
||||
JFXButton btnMin = new JFXButton();
|
||||
StackPane pane = new StackPane(minus);
|
||||
pane.setAlignment(Pos.CENTER);
|
||||
btnMin.setGraphic(pane);
|
||||
btnMin.setGraphic(SVG.MINUS.createIcon(Theme.foregroundFillBinding(), -1, -1));
|
||||
btnMin.getStyleClass().add("jfx-decorator-button");
|
||||
btnMin.setOnAction(e -> skinnable.minimize());
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ public final class VersionsPage extends BorderPane implements WizardPage, Refres
|
||||
btnRefresh.setGraphic(wrap(SVG.REFRESH.createIcon(Theme.blackFill(), -1, -1)));
|
||||
|
||||
Holder<RemoteVersionListCell> lastCell = new Holder<>();
|
||||
list.setCellFactory(listView -> new RemoteVersionListCell(lastCell));
|
||||
list.setCellFactory(listView -> new RemoteVersionListCell(lastCell, libraryId));
|
||||
|
||||
FXUtils.onClicked(list, () -> {
|
||||
if (list.getSelectionModel().getSelectedIndex() < 0)
|
||||
@@ -272,8 +272,12 @@ public final class VersionsPage extends BorderPane implements WizardPage, Refres
|
||||
|
||||
private final Holder<RemoteVersionListCell> lastCell;
|
||||
|
||||
RemoteVersionListCell(Holder<RemoteVersionListCell> lastCell) {
|
||||
RemoteVersionListCell(Holder<RemoteVersionListCell> lastCell, String libraryId) {
|
||||
this.lastCell = lastCell;
|
||||
if ("game".equals(libraryId)) {
|
||||
content.getExternalLinkButton().setGraphic(SVG.EARTH.createIcon(Theme.blackFill(), -1, -1));
|
||||
FXUtils.installFastTooltip(content.getExternalLinkButton(), i18n("wiki.tooltip"));
|
||||
}
|
||||
|
||||
pane.getStyleClass().add("md-list-cell");
|
||||
StackPane.setMargin(content, new Insets(10, 16, 10, 16));
|
||||
@@ -307,14 +311,19 @@ public final class VersionsPage extends BorderPane implements WizardPage, Refres
|
||||
case RELEASE:
|
||||
content.getTags().setAll(i18n("version.game.release"));
|
||||
content.setImage(VersionIconType.GRASS.getIcon());
|
||||
content.setExternalLink(i18n("wiki.version.game.release", remoteVersion.getGameVersion()));
|
||||
break;
|
||||
case SNAPSHOT:
|
||||
content.getTags().setAll(i18n("version.game.snapshot"));
|
||||
content.setImage(VersionIconType.COMMAND.getIcon());
|
||||
|
||||
|
||||
content.setExternalLink(i18n("wiki.version.game.snapshot", remoteVersion.getGameVersion()));
|
||||
break;
|
||||
default:
|
||||
content.getTags().setAll(i18n("version.game.old"));
|
||||
content.setImage(VersionIconType.CRAFT_TABLE.getIcon());
|
||||
content.setExternalLink(null);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
@@ -339,6 +348,7 @@ public final class VersionsPage extends BorderPane implements WizardPage, Refres
|
||||
content.setSubtitle(remoteVersion.getGameVersion());
|
||||
else
|
||||
content.getTags().setAll(remoteVersion.getGameVersion());
|
||||
content.setExternalLink(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||
import static org.jackhuang.hmcl.util.logging.Logger.LOG;
|
||||
@@ -116,7 +117,7 @@ public final class AboutPage extends StackPane {
|
||||
return componentList;
|
||||
}
|
||||
|
||||
try (Reader reader = new InputStreamReader(input)) {
|
||||
try (Reader reader = new InputStreamReader(input, StandardCharsets.UTF_8)) {
|
||||
JsonArray array = JsonUtils.GSON.fromJson(reader, JsonArray.class);
|
||||
|
||||
for (JsonElement element : array) {
|
||||
|
||||
@@ -192,7 +192,7 @@ public final class ModListPage extends ListPageBase<ModListPageSkin.ModInfoObjec
|
||||
})
|
||||
.whenComplete(Schedulers.javafx(), (result, exception) -> {
|
||||
if (exception != null || result == null) {
|
||||
Controllers.dialog("Failed to check updates", "failed", MessageDialogPane.MessageType.ERROR);
|
||||
Controllers.dialog(i18n("mods.check_updates.failed_check"), i18n("message.failed"), MessageDialogPane.MessageType.ERROR);
|
||||
} else if (result.isEmpty()) {
|
||||
Controllers.dialog(i18n("mods.check_updates.empty"));
|
||||
} else {
|
||||
|
||||
@@ -139,7 +139,7 @@ public class ModUpdatesPage extends BorderPane implements DecoratorPage {
|
||||
task.whenComplete(Schedulers.javafx(), exception -> {
|
||||
fireEvent(new PageCloseEvent());
|
||||
if (!task.getFailedMods().isEmpty()) {
|
||||
Controllers.dialog(i18n("mods.check_updates.failed") + "\n" +
|
||||
Controllers.dialog(i18n("mods.check_updates.failed_download") + "\n" +
|
||||
task.getFailedMods().stream().map(LocalModFile::getFileName).collect(Collectors.joining("\n")),
|
||||
i18n("install.failed"),
|
||||
MessageDialogPane.MessageType.ERROR);
|
||||
|
||||
@@ -83,7 +83,7 @@ public final class Versions {
|
||||
} catch (IOException e) {
|
||||
Controllers.dialog(
|
||||
i18n("install.failed.downloading.detail", file.getFile().getUrl()) + "\n" + StringUtils.getStackTrace(e),
|
||||
i18n("download.failed.no_code", file.getFile().getUrl()), MessageDialogPane.MessageType.ERROR);
|
||||
i18n("download.failed.no_code"), MessageDialogPane.MessageType.ERROR);
|
||||
return;
|
||||
}
|
||||
Controllers.taskDialog(
|
||||
@@ -96,7 +96,7 @@ public final class Versions {
|
||||
} else {
|
||||
Controllers.dialog(
|
||||
i18n("install.failed.downloading.detail", file.getFile().getUrl()) + "\n" + StringUtils.getStackTrace(e),
|
||||
i18n("download.failed.no_code", file.getFile().getUrl()), MessageDialogPane.MessageType.ERROR);
|
||||
i18n("download.failed.no_code"), MessageDialogPane.MessageType.ERROR);
|
||||
}
|
||||
}).executor(true),
|
||||
i18n("message.downloading"),
|
||||
|
||||
@@ -58,18 +58,18 @@ account.create.microsoft=Add a Microsoft Account
|
||||
account.create.offline=Add an Offline Account
|
||||
account.create.authlibInjector=Add an authlib-injector Account
|
||||
account.email=Email
|
||||
account.failed=Account refresh failed.
|
||||
account.failed=Failed to refresh account.
|
||||
account.failed.character_deleted=The player has already been deleted.
|
||||
account.failed.connect_authentication_server=Unable to connect to the authentication server, your network connection may be down.
|
||||
account.failed.connect_injector_server=Unable to connect to the authentication server. Please check your network and make sure you entered the correct URL.
|
||||
account.failed.injector_download_failure=Unable to download the authlib-injector. Please check your network, or try switching to a different download source.
|
||||
account.failed.connect_authentication_server=Failed to connect to the authentication server, your network connection may be down.
|
||||
account.failed.connect_injector_server=Failed to connect to the authentication server. Please check your network and make sure you entered the correct URL.
|
||||
account.failed.injector_download_failure=Failed to download the authlib-injector. Please check your network, or try switching to a different download source.
|
||||
account.failed.invalid_credentials=Incorrect password or rate limited. Please try again later.
|
||||
account.failed.invalid_password=Invalid password.
|
||||
account.failed.invalid_token=Please try logging in again.
|
||||
account.failed.migration=Your account needs to be migrated to a Microsoft account. If you already did, you should re-login to your migrated Microsoft account instead.
|
||||
account.failed.migration=Your account needs to be migrated to a Microsoft account. If you already did, you should log in to your migrated Microsoft account again.
|
||||
account.failed.no_character=There are no characters linked to this account.
|
||||
account.failed.server_disconnected=Unable to connect to the authentication server. You can log in offline mode or try logging in again.\n\
|
||||
If you try several times and still fail, please try adding the account again.
|
||||
account.failed.server_disconnected=Failed to connect to the authentication server. You can log in using offline mode or try logging in again.\n\
|
||||
If you try several times and still fail, please try logging in to the account again.
|
||||
account.failed.server_response_malformed=Invalid server response. The authentication server may not be working.
|
||||
account.failed.ssl=An SSL error occurred while connecting to the server. Please try updating your Java.
|
||||
account.failed.wrong_account=You have logged in to the wrong account.
|
||||
@@ -82,12 +82,12 @@ account.injector.link.register=Register
|
||||
account.injector.server=Authentication Server
|
||||
account.injector.server_url=Server URL
|
||||
account.injector.server_name=Server Name
|
||||
account.login=Login
|
||||
account.login=Log in
|
||||
account.login.hint=We never store your password.
|
||||
account.login.skip=Login offline
|
||||
account.login.skip=Log in offline
|
||||
account.login.retry=Retry
|
||||
account.login.refresh=Re-login
|
||||
account.login.refresh.microsoft.hint=You need to re-add your Microsoft account because the account authorization is invalid.
|
||||
account.login.refresh=Log in again
|
||||
account.login.refresh.microsoft.hint=You need to log in to your Microsoft account again because the account authorization is invalid.
|
||||
account.logout=Logout
|
||||
account.register=Register
|
||||
account.manage=Account List
|
||||
@@ -108,12 +108,12 @@ account.methods.microsoft.error.no_character=Your account does not own the Minec
|
||||
account.methods.microsoft.error.unknown=Failed to log in, error code: %d.
|
||||
account.methods.microsoft.error.wrong_verify_method=Please log in using your password on the Microsoft account login page, and do not use a verification code to log in.
|
||||
account.methods.microsoft.logging_in=Logging in...
|
||||
account.methods.microsoft.hint=Please click "Login" and copy the code displayed here to complete the login process in the browser window that opens.\n\
|
||||
account.methods.microsoft.hint=Please click "Log in" and copy the code displayed here to complete the login process in the browser window that opens.\n\
|
||||
\n\
|
||||
If the token used to log in to the Microsoft account is leaked, you can click "Deauthorize" to deauthorize it.
|
||||
account.methods.microsoft.manual=Your device code is <b>%1$s</b>. Please click here to copy.\n\
|
||||
\n\
|
||||
After clicking "Login", you should complete the login process in the opened browser window. If it did not show, you can navigate to %2$s manually.\n\
|
||||
After clicking "Log in", you should complete the login process in the opened browser window. If it did not show, you can navigate to %2$s manually.\n\
|
||||
\n\
|
||||
If the token used to log in to the Microsoft account is leaked, you can click "Deauthorize" to deauthorize it.
|
||||
account.methods.microsoft.makegameidsettings=Create Profile / Edit Profile Name
|
||||
@@ -154,7 +154,7 @@ account.skin.type.little_skin=LittleSkin
|
||||
account.skin.type.little_skin.hint=You need to create a player with the same player name as your offline account on your skin provider site. Your skin will now be set to the skin assigned to your player on the skin provider site.
|
||||
account.skin.type.local_file=Local Skin File
|
||||
account.skin.upload=Upload/Edit Skin
|
||||
account.skin.upload.failed=Unable to upload skin.
|
||||
account.skin.upload.failed=Failed to upload skin.
|
||||
account.skin.invalid_skin=Invalid skin file.
|
||||
account.username=Username
|
||||
|
||||
@@ -193,7 +193,7 @@ color.recent=Recommended
|
||||
color.custom=Custom Color
|
||||
|
||||
crash.NoClassDefFound=Please verify the integrity of this software, or try updating your Java.
|
||||
crash.user_fault=The launcher crashed due to a corrupted Java or system environment. Please make sure your Java or OS is installed properly.
|
||||
crash.user_fault=The launcher crashed because of corrupted Java or system environment. Please make sure your Java or OS is installed properly.
|
||||
|
||||
curse.category.0=All
|
||||
|
||||
@@ -328,8 +328,8 @@ download.existing=The file cannot be saved because it already exists. You can cl
|
||||
download.external_link=Visit Download Website
|
||||
download.failed=Failed to download "%1$s", response code: %2$d.
|
||||
download.failed.empty=No versions are available. Please click here to go back.
|
||||
download.failed.no_code=Failed to download "%s".
|
||||
download.failed.refresh=Unable to fetch version list. Please click here to retry.
|
||||
download.failed.no_code=Failed to download
|
||||
download.failed.refresh=Failed to fetch version list. Please click here to retry.
|
||||
download.game=New Game
|
||||
download.provider.bmclapi=BMCLAPI (bangbang93, https://bmclapi2.bangbang93.com/)
|
||||
download.provider.mojang=Official (OptiFine is provided by BMCLAPI)
|
||||
@@ -351,7 +351,7 @@ exception.access_denied=HMCL is unable to access the file "%s". It may be locked
|
||||
For Windows users, you can open "Resource Monitor" to check if another process is currently using it. If so, you can try again after closing that process.\n\
|
||||
If not, please check if your account has enough permissions to access it.
|
||||
exception.artifact_malformed=Cannot verify the integrity of the downloaded files.
|
||||
exception.ssl_handshake=Unable to establish an SSL connection due to the lack of an SSL certificate in the current Java installation. You can try opening HMCL in another Java and try again.
|
||||
exception.ssl_handshake=Failed to establish an SSL connection because the SSL certificate is missing from the current Java installation. You can try opening HMCL with another Java and try again.
|
||||
|
||||
extension.bat=Windows Batch File (.bat)
|
||||
extension.mod=Mod File
|
||||
@@ -375,7 +375,7 @@ fatal.config_loading_failure=Cannot load configuration files.\n\
|
||||
For macOS, try putting HMCL somewhere with permissions other than "Desktop", "Downloads", and "Documents" and try again.
|
||||
fatal.config_loading_failure.unix=Hello Minecraft! Launcher could not load the configuration file because it was created by user "%1$s".\n\
|
||||
Please open HMCL as root user (not recommended), or execute the following command in the terminal to change the ownership of the configuration file to the current user:\n%2$s
|
||||
fatal.mac_app_translocation=Due to macOS security mechanisms, Hello Minecraft! Launcher is isolated to a temporary directory by the OS.\n\
|
||||
fatal.mac_app_translocation=Hello Minecraft! Launcher is isolated to a temporary directory by the OS because of macOS security mechanisms.\n\
|
||||
Please move HMCL to a different directory before attempting to open. Otherwise, your settings and game data may be lost after restarting.\n\
|
||||
Do you still want to continue?
|
||||
fatal.migration_requires_manual_reboot=Hello Minecraft! Launcher has been upgraded. Please restart the launcher.
|
||||
@@ -426,34 +426,34 @@ game.crash.info=Crash Info
|
||||
game.crash.reason=Crash Cause
|
||||
game.crash.reason.analyzing=Analyzing...
|
||||
game.crash.reason.multiple=Several reasons detected:\n\n
|
||||
game.crash.reason.block=The game crashed due to a block in the world.\n\
|
||||
game.crash.reason.block=The game crashed because of a block in the world.\n\
|
||||
\n\
|
||||
You can try removing this block using MCEdit or deleting the mod that added it.\n\
|
||||
\n\
|
||||
Block Type: %1$s\n\
|
||||
Location: %2$s
|
||||
game.crash.reason.bootstrap_failed=The game crashed due to mod "%1$s".\n\
|
||||
game.crash.reason.bootstrap_failed=The game crashed because of the "%1$s" mod.\n\
|
||||
\n\
|
||||
You can try deleting or updating it.
|
||||
game.crash.reason.config=The game crashed due to a mod "%1$s" cannot parse its config file "%2$s".
|
||||
game.crash.reason.debug_crash=The game crashed due to you triggering it manually. So you probably know why.
|
||||
game.crash.reason.duplicated_mod=The game cannot continue to run due to duplicate mods "%1$s".\n\
|
||||
game.crash.reason.config=The game crashed because the mod "%1$s" could not parse its config file "%2$s".
|
||||
game.crash.reason.debug_crash=The game crashed because you triggered it manually. So you probably know why :)
|
||||
game.crash.reason.duplicated_mod=The game cannot continue to run because of duplicate mods "%1$s".\n\
|
||||
\n\
|
||||
%2$s\n\
|
||||
\n\
|
||||
Each mod can only be installed once. Please delete the duplicate mod and try again.
|
||||
game.crash.reason.entity=The game crashed due to an entity in the world.\n\
|
||||
game.crash.reason.entity=The game crashed because of an entity in the world.\n\
|
||||
\n\
|
||||
You can try removing the entity using MCEdit or deleting the mod that added it.\n\
|
||||
\n\
|
||||
Entity Type: %1$s\n\
|
||||
Location: %2$s
|
||||
game.crash.reason.modmixin_failure=The game crashed due to some mod injection failure.\n\
|
||||
game.crash.reason.modmixin_failure=The game crashed because some mods failed to inject.\n\
|
||||
\n\
|
||||
This generally means that the mod has a bug or is incompatible with the current environment.\n\
|
||||
\n\
|
||||
You can check the log to find the error mod.
|
||||
game.crash.reason.mod_repeat_installation=The game crashed due to duplicate mods.\n\
|
||||
game.crash.reason.mod_repeat_installation=The game crashed because of duplicate mods.\n\
|
||||
\n\
|
||||
Each mod can only be installed once. Please delete the duplicate mod and then relaunch the game.
|
||||
game.crash.reason.forge_error=Forge/NeoForge may have provided error information.\n\
|
||||
@@ -462,140 +462,140 @@ game.crash.reason.forge_error=Forge/NeoForge may have provided error information
|
||||
\n\
|
||||
If you do not see the error message, you can view the error report to understand how the error occurred.\n\
|
||||
%1$s
|
||||
game.crash.reason.mod_resolution0=The game crashed due to some mod problems. You can check the log to find the error mod(s).
|
||||
game.crash.reason.mixin_apply_mod_failed=The game crashed due to the mixin could not be applied to the "%1$s" mod.\n\
|
||||
game.crash.reason.mod_resolution0=The game crashed because of some mod problems. You can check the logs to find the faulty mod(s).
|
||||
game.crash.reason.mixin_apply_mod_failed=The game crashed because the mixin could not be applied to the mod "%1$s".\n\
|
||||
\n\
|
||||
You can try deleting or updating the mod to resolve the problem.
|
||||
game.crash.reason.java_version_is_too_high=The game crashed due to the Java version being too high to continue running.\n\
|
||||
game.crash.reason.java_version_is_too_high=The game crashed because the Java version is too new to continue running.\n\
|
||||
\n\
|
||||
Please use an earlier Java version in "Global/Instance-specific Settings → Java" and then launch the game.\n\
|
||||
Please use the previous major Java version in "Global/Instance-specific Settings → Java" and then launch the game.\n\
|
||||
\n\
|
||||
If not, you can download it from <a href="https://www.java.com/download/">java.com (Java 8)</a> or <a href="https://bell-sw.com/pages/downloads/#downloads">BellSoft Liberica Full JRE (Java 17)</a> and other distributions to download and install one (restart the launcher after installation).
|
||||
game.crash.reason.need_jdk11=The game crashed due to an inappropriate Java VM version.\n\
|
||||
game.crash.reason.need_jdk11=The game crashed because of an inappropriate Java VM version.\n\
|
||||
\n\
|
||||
You need to download and install Java 11, and set it in "Global/Instance-specific Settings → Java".
|
||||
game.crash.reason.mod_name=The game crashed due to mod file name problems.\n\
|
||||
game.crash.reason.mod_name=The game crashed because of mod filename problems.\n\
|
||||
\n\
|
||||
Mod file names should use only English letters (Aa~Zz), numbers (0~9), hyphens (-), underscores (_), and dots (.) in half-width.\n\
|
||||
\n\
|
||||
Please navigate to the mod directory and add all non-compliant mod file names with one of the above compliant characters.
|
||||
game.crash.reason.incomplete_forge_installation=The game cannot continue to run due to an incomplete installation of Forge/NeoForge.\n\
|
||||
game.crash.reason.incomplete_forge_installation=The game cannot continue to run because of an incomplete Forge/NeoForge installation.\n\
|
||||
\n\
|
||||
Please reinstall Forge/NeoForge in "Edit Instance → Loaders".
|
||||
game.crash.reason.fabric_version_0_12=Fabric Loader 0.12 or later is incompatible with currently installed mods. You need to downgrade it to 0.11.7.
|
||||
game.crash.reason.fabric_warnings=The Fabric warned:\n\
|
||||
\n\
|
||||
%1$s
|
||||
game.crash.reason.file_already_exists=The game crashed due to file "%1$s" already exists.\n\
|
||||
game.crash.reason.file_already_exists=The game crashed because the file "%1$s" already exists.\n\
|
||||
\n\
|
||||
You can try backing up and deleting that file, then relaunching the game.
|
||||
game.crash.reason.file_changed=The game crashed due to file "%1$s" already exists.\n\
|
||||
game.crash.reason.file_changed=The game crashed because the file "%1$s" already exists.\n\
|
||||
\n\
|
||||
You can try backing up and deleting that file, then relaunching the game.
|
||||
game.crash.reason.gl_operation_failure=The game crashed due to some mods, shaders, or resource packs.\n\
|
||||
game.crash.reason.gl_operation_failure=The game crashed because of some mods, shaders, or resource packs.\n\
|
||||
\n\
|
||||
Please disable the mods, shaders, or resource packs you are using and then try again.
|
||||
game.crash.reason.graphics_driver=The game crashed due to a problem with your graphics driver.\n\
|
||||
game.crash.reason.graphics_driver=The game crashed because of a problem with your graphics driver.\n\
|
||||
\n\
|
||||
Please try again after updating your graphics driver to the latest version.\n\
|
||||
\n\
|
||||
If your PC has a discrete graphics card, you need to check whether the game uses integrated/core graphics. If so, please open the launcher using your discrete graphics card. If the problem persists, you probably should consider using a new graphics card or a new PC.\n\
|
||||
If your computer has a discrete graphics card, you need to check whether the game uses integrated/core graphics. If so, please open the launcher using your discrete graphics card. If the problem persists, you probably should consider using a new graphics card or a new computer.\n\
|
||||
\n\
|
||||
If you are using your integrated graphics card, please notice that Minecraft 1.16.5 or earlier requires <a href="https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html">Java 1.8.0_51 or earlier</a> for Intel(R) Core(TM) 3000 processor series or earlier.
|
||||
game.crash.reason.macos_failed_to_find_service_port_for_display=The game cannot continue due to a failure to initialize the OpenGL window on the Apple silicon platform.\n\
|
||||
If you are using your integrated graphics card, please notice that Minecraft 1.16.5 or previous requires <a href="https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html">Java 1.8.0_51 or previous</a> for Intel(R) Core(TM) 3000 processor series or previous.
|
||||
game.crash.reason.macos_failed_to_find_service_port_for_display=The game cannot continue because the OpenGL window on the Apple silicon platform failed to initialize.\n\
|
||||
\n\
|
||||
For this problem, HMCL does not have direct solutions at the moment. Please try opening any browser and going fullscreen, then return to HMCL, launch the game, and <b>quickly return to the browser page</b> before the game window pops up, wait for the game window to appear, and then switch back to the game window.
|
||||
game.crash.reason.illegal_access_error=The game crashed due to some mod(s).\n\
|
||||
game.crash.reason.illegal_access_error=The game crashed because of some mod(s).\n\
|
||||
\n\
|
||||
If you know this: "%1$s", you can update or delete the mod(s) and then try again.
|
||||
game.crash.reason.install_mixinbootstrap=The game crashed due to missing MixinBootstrap.\n\
|
||||
game.crash.reason.install_mixinbootstrap=The game crashed because of the missing MixinBootstrap.\n\
|
||||
\n\
|
||||
You can try installing <a href="https://www.curseforge.com/minecraft/mc-mods/mixinbootstrap">MixinBootstrap</a> to resolve the problem. If it crashes after installation, try adding an exclamation mark (!) in front of the file name of this mod to try to resolve the problem.
|
||||
game.crash.reason.optifine_is_not_compatible_with_forge=The game crashes due to OptiFine being incompatible with the currently installed Forge.\n\
|
||||
game.crash.reason.optifine_is_not_compatible_with_forge=The game crashed because OptiFine is not compatible with the current Forge installation.\n\
|
||||
\n\
|
||||
Please navigate to<a href="https://optifine.net/downloads">the official website of OptiFine</a>, check whether the Forge version is compatible with OptiFine, and reinstall the instance in strict accordance with the corresponding version, or change the OptiFine version in "Edit Instance → Loaders".\n\
|
||||
\n\
|
||||
After testing, we believe that too high or too low OptiFine versions may cause crashes.
|
||||
game.crash.reason.mod_files_are_decompressed=The game crashed due to the mod file having been extracted.\n\
|
||||
game.crash.reason.mod_files_are_decompressed=The game crashed because the mod file was extracted.\n\
|
||||
\n\
|
||||
Please put the entire mod file directly into the mod directory!\n\
|
||||
\n\
|
||||
If extract will cause errors in the game, please delete the extracted mod in the mod directory and then launch the game.
|
||||
game.crash.reason.shaders_mod=The game crashed due to both OptiFine and Shaders mods being installed.\n\
|
||||
game.crash.reason.shaders_mod=The game crashed because of both OptiFine and Shaders mod installed at the same time.\n\
|
||||
\n\
|
||||
Just remove Shaders mod due to OptiFine having built-in support for shaders.
|
||||
game.crash.reason.rtss_forest_sodium=The game crashed due to RivaTuner Statistics Server (RTSS) being incompatible with Sodium.\n\
|
||||
Just remove the Shader mod because OptiFine has built-in support for shaders.
|
||||
game.crash.reason.rtss_forest_sodium=The game crashed because the RivaTuner Statistical Server (RTSS) is not compatible with Sodium.\n\
|
||||
\n\
|
||||
Click <a href="https://github.com/CaffeineMC/sodium-fabric/wiki/Known-Issues#rtss-incompatible">here</a> for more details.
|
||||
game.crash.reason.too_many_mods_lead_to_exceeding_the_id_limit=The game crashed due to you having installed too many mods, which exceeds the ID limit of the game.\n\
|
||||
game.crash.reason.too_many_mods_lead_to_exceeding_the_id_limit=The game crashed because you installed too many mods and exceeded the game ID limit.\n\
|
||||
\n\
|
||||
Please try installing<a href="https://www.curseforge.com/minecraft/mc-mods/jeid">JEID</a> or deleting some large mods.
|
||||
game.crash.reason.night_config_fixes=The game crashed due to some problems with Night Config.\n\
|
||||
game.crash.reason.night_config_fixes=The game crashed because of some problems with Night Config.\n\
|
||||
\n\
|
||||
You can try installing the <a href="https://www.curseforge.com/minecraft/mc-mods/night-config-fixes">Night Config Fixes</a> mod, which may help you with this problem.\n\
|
||||
\n\
|
||||
For more information, visit the <a href="https://github.com/Fuzss/nightconfigfixes">GitHub repository</a> of this mod.
|
||||
game.crash.reason.optifine_causes_the_world_to_fail_to_load=The game may not continue to run due to OptiFine.\n\
|
||||
game.crash.reason.optifine_causes_the_world_to_fail_to_load=The game may not continue to run because of the OptiFine.\n\
|
||||
\n\
|
||||
This problem only occurs in a specific OptiFine version. You can try changing the OptiFine version in "Edit Instance → Loaders".
|
||||
game.crash.reason.jdk_9=The game crashed due to the Java version being too new for this instance.\n\
|
||||
game.crash.reason.jdk_9=The game crashed because the Java version is too new for this instance.\n\
|
||||
\n\
|
||||
You need to download and install Java 8 and choose it in "Global/Instance-specific Settings → Java".
|
||||
game.crash.reason.jvm_32bit=The game crashed due to the current memory allocation exceeding the limit of the 32-bit Java VM.\n\
|
||||
game.crash.reason.jvm_32bit=The game crashed because the current memory allocation exceeded the 32-bit Java VM limit.\n\
|
||||
\n\
|
||||
If your OS is 64-bit, please install and use a 64-bit Java version. Otherwise, you may need to reinstall a 64-bit OS or get a moderner PC.\n\
|
||||
If your OS is 64-bit, please install and use a 64-bit Java version. Otherwise, you may need to reinstall a 64-bit OS or get a moderner computer.\n\
|
||||
\n\
|
||||
Or, you can disable the "Automatically Allocate" option in "Global/Instance-specific Settings → Memory" and set the maximum memory allocation size to 1024 MB or below.
|
||||
game.crash.reason.loading_crashed_forge=The game crashed due to mod "%1$s" (%2$s).\n\
|
||||
game.crash.reason.loading_crashed_forge=The game crashed because of the mod "%1$s" (%2$s).\n\
|
||||
\n\
|
||||
You can try deleting or updating it.
|
||||
game.crash.reason.loading_crashed_fabric=The game crashed due to mod "%1$s".\n\
|
||||
game.crash.reason.loading_crashed_fabric=The game crashed because of the mod "%1$s".\n\
|
||||
\n\
|
||||
You can try deleting or updating it.
|
||||
game.crash.reason.mac_jdk_8u261=The game crashed due to your current Forge or OptiFine version not being compatible with your Java installation.\n\
|
||||
game.crash.reason.mac_jdk_8u261=The game crashed because your current Forge or OptiFine version is incompatible with your Java installation.\n\
|
||||
\n\
|
||||
Please try updating Forge and OptiFine, or try using Java 8u251 or earlier versions.
|
||||
game.crash.reason.forge_repeat_installation=The game crashed due to a duplicate installation of Forge. <a href="https://github.com/HMCL-dev/HMCL/issues/1880">This is a known problem</a>\n\
|
||||
Please try updating Forge and OptiFine, or try using Java 8u251 or previous versions.
|
||||
game.crash.reason.forge_repeat_installation=The game crashed because of a duplicate Forge installation. <a href="https://github.com/HMCL-dev/HMCL/issues/1880">This is a known problem</a>\n\
|
||||
\n\
|
||||
It is recommended to upload the log feedback to GitHub so that we can find more clues and resolve this problem.\n\
|
||||
\n\
|
||||
Currently you can uninstall Forge and reinstall it in "Edit Instance → Loaders".
|
||||
game.crash.reason.optifine_repeat_installation=The game crashed due to repeated installation of OptiFine.\n\
|
||||
game.crash.reason.optifine_repeat_installation=The game crashed because of a duplicate OptiFine installation.\n\
|
||||
\n\
|
||||
Please delete OptiFine in the mod directory or uninstall it in "Edit Instance → Loaders".
|
||||
game.crash.reason.memory_exceeded=The game crashed due to too much memory allocated for a small page file.\n\
|
||||
game.crash.reason.memory_exceeded=The game crashed because too much memory was allocated for a small page file.\n\
|
||||
\n\
|
||||
You can try disabling the "Automatically Allocate" option in "Global/Instance-specific Settings → Memory" and adjust the value till the game launches.\n\
|
||||
\n\
|
||||
You can also try increasing the page file size in system settings.
|
||||
game.crash.reason.mod=The game crashed due to the mod "%1$s".\n\
|
||||
game.crash.reason.mod=The game crashed because of the mod "%1$s".\n\
|
||||
\n\
|
||||
You may update or delete the mod and then try again.
|
||||
game.crash.reason.mod_resolution=The game cannot continue to run due to mod dependency problems.\n\
|
||||
game.crash.reason.mod_resolution=The game cannot continue to run because of mod dependency problems.\n\
|
||||
\n\
|
||||
Fabric provided the following details:\n\
|
||||
\n\
|
||||
%1$s
|
||||
game.crash.reason.forgemod_resolution=The game cannot continue to run due to mod dependency problems.\n\
|
||||
game.crash.reason.forgemod_resolution=The game cannot continue to run because of mod dependency problems.\n\
|
||||
\n\
|
||||
Forge/NeoForge provided the following details:\n\
|
||||
%1$s
|
||||
game.crash.reason.forge_found_duplicate_mods=The game crashed due to a duplicate mods problem. Forge/NeoForge provides the following information:\n\
|
||||
game.crash.reason.forge_found_duplicate_mods=The game crashed because of a duplicate mod problem. Forge/NeoForge provided the following information:\n\
|
||||
%1$s
|
||||
game.crash.reason.mod_resolution_collection=The game crashed because the mod version is not compatible.\n\
|
||||
\n\
|
||||
"%1$s" requires "%2$s".\n\
|
||||
\n\
|
||||
You need to upgrade or downgrade %3$s before continuing.
|
||||
game.crash.reason.mod_resolution_conflict=The game crashed due to conflicting mods.\n\
|
||||
game.crash.reason.mod_resolution_conflict=The game crashed because of conflicting mods.\n\
|
||||
\n\
|
||||
"%1$s" is incompatible with "%2$s".
|
||||
game.crash.reason.mod_resolution_missing=The game crashed due to some dependency mods not being installed.\n\
|
||||
game.crash.reason.mod_resolution_missing=The game crashed because some dependent mods were not installed.\n\
|
||||
\n\
|
||||
"%1$s" requires mod "%2$s".\n\
|
||||
\n\
|
||||
This means that you have to download and install "%2$s" first to continue playing.
|
||||
game.crash.reason.mod_resolution_missing_minecraft=The game crashed due to a mod being incompatible with the current Minecraft version.\n\
|
||||
game.crash.reason.mod_resolution_missing_minecraft=The game crashed because a mod is incompatible with the current Minecraft version.\n\
|
||||
\n\
|
||||
"%1$s" requires Minecraft version %2$s.\n\
|
||||
\n\
|
||||
@@ -604,31 +604,31 @@ game.crash.reason.mod_resolution_missing_minecraft=The game crashed due to a mod
|
||||
Otherwise, you should install a version that is compatible with this Minecraft version.
|
||||
game.crash.reason.mod_resolution_mod_version=%1$s (Version: %2$s)
|
||||
game.crash.reason.mod_resolution_mod_version.any=%1$s (Any Version)
|
||||
game.crash.reason.modlauncher_8=The game crashed due to your current Forge version not being compatible with your Java installation. Please try updating Forge.
|
||||
game.crash.reason.no_class_def_found_error=The game cannot continue to run due to incomplete code.\n\
|
||||
game.crash.reason.modlauncher_8=The game crashed because your current Forge version is not compatible with your Java installation. Please try updating Forge.
|
||||
game.crash.reason.no_class_def_found_error=The game cannot continue to run because of incomplete code.\n\
|
||||
\n\
|
||||
Your game instance is missing %1$s. This might be due to a mod missing, an incompatible mod installed, or some files being corrupted.\n\
|
||||
Your game instance is missing %1$s. This might be because a mod is missing, an incompatible mod is installed, or some files are corrupted.\n\
|
||||
\n\
|
||||
You may need to reinstall the game and all mods or ask someone for help.
|
||||
game.crash.reason.no_such_method_error=The game cannot continue to run due to incomplete code.\n\
|
||||
game.crash.reason.no_such_method_error=The game cannot continue to run because of incomplete code.\n\
|
||||
\n\
|
||||
Your game instance might be missing a mod, installed an incompatible mod, or some files might be corrupted.\n\
|
||||
\n\
|
||||
You may need to reinstall the game and all mods or ask someone for help.
|
||||
game.crash.reason.opengl_not_supported=The game crashed due to OpenGL not being supported by your graphics driver.\n\
|
||||
game.crash.reason.opengl_not_supported=The game crashed because your graphics driver does not support OpenGL.\n\
|
||||
\n\
|
||||
If you are streaming the game over the Internet or using a remote desktop environment, please play the game on your local one.\n\
|
||||
\n\
|
||||
Or, you can try updating your driver to the latest version and then try again.\n\
|
||||
\n\
|
||||
If your PC has a discrete graphics card, please make sure the game is actually using it for rendering. If the problem persists, please consider getting a new graphics card or a new PC.
|
||||
If your computer has a discrete graphics card, please make sure the game is actually using it for rendering. If the problem persists, please consider getting a new graphics card or a new computer.
|
||||
game.crash.reason.openj9=The game is unable to run on an OpenJ9 VM. Please switch to a Java that uses the Hotspot VM in "Global/Instance-specific Settings → Java" and relaunch the game. If you do not have one, you can download one online.
|
||||
game.crash.reason.out_of_memory=The game crashed due to it running out of memory.\n\
|
||||
game.crash.reason.out_of_memory=The game crashed because the computer ran out of memory.\n\
|
||||
\n\
|
||||
Maybe because there is not enough memory available or too many mods installed. You can try resolving it by increasing the allocated memory in "Global/Instance-specific Settings → Memory".\n\
|
||||
\n\
|
||||
If you still encounter these problems, you may need a better PC.
|
||||
game.crash.reason.resolution_too_high=The game crashed due to the resource pack resolution being too high.\n\
|
||||
If you still encounter these problems, you may need a better computer.
|
||||
game.crash.reason.resolution_too_high=The game crashed because the resource pack resolution is too high.\n\
|
||||
\n\
|
||||
You should switch to a resource pack with lower resolution or consider buying a better graphics card with more VRAM.
|
||||
game.crash.reason.stacktrace=The crash reason is unknown. You can view its details by clicking "Logs".\n\
|
||||
@@ -636,11 +636,11 @@ game.crash.reason.stacktrace=The crash reason is unknown. You can view its detai
|
||||
There are some keywords that might contain some mod names. You can search them online to figure out the problem yourself.\n\
|
||||
\n\
|
||||
%s
|
||||
game.crash.reason.too_old_java=The game crashed due to you using an outdated Java VM version.\n\
|
||||
game.crash.reason.too_old_java=The game crashed because you are using an outdated Java VM version.\n\
|
||||
\n\
|
||||
You need to switch to a newer version (%1$s) of Java in "Global/Instance-specific Settings → Java" and then relaunch the game. You can download Java from <a href="https://learn.microsoft.com/java/openjdk/download">here</a>.
|
||||
You need to switch to a newer Java version (%1$s) in "Global/Instance-specific Settings → Java" and then relaunch the game. You can download Java from <a href="https://learn.microsoft.com/java/openjdk/download">here</a>.
|
||||
game.crash.reason.unknown=We are not able to figure out why the game crashed. Please refer to the game logs.
|
||||
game.crash.reason.unsatisfied_link_error=Unable to launch Minecraft due to missing libraries: %1$s.\n\
|
||||
game.crash.reason.unsatisfied_link_error=Failed to launch Minecraft because of missing libraries: %1$s.\n\
|
||||
\n\
|
||||
If you have edited the native library path, please make sure these libraries do exist. Or, please try launching again after reverting it to default.\n\
|
||||
\n\
|
||||
@@ -663,11 +663,11 @@ input.url=The input must be a valid URL.
|
||||
install=New Instance
|
||||
install.change_version=Change Version
|
||||
install.change_version.confirm=Are you sure you want to switch %s from version %s to %s?
|
||||
install.failed=Installation Failed
|
||||
install.failed.downloading=We are unable to download some required files.
|
||||
install.failed.downloading.detail=Unable to download file: %s
|
||||
install.failed=Failed to install
|
||||
install.failed.downloading=Failed to download some required files.
|
||||
install.failed.downloading.detail=Failed to download file: %s
|
||||
install.failed.downloading.timeout=Download timeout when fetching: %s
|
||||
install.failed.install_online=Unable to identify the provided file. If you are installing a mod, navigate to the "Mods" page.
|
||||
install.failed.install_online=Failed to identify the provided file. If you are installing a mod, navigate to the "Mods" page.
|
||||
install.failed.malformed=The downloaded files are corrupted. You can try resolving this problem by switching to another download source in "Settings → Download → Download Source".
|
||||
install.failed.optifine_conflict=Cannot install both OptiFine and Fabric on Minecraft 1.13 or later.
|
||||
install.failed.optifine_forge_1.17=For Minecraft 1.17.1, Forge is only compatible with OptiFine H1 pre2 or later. You can install them by checking "Snapshots" when choosing an OptiFine version in HMCL.
|
||||
@@ -701,7 +701,7 @@ install.new_game.already_exists=This instance name already exists. Please use an
|
||||
install.new_game.current_game_version=Current Instance Version
|
||||
install.new_game.malformed=Invalid name.
|
||||
install.select=Choose operation
|
||||
install.success=Installed successfully.
|
||||
install.success=Successfully installed.
|
||||
|
||||
java.add=Add Java
|
||||
java.add.failed=This Java is invalid or incompatible with the current platform.
|
||||
@@ -738,38 +738,38 @@ lang.default=Use System Locales
|
||||
launch.advice=%s Do you still want to continue to launch?
|
||||
launch.advice.multi=The following problems were detected:\n\n%s\n\nThese problems may cause you to be unable to launch the game or affect the game experience. \nDo you still want to continue to launch?
|
||||
launch.advice.java.auto=The current Java VM version is not compatible with the instance.\n\nClick "Yes" to automatically choose the most compatible Java VM version. Or, you can navigate to "Global/Instance-specific Settings → Java" to choose one yourself.
|
||||
launch.advice.java.modded_java_7=Minecraft 1.7.2 and earlier versions require Java 7 or earlier.
|
||||
launch.advice.java.modded_java_7=Minecraft 1.7.2 and previous versions require Java 7 or previous.
|
||||
launch.advice.corrected=We have resolved the Java VM problem. If you still want to use your choice of Java version, you can disable the "Do not check Java VM compatibility" in "Global/Instance-specific Settings → Advanced Settings".
|
||||
launch.advice.uncorrected=If you still want to use your choice of Java version, you can disable the "Do not check Java VM compatibility" in "Global/Instance-specific Settings → Advanced Settings".
|
||||
launch.advice.different_platform=The 64-bit Java version is recommended for your device, but you have installed a 32-bit one.
|
||||
launch.advice.forge2760_liteloader=Forge version 2760 is not compatible with LiteLoader. Please consider upgrading Forge to version 2773 or later.
|
||||
launch.advice.forge28_2_2_optifine=Forge version 28.2.2 or later is not compatible with OptiFine. Please consider downgrading Forge to version 28.2.1 or earlier.
|
||||
launch.advice.forge37_0_60=Forge versions earlier than 37.0.60 are not compatible with Java 17. Please update Forge to 37.0.60 or later, or launch the game with Java 16.
|
||||
launch.advice.forge28_2_2_optifine=Forge version 28.2.2 or later is not compatible with OptiFine. Please consider downgrading Forge to version 28.2.1 or previous.
|
||||
launch.advice.forge37_0_60=Forge versions previous to 37.0.60 are not compatible with Java 17. Please update Forge to 37.0.60 or later, or launch the game with Java 16.
|
||||
launch.advice.java8_1_13=Minecraft 1.13 and later can only be run on Java 8 or later. Please use Java 8 or later versions.
|
||||
launch.advice.java8_51_1_13=Minecraft 1.13 may crash on Java 8 versions earlier than 1.8.0_51. Please install the latest Java 8 version.
|
||||
launch.advice.java9=You cannot launch Minecraft 1.12 or earlier with Java 9 or later. Please use Java 8 instead.
|
||||
launch.advice.modded_java=Some mods may not be compatible with newer versions of Java. It is recommended to use Java %s to launch Minecraft %s.
|
||||
launch.advice.java8_51_1_13=Minecraft 1.13 may crash on Java 8 versions previous to 1.8.0_51. Please install the latest Java 8 version.
|
||||
launch.advice.java9=You cannot launch Minecraft 1.12 or previous with Java 9 or later. Please use Java 8 instead.
|
||||
launch.advice.modded_java=Some mods may not be compatible with newer Java versions. It is recommended to use Java %s to launch Minecraft %s.
|
||||
launch.advice.modlauncher8=The Forge version you are using is not compatible with the current Java version. Please try updating Forge.
|
||||
launch.advice.newer_java=You are using the old Java to launch the game. It is recommended to update to Java 8, otherwise some mods may cause the game to crash.
|
||||
launch.advice.not_enough_space=You have allocated a memory size larger than the actual %d MB of memory installed on your PC. You may experience degraded performance or even be unable to launch the game.
|
||||
launch.advice.not_enough_space=You have allocated a memory size larger than the actual %d MB of memory installed on your computer. You may experience degraded performance or even be unable to launch the game.
|
||||
launch.advice.require_newer_java_version=The current game version requires Java %s, but we could not find one. Do you want to download one now?
|
||||
launch.advice.too_large_memory_for_32bit=You have allocated a memory size larger than the memory limitation of the 32-bit Java installation. You may be unable to launch the game.
|
||||
launch.advice.vanilla_linux_java_8=Minecraft 1.12.2 or earlier only supports Java 8 for the Linux x86-64 platform because the later versions cannot load 32-bit native libraries like liblwjgl.so\n\nPlease download it from java.com or install OpenJDK 8.
|
||||
launch.advice.vanilla_linux_java_8=Minecraft 1.12.2 or previous only supports Java 8 for the Linux x86-64 platform because the later versions cannot load 32-bit native libraries like liblwjgl.so\n\nPlease download it from java.com or install OpenJDK 8.
|
||||
launch.advice.vanilla_x86.translation=Minecraft is not fully supported for your platform, so you may experience missing functionality or even be unable to launch the game.\nYou can download Java for the <b>x86-64</b> architecture <a href="https://learn.microsoft.com/java/openjdk/download">here</a> for a full gaming experience.
|
||||
launch.advice.unknown=The game cannot be launched due to the following reasons:
|
||||
launch.advice.unknown=The game cannot be launched for the following reasons:
|
||||
launch.failed=Failed to launch
|
||||
launch.failed.cannot_create_jvm=We are unable to create a Java VM. It may be caused by incorrect Java VM arguments. You can try resolving it by removing all arguments you added in "Global/Instance-specific Settings → Advanced Settings → Java VM Options".
|
||||
launch.failed.creating_process=We are unable to create a new process. Please check your Java path.\n
|
||||
launch.failed.command_too_long=The command length exceeds the maximum length of a bat script. Please try exporting it as a PowerShell script.
|
||||
launch.failed.decompressing_natives=Unable to extract native libraries.\n
|
||||
launch.failed.download_library=Unable to download libraries "%s".
|
||||
launch.failed.executable_permission=Unable to make the launch script executable.
|
||||
launch.failed.decompressing_natives=Failed to extract native libraries.\n
|
||||
launch.failed.download_library=Failed to download libraries "%s".
|
||||
launch.failed.executable_permission=Failed to make the launch script executable.
|
||||
launch.failed.execution_policy=Set Execution Policy
|
||||
launch.failed.execution_policy.failed_to_set=Unable to set execution policy
|
||||
launch.failed.execution_policy.failed_to_set=Failed to set execution policy
|
||||
launch.failed.execution_policy.hint=The current execution policy prevents the execution of PowerShell scripts.\n\nClick "OK" to allow the current user to execute PowerShell scripts, or click "Cancel" to keep it as it is.
|
||||
launch.failed.exited_abnormally=Game crashed. Please refer to the crash log for more details.
|
||||
launch.failed.java_version_too_low=The Java version you specified is too low. Please reset the Java version.
|
||||
launch.failed.no_accepted_java=Unable to find a compatible Java version, do you want to launch the game with the default Java?\nClick "Yes" to launch the game with the default Java.\nOr, you can navigate to "Global/Instance-specific Settings → Java" to choose one yourself.
|
||||
launch.failed.no_accepted_java=Failed to find a compatible Java version, do you want to launch the game with the default Java?\nClick "Yes" to launch the game with the default Java.\nOr, you can navigate to "Global/Instance-specific Settings → Java" to choose one yourself.
|
||||
launch.failed.sigkill=Game was forcibly terminated by the user or system.
|
||||
launch.state.dependencies=Resolving dependencies
|
||||
launch.state.done=Launched
|
||||
@@ -795,10 +795,10 @@ launcher.cache_directory.clean=Clear Cache
|
||||
launcher.cache_directory.choose=Choose cache directory
|
||||
launcher.cache_directory.default=Default ("%APPDATA%/.minecraft" or "~/.minecraft")
|
||||
launcher.cache_directory.disabled=Disabled
|
||||
launcher.cache_directory.invalid=Unable to create a cache directory, falling back to default.
|
||||
launcher.cache_directory.invalid=Failed to create a cache directory, falling back to default.
|
||||
launcher.contact=Contact Us
|
||||
launcher.crash=Hello Minecraft! Launcher has encountered a fatal error! Please copy the following log and ask for help on our Discord, QQ group, GitHub, or other Minecraft forum.
|
||||
launcher.crash.java_internal_error=Hello Minecraft! Launcher has encountered a fatal error due to your Java being broken. Please uninstall your Java and download a suitable Java <a href="https://bell-sw.com/pages/downloads/#downloads">here</a>.
|
||||
launcher.crash.java_internal_error=Hello Minecraft! Launcher has encountered a fatal error because your Java is corrupted. Please uninstall your Java and download a suitable Java <a href="https://bell-sw.com/pages/downloads/#downloads">here</a>.
|
||||
launcher.crash.hmcl_out_dated=Hello Minecraft! Launcher has encountered a fatal error! Your launcher is outdated. Please update your launcher!
|
||||
launcher.update_java=Please update your Java version.
|
||||
|
||||
@@ -816,7 +816,7 @@ logwindow.export_dump.no_dependency=Your Java does not contain the dependencies
|
||||
|
||||
main_page=Home
|
||||
|
||||
message.cancelled=Operation was canceled
|
||||
message.cancelled=Operation Canceled
|
||||
message.confirm=Confirm
|
||||
message.copied=Copied to clipboard
|
||||
message.default=Default
|
||||
@@ -825,7 +825,7 @@ message.downloading=Downloading
|
||||
message.error=Error
|
||||
message.failed=Operation Failed
|
||||
message.info=Information
|
||||
message.success=Operation completed successfully
|
||||
message.success=Operation successfully completed
|
||||
message.unknown=Unknown
|
||||
message.warning=Warning
|
||||
|
||||
@@ -872,9 +872,9 @@ modpack.origin.mcbbs=MCBBS
|
||||
modpack.origin.mcbbs.prompt=Post ID
|
||||
modpack.scan=Parsing Modpack Index
|
||||
modpack.task.install=Import Modpack
|
||||
modpack.task.install.error=Unable to identify this modpack. We currently only support Curse, Modrinth, MultiMC, and MCBBS modpacks.
|
||||
modpack.task.install.error=Failed to identify this modpack. We currently only support Curse, Modrinth, MultiMC, and MCBBS modpacks.
|
||||
modpack.type.curse=Curse
|
||||
modpack.type.curse.error=Unable to download dependencies. Please try again or use a proxy server.
|
||||
modpack.type.curse.error=Failed to download dependencies. Please try again or use a proxy server.
|
||||
modpack.type.curse.not_found=Some dependencies are no longer available. Please try installing a newer modpack version.
|
||||
modpack.type.manual.warning=The modpack is manually packaged by the publisher, which may already contain a launcher. It is recommended to try extracting the modpack and running the game with its own launcher. HMCL can still import it, with no guarantee of its usability. Still continue?
|
||||
modpack.type.mcbbs=MCBBS
|
||||
@@ -884,7 +884,7 @@ modpack.type.multimc=MultiMC
|
||||
modpack.type.multimc.export=Can be imported by Hello Minecraft! Launcher and MultiMC
|
||||
modpack.type.server=Auto-Update Modpack from Server
|
||||
modpack.type.server.export=Allows server owner to update the game instance remotely
|
||||
modpack.type.server.malformed=Invalid modpack manifest. Please refer to the modpack maker to resolve this problem.
|
||||
modpack.type.server.malformed=Invalid modpack manifest. Please contact the modpack maker to resolve this problem.
|
||||
modpack.unsupported=Unsupported modpack format
|
||||
modpack.update=Updating modpack
|
||||
modpack.wizard=Modpack Export Guide
|
||||
@@ -975,7 +975,7 @@ modrinth.category.512x+=512x+
|
||||
mods=Mods
|
||||
mods.add=Add Mod
|
||||
mods.add.failed=Failed to add mod %s.
|
||||
mods.add.success=%s was added successfully.
|
||||
mods.add.success=%s was successfully added.
|
||||
mods.broken_dependency.title=Broken dependency
|
||||
mods.broken_dependency.desc=This dependency existed before, but it does not exist now. Try using another download source.
|
||||
mods.category=Category
|
||||
@@ -985,7 +985,8 @@ mods.channel.release=Release
|
||||
mods.check_updates=Check for Updates
|
||||
mods.check_updates.current_version=Current Version
|
||||
mods.check_updates.empty=All mods are up-to-date
|
||||
mods.check_updates.failed=Failed to download some files.
|
||||
mods.check_updates.failed_check=Failed to check for updates.
|
||||
mods.check_updates.failed_download=Failed to download some files.
|
||||
mods.check_updates.file=File
|
||||
mods.check_updates.source=Source
|
||||
mods.check_updates.target_version=Target Version
|
||||
@@ -1011,7 +1012,7 @@ mods.mcmod.page=MCMod Page
|
||||
mods.mcmod.search=Search in MCMod
|
||||
mods.modrinth=Modrinth
|
||||
mods.name=Name
|
||||
mods.not_modded=You must install a mod loader (Forge, NeoForge, Fabric, Quilt, or LiteLoader) first to manage your mods!
|
||||
mods.not_modded=You must install a modloader (Forge, NeoForge, Fabric, Quilt, or LiteLoader) first to manage your mods!
|
||||
mods.restore=Restore
|
||||
mods.url=Official Page
|
||||
mods.update_modpack_mod.warning=Updating mods in a modpack can lead to irreparable results, possibly corrupting the modpack so that it cannot launch. Are you sure you want to update?
|
||||
@@ -1019,8 +1020,8 @@ mods.install=Install
|
||||
mods.save_as=Save As
|
||||
|
||||
nbt.entries=%s entries
|
||||
nbt.open.failed=Fail to open file
|
||||
nbt.save.failed=Fail to save file
|
||||
nbt.open.failed=Failed to open file
|
||||
nbt.save.failed=Failed to save file
|
||||
nbt.title=View File - %s
|
||||
|
||||
datapack=Datapacks
|
||||
@@ -1029,7 +1030,7 @@ datapack.choose_datapack=Choose datapack to import
|
||||
datapack.extension=Datapack
|
||||
datapack.title=World [%s] - Datapacks
|
||||
|
||||
web.failed=Page loading failed
|
||||
web.failed=Failed to load page
|
||||
web.open_in_browser=Do you want to open this address in a browser:\n%s
|
||||
web.view_in_browser=View in browser
|
||||
|
||||
@@ -1048,10 +1049,10 @@ world.game_version=Game Version
|
||||
world.import.already_exists=This world already exists.
|
||||
world.import.choose=Choose world archive you want to import
|
||||
world.import.failed=Failed to import this world: %s
|
||||
world.import.invalid=Unable to import the save.
|
||||
world.import.invalid=Failed to parse the world.
|
||||
world.info.title=World [%s] - Information
|
||||
world.info.basic=Basic Information
|
||||
world.info.allow_cheats=Allow Cheats
|
||||
world.info.allow_cheats=Allow Commands/Cheats
|
||||
world.info.dimension.the_nether=The Nether
|
||||
world.info.dimension.the_end=The End
|
||||
world.info.difficulty=Difficulty
|
||||
@@ -1236,7 +1237,7 @@ settings.launcher.general=General
|
||||
settings.launcher.language=Language (Applies After Restart)
|
||||
settings.launcher.launcher_log.export=Export Launcher Logs
|
||||
settings.launcher.launcher_log.reveal=Reveal Logs in Explorer
|
||||
settings.launcher.launcher_log.export.failed=Unable to export logs.
|
||||
settings.launcher.launcher_log.export.failed=Failed to export logs.
|
||||
settings.launcher.launcher_log.export.success=Logs have been exported to "%s".
|
||||
settings.launcher.log=Logging
|
||||
settings.launcher.log.font=Font
|
||||
@@ -1300,7 +1301,7 @@ update.channel.nightly.hint=You are currently using a Nightly channel build of t
|
||||
update.channel.nightly.title=Nightly Channel Notice
|
||||
update.channel.stable=Release
|
||||
update.checking=Checking for Updates
|
||||
update.failed=Unable to update
|
||||
update.failed=Failed to update
|
||||
update.found=Update Available!
|
||||
update.newest_version=Latest version: %s
|
||||
update.bubble.title=Update Available: %s
|
||||
@@ -1312,7 +1313,7 @@ update.tooltip=Update
|
||||
|
||||
version=Games
|
||||
version.name=Instance Name
|
||||
version.cannot_read=Unable to parse the game instance, installation cannot continue.
|
||||
version.cannot_read=Failed to parse the game instance, installation cannot continue.
|
||||
version.empty=No Instances
|
||||
version.empty.add=Add new instance
|
||||
version.empty.launch=No instances. You can install one in "Download → New Game".
|
||||
@@ -1326,7 +1327,7 @@ version.launch=Launch Game
|
||||
version.launch.test=Test Launch
|
||||
version.switch=Switch Instance
|
||||
version.launch_script=Export Launch Script
|
||||
version.launch_script.failed=Unable to export launch script.
|
||||
version.launch_script.failed=Failed to export launch script.
|
||||
version.launch_script.save=Export Launch Script
|
||||
version.launch_script.success=Exported launch script as %s.
|
||||
version.manage=All Instances
|
||||
@@ -1347,10 +1348,14 @@ version.manage.remove_assets=Delete All Assets
|
||||
version.manage.remove_libraries=Delete All Libraries
|
||||
version.manage.rename=Rename Instance
|
||||
version.manage.rename.message=Enter New Instance Name
|
||||
version.manage.rename.fail=Unable to rename the instance, some files might be in use, or the name contains an invalid character.
|
||||
version.manage.rename.fail=Failed to rename the instance, some files might be in use, or the name contains an invalid character.
|
||||
version.settings=Settings
|
||||
version.update=Update Modpack
|
||||
|
||||
wiki.tooltip=Minecraft Wiki Page
|
||||
wiki.version.game.release=https://minecraft.wiki/w/Java_Edition_%s
|
||||
wiki.version.game.snapshot=https://minecraft.wiki/w/Java_Edition_%s
|
||||
|
||||
wizard.prev=< Prev
|
||||
wizard.failed=Failed
|
||||
wizard.finish=Finish
|
||||
|
||||
@@ -830,7 +830,8 @@ mods.add.success=%s fue instalado con éxito.
|
||||
mods.category=Categoría
|
||||
mods.check_updates=Comprobar actualizaciones
|
||||
mods.check_updates.current_version=Versión actual
|
||||
mods.check_updates.failed=No se han podido descargar algunos de los archivos.
|
||||
mods.check_updates.failed_check=No se ha podido comprobar si hay actualizaciones.
|
||||
mods.check_updates.failed_download=No se han podido descargar algunos de los archivos.
|
||||
mods.check_updates.file=Archivo
|
||||
mods.check_updates.source=Fuente
|
||||
mods.check_updates.target_version=Versión de destino
|
||||
|
||||
@@ -665,7 +665,8 @@ mods.add.success=mods %s が正常に追加されました。
|
||||
mods.category=Category
|
||||
mods.check_updates=更新を確認
|
||||
mods.check_updates.current_version=Current
|
||||
mods.check_updates.failed=一部のファイルのダウンロードに失敗しました
|
||||
mods.check_updates.failed_check=更新のチェックに失敗しました
|
||||
mods.check_updates.failed_download=一部のファイルのダウンロードに失敗しました
|
||||
mods.check_updates.file=ファイル
|
||||
mods.check_updates.source=Source
|
||||
mods.check_updates.target_version=Target
|
||||
|
||||
@@ -696,7 +696,8 @@ mods.add.success=%s был успешно установлен.
|
||||
mods.category=Категория
|
||||
mods.check_updates=Проверить обновления
|
||||
mods.check_updates.current_version=Текущая версия
|
||||
mods.check_updates.failed=Не удаётся скачать некоторые файлы.
|
||||
mods.check_updates.failed_check=Не удалось проверить обновления.
|
||||
mods.check_updates.failed_download=Не удаётся скачать некоторые файлы.
|
||||
mods.check_updates.file=Файл
|
||||
mods.check_updates.source=Источник
|
||||
mods.check_updates.target_version=Целевая версия
|
||||
@@ -743,7 +744,7 @@ world.import.failed=Не удаётся импортировать этот ми
|
||||
world.import.invalid=Не удаётся разобрать сохранение.
|
||||
world.info.title=Сведения о мире %s
|
||||
world.info.basic=Основные сведения
|
||||
world.info.allow_cheats=Разрешить читы
|
||||
world.info.allow_cheats=Разрешить команды/читы
|
||||
world.info.dimension.the_nether=Нижний мир
|
||||
world.info.dimension.the_end=Край
|
||||
world.info.difficulty=Сложность
|
||||
|
||||
@@ -328,7 +328,7 @@ download.existing=檔案已存在,無法儲存。你可以將檔案儲存至
|
||||
download.external_link=打開下載網站
|
||||
download.failed=下載失敗:%1$s\n錯誤碼:%2$d
|
||||
download.failed.empty=沒有可供安裝的版本,按一下此處返回。
|
||||
download.failed.no_code=下載失敗:%s
|
||||
download.failed.no_code=下載失敗
|
||||
download.failed.refresh=載入版本清單失敗,按一下此處重試。
|
||||
download.game=新遊戲
|
||||
download.provider.bmclapi=BMCLAPI (bangbang93, https://bmclapi2.bangbang93.com/)
|
||||
@@ -790,7 +790,8 @@ mods.channel.release=Release
|
||||
mods.check_updates=檢查模組更新
|
||||
mods.check_updates.current_version=目前版本
|
||||
mods.check_updates.empty=沒有需要更新的模組
|
||||
mods.check_updates.failed=部分檔案下載失敗
|
||||
mods.check_updates.failed_check=檢查更新失敗
|
||||
mods.check_updates.failed_download=部分檔案下載失敗
|
||||
mods.check_updates.file=檔案
|
||||
mods.check_updates.source=來源
|
||||
mods.check_updates.target_version=目標版本
|
||||
@@ -855,7 +856,7 @@ world.import.failed=無法匯入此世界: %s
|
||||
world.import.invalid=無法識別的存檔壓縮檔
|
||||
world.info.title=世界 [%s] - 世界資訊
|
||||
world.info.basic=基本資訊
|
||||
world.info.allow_cheats=允許指令
|
||||
world.info.allow_cheats=允許指令(作弊)
|
||||
world.info.dimension.the_nether=地獄
|
||||
world.info.dimension.the_end=末地
|
||||
world.info.difficulty=難易度
|
||||
@@ -1147,6 +1148,10 @@ version.manage.rename.fail=重新命名版本失敗,可能檔案被佔用或
|
||||
version.settings=遊戲設定
|
||||
version.update=更新模組包
|
||||
|
||||
wiki.tooltip=Minecraft Wiki 頁面
|
||||
wiki.version.game.release=https://zh.minecraft.wiki/w/Java版%s?variant=zh-tw
|
||||
wiki.version.game.snapshot=https://zh.minecraft.wiki/w/%s?variant=zh-tw
|
||||
|
||||
wizard.prev=< 上一步
|
||||
wizard.failed=失敗
|
||||
wizard.finish=完成
|
||||
|
||||
@@ -337,7 +337,7 @@ download.existing=文件已存在,无法保存。你可以将文件保存至
|
||||
download.external_link=打开下载网站
|
||||
download.failed=下载失败: %1$s,\n错误码:%2$d\n你可以点击右上角帮助按钮进行求助。
|
||||
download.failed.empty=[没有可供安装的版本,点击此处返回]\n(你可以点击右上角帮助按钮进行求助)
|
||||
download.failed.no_code=下载失败: %s
|
||||
download.failed.no_code=下载失败
|
||||
download.failed.refresh=[加载版本列表失败,点击此处重试]\n(你可以点击右上角帮助按钮进行求助)
|
||||
download.game=新游戏
|
||||
download.provider.bmclapi=BMCLAPI (bangbang93, https://bmclapi2.bangbang93.com)
|
||||
@@ -434,7 +434,7 @@ game.crash.reason.jdk_9=当前游戏由于 Java 版本过高,无法继续运
|
||||
game.crash.reason.jvm_32bit=当前游戏由于内存分配过大,超过了 32 位 Java 内存限制,无法继续运行。\n如果你的电脑是 64 位系统,请下载安装并更换 64 位 Java。<a href="https://bell-sw.com/pages/downloads/#downloads">下载 Java</a>\n如果你的电脑是 32 位系统,你或许可以重新安装 64 位系统,或换一台新电脑。\n或者,你可以在“(全局/版本特定) 游戏设置 → 游戏内存”中关闭“自动分配内存”,并且把内存限制调节为 1024 MB 或以下。
|
||||
game.crash.reason.loading_crashed_forge=当前游戏由于模组“%1$s (%2$s)”错误,无法继续运行。\n你可以尝试删除或更新该模组以解决问题。
|
||||
game.crash.reason.loading_crashed_fabric=当前游戏由于模组“%1$s”错误,无法继续运行。\n你可以尝试删除或更新该模组以解决问题。
|
||||
game.crash.reason.memory_exceeded=当前游戏由于分配的内存过大,无法继续运行。\n该问题是由于系统页面文件太小导致的。\n你需要在全局(特定)游戏设置中关闭游戏内存的自动分配,并将游戏内存调低至游戏能正常启动为止。\n你还可以尝试将 虚拟内存 设置调整至「自动管理所有驱动器分页文件大小」,<a href="https://docs.hmcl.net/assets/img/hmcl/自动管理所有驱动器分页文件大小.webp">详情</a>。
|
||||
game.crash.reason.memory_exceeded=当前游戏由于分配的内存过大,无法继续运行。\n该问题是由于系统页面文件太小导致的。\n你需要在全局(特定)游戏设置中关闭游戏内存的自动分配,并将游戏内存调低至游戏能正常启动为止。\n你还可以尝试将虚拟内存设置调整为“自动管理所有驱动器分页文件大小”,<a href="https://docs.hmcl.net/assets/img/hmcl/自动管理所有驱动器分页文件大小.webp">详情</a>。
|
||||
game.crash.reason.mac_jdk_8u261=当前游戏由于你所使用的 Forge/OptiFine 与 Java 冲突而崩溃。\n请尝试更新 Forge/OptiFine,或使用 Java 8u251 及更早版本启动。
|
||||
game.crash.reason.mod=当前游戏由于“%1$s”的问题,无法继续运行。\n你可以更新或删除已经安装的“%1$s”再试。
|
||||
game.crash.reason.mod_resolution=当前游戏由于模组依赖问题,无法继续运行。Fabric 提供了如下信息:\n%1$s
|
||||
@@ -561,7 +561,7 @@ java.uninstall.confirm=你确定要卸载此 Java 吗?此操作无法撤销!
|
||||
lang=简体中文
|
||||
lang.default=跟随系统语言
|
||||
|
||||
launch.advice==%s 是否继续启动?
|
||||
launch.advice=%s 是否继续启动?
|
||||
launch.advice.multi=检测到以下问题:\n\n%s\n\n这些问题可能导致游戏无法正常启动或影响游戏体验,是否继续启动?\n你可以点击右上角帮助按钮进行求助。
|
||||
launch.advice.java.auto=当前选择的 Java 虚拟机版本不满足游戏要求。\n点击“是”即可由 HMCL 来自动选取合适的 Java 虚拟机版本。\n或者你可以在“(全局/版本特定) 游戏设置 → 游戏 Java”中选择一个合适的 Java 虚拟机版本。
|
||||
launch.advice.java.modded_java_7=Minecraft 1.7.2 及更低版本需要 Java 7 及更低版本。
|
||||
@@ -801,7 +801,8 @@ mods.channel.release=稳定版本
|
||||
mods.check_updates=检查模组更新
|
||||
mods.check_updates.current_version=当前版本
|
||||
mods.check_updates.empty=没有需要更新的模组
|
||||
mods.check_updates.failed=部分文件下载失败
|
||||
mods.check_updates.failed_check=检查更新失败
|
||||
mods.check_updates.failed_download=部分文件下载失败
|
||||
mods.check_updates.file=文件
|
||||
mods.check_updates.source=来源
|
||||
mods.check_updates.target_version=目标版本
|
||||
@@ -867,7 +868,7 @@ world.import.failed=无法导入此世界:%s
|
||||
world.import.invalid=无法识别该存档压缩包
|
||||
world.info.title=世界 [%s] - 世界信息
|
||||
world.info.basic=基本信息
|
||||
world.info.allow_cheats=允许作弊
|
||||
world.info.allow_cheats=允许命令(作弊)
|
||||
world.info.dimension.the_nether=下界
|
||||
world.info.dimension.the_end=末地
|
||||
world.info.difficulty=难度
|
||||
@@ -1158,6 +1159,10 @@ version.manage.rename.fail=重命名版本失败,可能文件被占用或者
|
||||
version.settings=游戏设置
|
||||
version.update=更新整合包
|
||||
|
||||
wiki.tooltip=Minecraft Wiki 页面
|
||||
wiki.version.game.release=https://zh.minecraft.wiki/w/Java版%s?variant=zh-cn
|
||||
wiki.version.game.snapshot=https://zh.minecraft.wiki/w/%s?variant=zh-cn
|
||||
|
||||
wizard.prev=< 上一步
|
||||
wizard.failed=失败
|
||||
wizard.finish=完成
|
||||
|
||||
@@ -82,25 +82,25 @@
|
||||
"module": "javafx.base",
|
||||
"groupId": "org.openjfx",
|
||||
"artifactId": "javafx-base",
|
||||
"version": "17.0.13",
|
||||
"version": "19.0.2.1",
|
||||
"classifier": "mac",
|
||||
"sha1": "e1744403a6691aaa6b65a7e9b4ff9aad98831bb1"
|
||||
"sha1": "73e422d8426aaa23e8c712b9f4d9bebf70d3bfb9"
|
||||
},
|
||||
{
|
||||
"module": "javafx.graphics",
|
||||
"groupId": "org.openjfx",
|
||||
"artifactId": "javafx-graphics",
|
||||
"version": "17.0.13",
|
||||
"version": "19.0.2.1",
|
||||
"classifier": "mac",
|
||||
"sha1": "dbe733470094abee56560067d0fea3ad24991d2b"
|
||||
"sha1": "6ab6f3e23421fcfa04e692d9d26a8f55a830c114"
|
||||
},
|
||||
{
|
||||
"module": "javafx.controls",
|
||||
"groupId": "org.openjfx",
|
||||
"artifactId": "javafx-controls",
|
||||
"version": "17.0.13",
|
||||
"version": "19.0.2.1",
|
||||
"classifier": "mac",
|
||||
"sha1": "0d43a776d6c9e2622e3581ed04501e2cadcd6e65"
|
||||
"sha1": "b7786b1b63e741c0e234829825fae5fef9d96c31"
|
||||
}
|
||||
],
|
||||
"osx-arm64": [
|
||||
@@ -108,25 +108,25 @@
|
||||
"module": "javafx.base",
|
||||
"groupId": "org.openjfx",
|
||||
"artifactId": "javafx-base",
|
||||
"version": "17.0.13",
|
||||
"version": "19.0.2.1",
|
||||
"classifier": "mac-aarch64",
|
||||
"sha1": "d4dc7d2864c07b56a27e39fa5691856ddccf0ba4"
|
||||
"sha1": "1d0d887c492330ed527b0614d115a4f32d2d05a4"
|
||||
},
|
||||
{
|
||||
"module": "javafx.graphics",
|
||||
"groupId": "org.openjfx",
|
||||
"artifactId": "javafx-graphics",
|
||||
"version": "17.0.13",
|
||||
"version": "19.0.2.1",
|
||||
"classifier": "mac-aarch64",
|
||||
"sha1": "d6a49f19e90db56c134757d1bbab4935de075d45"
|
||||
"sha1": "64db28799e61e0f8f51e471c732599b2a6961803"
|
||||
},
|
||||
{
|
||||
"module": "javafx.controls",
|
||||
"groupId": "org.openjfx",
|
||||
"artifactId": "javafx-controls",
|
||||
"version": "17.0.13",
|
||||
"version": "19.0.2.1",
|
||||
"classifier": "mac-aarch64",
|
||||
"sha1": "ad564497edc49f7a6135c3b52d360962e19a2539"
|
||||
"sha1": "3a14bd5f3ebe45d344c1f2bade0fe074e6ea2a83"
|
||||
}
|
||||
],
|
||||
"linux-x86_64": [
|
||||
|
||||
@@ -170,6 +170,7 @@ public final class LibraryAnalyzer implements Iterable<LibraryAnalyzer.LibraryMa
|
||||
Version resolvedVersion = version.resolve(provider);
|
||||
String mainClass = resolvedVersion.getMainClass();
|
||||
return mainClass != null && (LAUNCH_WRAPPER_MAIN.equals(mainClass)
|
||||
|| mainClass.startsWith("net.minecraftforge")
|
||||
|| mainClass.startsWith("net.fabricmc")
|
||||
|| mainClass.startsWith("org.quiltmc")
|
||||
|| mainClass.startsWith("cpw.mods"));
|
||||
|
||||
@@ -33,7 +33,7 @@ public final class GameJavaVersion {
|
||||
public static final GameJavaVersion LATEST = JAVA_21;
|
||||
|
||||
public static GameJavaVersion getMinimumJavaVersion(GameVersionNumber gameVersion) {
|
||||
if (gameVersion.compareTo("1.21") >= 0)
|
||||
if (gameVersion.compareTo("1.20.5") >= 0)
|
||||
return JAVA_21;
|
||||
if (gameVersion.compareTo("1.18") >= 0)
|
||||
return JAVA_17;
|
||||
@@ -59,21 +59,6 @@ public final class GameJavaVersion {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isSupportedPlatform(Platform platform) {
|
||||
OperatingSystem os = platform.getOperatingSystem();
|
||||
Architecture arch = platform.getArchitecture();
|
||||
switch (arch) {
|
||||
case X86:
|
||||
return os == OperatingSystem.WINDOWS || os == OperatingSystem.LINUX;
|
||||
case X86_64:
|
||||
return os == OperatingSystem.WINDOWS || os == OperatingSystem.LINUX || os == OperatingSystem.OSX;
|
||||
case ARM64:
|
||||
return os == OperatingSystem.WINDOWS || os == OperatingSystem.OSX;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<GameJavaVersion> getSupportedVersions(Platform platform) {
|
||||
OperatingSystem operatingSystem = platform.getOperatingSystem();
|
||||
Architecture architecture = platform.getArchitecture();
|
||||
|
||||
@@ -62,7 +62,14 @@ public enum JavaVersionConstraint {
|
||||
return analyzer != null && analyzer.has(LibraryAnalyzer.LibraryType.FORGE);
|
||||
}
|
||||
},
|
||||
MODDED_JAVA_17(false, GameVersionNumber.atLeast("1.18"), VersionNumber.between("17", "17.999")) {
|
||||
MODDED_JAVA_17(false, GameVersionNumber.between("1.18", "1.20.4"), VersionNumber.between("17", "17.999")) {
|
||||
@Override
|
||||
protected boolean appliesToVersionImpl(GameVersionNumber gameVersionNumber, @Nullable Version version,
|
||||
@Nullable JavaRuntime java, @Nullable LibraryAnalyzer analyzer) {
|
||||
return analyzer != null && analyzer.has(LibraryAnalyzer.LibraryType.FORGE);
|
||||
}
|
||||
},
|
||||
MODDED_JAVA_21(false, GameVersionNumber.atLeast("1.20.5"), VersionNumber.between("21", "21.999")) {
|
||||
@Override
|
||||
protected boolean appliesToVersionImpl(GameVersionNumber gameVersionNumber, @Nullable Version version,
|
||||
@Nullable JavaRuntime java, @Nullable LibraryAnalyzer analyzer) {
|
||||
|
||||
@@ -160,12 +160,17 @@ public final class ForgeNewModMetadata {
|
||||
|
||||
private static ModLoaderType analyzeLoader(Toml toml, String modID, int loaderACC, ModLoaderType defaultLoader) throws IOException {
|
||||
List<HashMap<String, Object>> dependencies = toml.getList("dependencies." + modID);
|
||||
if (dependencies != null) {
|
||||
for (HashMap<String, Object> dependency : dependencies) {
|
||||
switch ((String) dependency.get("modId")) {
|
||||
case "forge": return checkLoaderACC(loaderACC, ACC_FORGE, ModLoaderType.FORGE);
|
||||
case "neoforge": return checkLoaderACC(loaderACC, ACC_NEO_FORGED, ModLoaderType.NEO_FORGED);
|
||||
}
|
||||
if (dependencies == null) {
|
||||
dependencies = toml.getList("dependencies"); // ??? I have no idea why some of the Forge mods use [[dependencies]]
|
||||
if (dependencies == null) {
|
||||
return defaultLoader;
|
||||
}
|
||||
}
|
||||
|
||||
for (HashMap<String, Object> dependency : dependencies) {
|
||||
switch ((String) dependency.get("modId")) {
|
||||
case "forge": return checkLoaderACC(loaderACC, ACC_FORGE, ModLoaderType.FORGE);
|
||||
case "neoforge": return checkLoaderACC(loaderACC, ACC_NEO_FORGED, ModLoaderType.NEO_FORGED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.jackhuang.hmcl.mod.modrinth;
|
||||
|
||||
import org.jackhuang.hmcl.download.DefaultDependencyManager;
|
||||
import org.jackhuang.hmcl.game.DefaultGameRepository;
|
||||
import org.jackhuang.hmcl.mod.ModManager;
|
||||
import org.jackhuang.hmcl.mod.ModpackCompletionException;
|
||||
import org.jackhuang.hmcl.task.FileDownloadTask;
|
||||
import org.jackhuang.hmcl.task.Task;
|
||||
@@ -27,6 +28,7 @@ import org.jackhuang.hmcl.util.io.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
@@ -41,6 +43,7 @@ public class ModrinthCompletionTask extends Task<Void> {
|
||||
|
||||
private final DefaultDependencyManager dependency;
|
||||
private final DefaultGameRepository repository;
|
||||
private final ModManager modManager;
|
||||
private final String version;
|
||||
private ModrinthManifest manifest;
|
||||
private final List<Task<?>> dependencies = new ArrayList<>();
|
||||
@@ -69,6 +72,7 @@ public class ModrinthCompletionTask extends Task<Void> {
|
||||
public ModrinthCompletionTask(DefaultDependencyManager dependencyManager, String version, ModrinthManifest manifest) {
|
||||
this.dependency = dependencyManager;
|
||||
this.repository = dependencyManager.getGameRepository();
|
||||
this.modManager = repository.getModManager(version);
|
||||
this.version = version;
|
||||
this.manifest = manifest;
|
||||
|
||||
@@ -99,18 +103,28 @@ public class ModrinthCompletionTask extends Task<Void> {
|
||||
if (manifest == null)
|
||||
return;
|
||||
|
||||
Path runDirectory = repository.getRunDirectory(version).toPath();
|
||||
Path runDirectory = repository.getRunDirectory(version).toPath().toAbsolutePath().normalize();
|
||||
Path modsDirectory = runDirectory.resolve("mods");
|
||||
|
||||
for (ModrinthManifest.File file : manifest.getFiles()) {
|
||||
if (file.getEnv() != null && file.getEnv().getOrDefault("client", "required").equals("unsupported"))
|
||||
continue;
|
||||
Path filePath = runDirectory.resolve(file.getPath());
|
||||
if (!Files.exists(filePath) && !file.getDownloads().isEmpty()) {
|
||||
FileDownloadTask task = new FileDownloadTask(file.getDownloads().get(0), filePath.toFile());
|
||||
task.setCacheRepository(dependency.getCacheRepository());
|
||||
task.setCaching(true);
|
||||
dependencies.add(task.withCounter("hmcl.modpack.download"));
|
||||
}
|
||||
if (file.getDownloads().isEmpty())
|
||||
continue;
|
||||
|
||||
Path filePath = runDirectory.resolve(file.getPath()).toAbsolutePath().normalize();
|
||||
if (!filePath.startsWith(runDirectory))
|
||||
throw new IOException("Unsecure path: " + file.getPath());
|
||||
|
||||
if (Files.exists(filePath))
|
||||
continue;
|
||||
if (modsDirectory.equals(filePath.getParent()) && this.modManager.hasSimpleMod(FileUtils.getName(filePath)))
|
||||
continue;
|
||||
|
||||
FileDownloadTask task = new FileDownloadTask(file.getDownloads(), filePath.toFile());
|
||||
task.setCacheRepository(dependency.getCacheRepository());
|
||||
task.setCaching(true);
|
||||
dependencies.add(task.withCounter("hmcl.modpack.download"));
|
||||
}
|
||||
|
||||
if (!dependencies.isEmpty()) {
|
||||
|
||||
+41
-23
@@ -62,36 +62,54 @@ public final class MultiMCInstanceConfiguration implements ModpackManifest {
|
||||
private final MultiMCManifest mmcPack;
|
||||
|
||||
MultiMCInstanceConfiguration(String defaultName, InputStream contentStream, MultiMCManifest mmcPack) throws IOException {
|
||||
// instance.cfg is in .ini format. As it's like the .properties format, we use Properties to parse thie file.
|
||||
// Maybe this will provide some problems (and it does, such as https://github.com/HMCL-dev/HMCL/issues/2991), but this workaround works, doesn't it?
|
||||
Properties p = new Properties();
|
||||
p.load(new InputStreamReader(contentStream, StandardCharsets.UTF_8));
|
||||
|
||||
this.mmcPack = mmcPack;
|
||||
|
||||
instanceType = p.getProperty("InstanceType");
|
||||
autoCloseConsole = Boolean.parseBoolean(p.getProperty("AutoCloseConsole"));
|
||||
instanceType = readValue(p, "InstanceType");
|
||||
autoCloseConsole = Boolean.parseBoolean(readValue(p, "AutoCloseConsole"));
|
||||
gameVersion = mmcPack != null ? mmcPack.getComponents().stream().filter(e -> "net.minecraft".equals(e.getUid())).findAny()
|
||||
.orElseThrow(() -> new IOException("Malformed mmc-pack.json")).getVersion() : p.getProperty("IntendedVersion");
|
||||
javaPath = p.getProperty("JavaPath");
|
||||
jvmArgs = p.getProperty("JvmArgs");
|
||||
fullscreen = Boolean.parseBoolean(p.getProperty("LaunchMaximized"));
|
||||
maxMemory = Lang.toIntOrNull(p.getProperty("MaxMemAlloc"));
|
||||
minMemory = Lang.toIntOrNull(p.getProperty("MinMemAlloc"));
|
||||
height = Lang.toIntOrNull(p.getProperty("MinecraftWinHeight"));
|
||||
width = Lang.toIntOrNull(p.getProperty("MinecraftWinWidth"));
|
||||
overrideCommands = Boolean.parseBoolean(p.getProperty("OverrideCommands"));
|
||||
overrideConsole = Boolean.parseBoolean(p.getProperty("OverrideConsole"));
|
||||
overrideJavaArgs = Boolean.parseBoolean(p.getProperty("OverrideJavaArgs"));
|
||||
overrideJavaLocation = Boolean.parseBoolean(p.getProperty("OverrideJavaLocation"));
|
||||
overrideMemory = Boolean.parseBoolean(p.getProperty("OverrideMemory"));
|
||||
overrideWindow = Boolean.parseBoolean(p.getProperty("OverrideWindow"));
|
||||
permGen = Lang.toIntOrNull(p.getProperty("PermGen"));
|
||||
postExitCommand = p.getProperty("PostExitCommand");
|
||||
preLaunchCommand = p.getProperty("PreLaunchCommand");
|
||||
showConsole = Boolean.parseBoolean(p.getProperty("ShowConsole"));
|
||||
showConsoleOnError = Boolean.parseBoolean(p.getProperty("ShowConsoleOnError"));
|
||||
wrapperCommand = p.getProperty("WrapperCommand");
|
||||
.orElseThrow(() -> new IOException("Malformed mmc-pack.json")).getVersion() : readValue(p, "IntendedVersion");
|
||||
javaPath = readValue(p, "JavaPath");
|
||||
jvmArgs = readValue(p, "JvmArgs");
|
||||
fullscreen = Boolean.parseBoolean(readValue(p, "LaunchMaximized"));
|
||||
maxMemory = Lang.toIntOrNull(readValue(p, "MaxMemAlloc"));
|
||||
minMemory = Lang.toIntOrNull(readValue(p, "MinMemAlloc"));
|
||||
height = Lang.toIntOrNull(readValue(p, "MinecraftWinHeight"));
|
||||
width = Lang.toIntOrNull(readValue(p, "MinecraftWinWidth"));
|
||||
overrideCommands = Boolean.parseBoolean(readValue(p, "OverrideCommands"));
|
||||
overrideConsole = Boolean.parseBoolean(readValue(p, "OverrideConsole"));
|
||||
overrideJavaArgs = Boolean.parseBoolean(readValue(p, "OverrideJavaArgs"));
|
||||
overrideJavaLocation = Boolean.parseBoolean(readValue(p, "OverrideJavaLocation"));
|
||||
overrideMemory = Boolean.parseBoolean(readValue(p, "OverrideMemory"));
|
||||
overrideWindow = Boolean.parseBoolean(readValue(p, "OverrideWindow"));
|
||||
permGen = Lang.toIntOrNull(readValue(p, "PermGen"));
|
||||
postExitCommand = readValue(p, "PostExitCommand");
|
||||
preLaunchCommand = readValue(p, "PreLaunchCommand");
|
||||
showConsole = Boolean.parseBoolean(readValue(p, "ShowConsole"));
|
||||
showConsoleOnError = Boolean.parseBoolean(readValue(p, "ShowConsoleOnError"));
|
||||
wrapperCommand = readValue(p, "WrapperCommand");
|
||||
name = defaultName;
|
||||
notes = Optional.ofNullable(p.getProperty("notes")).orElse("");
|
||||
notes = Optional.ofNullable(readValue(p, "notes")).orElse("");
|
||||
}
|
||||
|
||||
/**
|
||||
* A workaround for <a href="https://github.com/HMCL-dev/HMCL/issues/2991">...</a>
|
||||
*/
|
||||
private String readValue(Properties p, String key) {
|
||||
String value = p.getProperty(key);
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
int l = value.length();
|
||||
if (l >= 2 && value.charAt(0) == '"' && value.charAt(l - 1) == ':') {
|
||||
return value.substring(0, l - 1);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
public MultiMCInstanceConfiguration(String instanceType, String name, String gameVersion, Integer permGen, String wrapperCommand, String preLaunchCommand, String postExitCommand, String notes, String javaPath, String jvmArgs, boolean fullscreen, Integer width, Integer height, Integer maxMemory, Integer minMemory, boolean showConsole, boolean showConsoleOnError, boolean autoCloseConsole, boolean overrideMemory, boolean overrideJavaLocation, boolean overrideJavaArgs, boolean overrideConsole, boolean overrideCommands, boolean overrideWindow) {
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
package org.jackhuang.hmcl.util.io;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.FileVisitResult;
|
||||
import java.nio.file.FileVisitor;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
|
||||
final class DirectoryStructurePrinter {
|
||||
private DirectoryStructurePrinter() {
|
||||
}
|
||||
|
||||
public static String list(Path path, int maxDepth) throws IOException {
|
||||
StringBuilder output = new StringBuilder(128);
|
||||
list(path, maxDepth, output);
|
||||
output.setLength(output.length() - 1);
|
||||
return output.toString();
|
||||
}
|
||||
|
||||
private static void list(Path path, int maxDepth, StringBuilder output) throws IOException {
|
||||
output.append("Filesystem structure of: ").append(path).append('\n');
|
||||
|
||||
if (!Files.exists(path)) {
|
||||
pushMessage(output, "nonexistent path", 1);
|
||||
return;
|
||||
}
|
||||
if (Files.isRegularFile(path)) {
|
||||
pushMessage(output, "regular file path", 1);
|
||||
return;
|
||||
}
|
||||
if (Files.isDirectory(path)) {
|
||||
Files.walkFileTree(path, new FileVisitor<Path>() {
|
||||
private boolean isFolderEmpty;
|
||||
|
||||
private int depth = 1;
|
||||
|
||||
@Override
|
||||
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
|
||||
isFolderEmpty = true;
|
||||
|
||||
pushFile(output, dir, depth);
|
||||
if (depth == maxDepth) {
|
||||
pushMessage(output, "too deep", depth);
|
||||
return FileVisitResult.SKIP_SUBTREE;
|
||||
}
|
||||
|
||||
depth++;
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
|
||||
isFolderEmpty = false;
|
||||
|
||||
pushFile(output, file, depth);
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileVisitResult visitFileFailed(Path file, IOException exc) {
|
||||
visitFile(file, null);
|
||||
|
||||
pushMessage(output, exc.toString(), depth);
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
|
||||
if (isFolderEmpty) {
|
||||
pushMessage(output, "empty directory", depth);
|
||||
}
|
||||
|
||||
depth--;
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
pushMessage(output, "unknown file type", 1);
|
||||
}
|
||||
|
||||
private static void pushFile(StringBuilder output, Path file, int depth) {
|
||||
output.append("|");
|
||||
for (int i = 1; i < depth; i++) {
|
||||
output.append(" |");
|
||||
}
|
||||
output.append("-> ").append(FileUtils.getName(file)).append('\n');
|
||||
}
|
||||
|
||||
private static void pushMessage(StringBuilder output, String message, int depth) {
|
||||
output.append("| ");
|
||||
for (int i = 1; i < depth; i++) {
|
||||
output.append(" | ");
|
||||
}
|
||||
output.append('<').append(message).append(">\n");
|
||||
}
|
||||
}
|
||||
@@ -30,11 +30,7 @@ import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
@@ -199,7 +195,7 @@ public final class FileUtils {
|
||||
* It will create the file if it does not exist, or truncate the existing file to empty for rewriting.
|
||||
* All bytes in byte array will be written into the file in binary format. Existing data will be erased.
|
||||
*
|
||||
* @param file the path to the file
|
||||
* @param file the path to the file
|
||||
* @param data the data being written to file
|
||||
* @throws IOException if an I/O error occurs
|
||||
*/
|
||||
@@ -212,7 +208,7 @@ public final class FileUtils {
|
||||
* It will create the file if it does not exist, or truncate the existing file to empty for rewriting.
|
||||
* All bytes in byte array will be written into the file in binary format. Existing data will be erased.
|
||||
*
|
||||
* @param file the path to the file
|
||||
* @param file the path to the file
|
||||
* @param data the data being written to file
|
||||
* @throws IOException if an I/O error occurs
|
||||
*/
|
||||
@@ -591,4 +587,8 @@ public final class FileUtils {
|
||||
|
||||
Files.move(tmpFile, file, StandardCopyOption.REPLACE_EXISTING);
|
||||
}
|
||||
|
||||
public static String printFileStructure(Path path, int maxDepth) throws IOException {
|
||||
return DirectoryStructurePrinter.list(path, maxDepth);
|
||||
}
|
||||
}
|
||||
@@ -94,6 +94,13 @@ tasks.create("checkTranslations") {
|
||||
}
|
||||
}
|
||||
|
||||
zh_CN.forEach {
|
||||
if (it.value.toString().contains("其它")) {
|
||||
project.logger.warn("The misspelled '其它' in '${it.key}' should be replaced by '其他'")
|
||||
success = false
|
||||
}
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
throw GradleException("Part of the translation is missing")
|
||||
}
|
||||
|
||||
+2
-2
@@ -33,8 +33,8 @@ val jfxPlatforms = listOf(
|
||||
Platform("windows-x86", "win-x86", version = oldJfxVersion),
|
||||
Platform("windows-x86_64", "win"),
|
||||
Platform("windows-arm64", "win", groupId = "org.glavo.hmcl.openjfx", version = "18.0.2+1-arm64"),
|
||||
Platform("osx-x86_64", "mac"),
|
||||
Platform("osx-arm64", "mac-aarch64"),
|
||||
Platform("osx-x86_64", "mac", version = oldJfxVersion),
|
||||
Platform("osx-arm64", "mac-aarch64", version = oldJfxVersion),
|
||||
Platform("linux-x86_64", "linux"),
|
||||
Platform("linux-arm32", "linux-arm32-monocle", version = oldJfxVersion),
|
||||
Platform("linux-arm64", "linux-aarch64", version = oldJfxVersion),
|
||||
|
||||
Reference in new issue
Block a user