From fc017515c544fbb9abc720ab313c33bb881d5c29 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Sun, 30 May 2021 03:34:44 +0800 Subject: [PATCH] feat: check style & format --- .../java/org/jackhuang/hmcl/Launcher.java | 2 +- .../main/java/org/jackhuang/hmcl/Main.java | 3 + .../hmcl/game/HMCLModpackManager.java | 8 +- .../jackhuang/hmcl/game/TexturesLoader.java | 14 +-- .../org/jackhuang/hmcl/setting/Settings.java | 6 +- .../hmcl/setting/VersionSetting.java | 2 - .../java/org/jackhuang/hmcl/ui/AwtUtils.java | 5 +- .../org/jackhuang/hmcl/ui/Controllers.java | 3 + .../jackhuang/hmcl/ui/DialogController.java | 6 +- .../java/org/jackhuang/hmcl/ui/FXUtils.java | 1 + .../org/jackhuang/hmcl/ui/InstallerItem.java | 12 +- .../hmcl/ui/animation/AnimationHandler.java | 3 + .../hmcl/ui/construct/FloatScrollBarSkin.java | 5 +- .../hmcl/ui/construct/SpinnerPane.java | 14 +-- .../hmcl/ui/construct/TabControl.java | 2 +- .../decorator/DecoratorWizardDisplayer.java | 1 - .../ui/export/ModpackFileSelectionPage.java | 20 ++-- .../jackhuang/hmcl/ui/main/SettingsView.java | 4 + .../hmcl/ui/profile/ProfilePage.java | 1 + .../hmcl/ui/versions/VersionSettingsPage.java | 5 +- .../jackhuang/hmcl/ui/versions/Versions.java | 6 +- .../hmcl/ui/versions/WorldExportPage.java | 1 - .../hmcl/ui/versions/WorldExportPageSkin.java | 1 - .../jackhuang/hmcl/ui/wizard/Navigation.java | 6 + .../hmcl/ui/wizard/WizardProvider.java | 4 + .../jackhuang/hmcl/util/JavaFXPatcher.java | 5 +- .../hmcl/util/SelfDependencyPatcher.java | 11 +- .../org/jackhuang/hmcl/util/i18n/Locales.java | 20 +++- .../jackhuang/hmcl/util/JavaFXPatcher.java | 5 +- .../authlibinjector/AuthlibInjectorDnD.java | 12 +- .../auth/offline/OfflineAccountFactory.java | 2 +- .../auth/yggdrasil/PropertyMapSerializer.java | 13 +-- .../download/AdaptedDownloadProvider.java | 2 - .../jackhuang/hmcl/download/GameBuilder.java | 2 +- .../download/forge/ForgeNewInstallTask.java | 2 +- .../game/GameAssetIndexDownloadTask.java | 1 - .../game/GameVerificationFixTask.java | 6 - .../hmcl/download/java/JavaRepository.java | 2 + .../optifine/OptiFineInstallTask.java | 8 +- .../event/ProcessExitedAbnormallyEvent.java | 4 +- .../hmcl/event/RefreshedVersionsEvent.java | 2 +- .../hmcl/game/GameDirectoryType.java | 2 +- .../jackhuang/hmcl/game/GameRepository.java | 2 +- .../org/jackhuang/hmcl/game/GameVersion.java | 3 + .../jackhuang/hmcl/mod/FabricModMetadata.java | 2 +- .../java/org/jackhuang/hmcl/mod/ModInfo.java | 4 +- .../hmcl/mod/ModpackConfiguration.java | 3 +- .../hmcl/mod/curse/CurseMetaMod.java | 2 +- .../hmcl/mod/multimc/MultiMCManifest.java | 2 - .../multimc/MultiMCModpackInstallTask.java | 10 +- .../java/org/jackhuang/hmcl/task/Task.java | 1 - .../org/jackhuang/hmcl/util/Log4jLevel.java | 1 + .../java/org/jackhuang/hmcl/util/Logging.java | 2 + .../java/org/jackhuang/hmcl/util/Pair.java | 2 +- .../jackhuang/hmcl/util/ReflectionHelper.java | 6 +- .../util/function/ExceptionalBiFunction.java | 2 +- .../util/gson/JsonTypeAdapterFactory.java | 1 - .../jackhuang/hmcl/util/gson/Validation.java | 2 +- .../util/io/ChecksumMismatchException.java | 6 +- .../org/jackhuang/hmcl/util/io/FileUtils.java | 23 ++-- .../org/jackhuang/hmcl/util/io/JarUtils.java | 2 + .../jackhuang/hmcl/util/io/NetworkUtils.java | 1 + .../org/jackhuang/hmcl/util/io/Zipper.java | 1 - .../hmcl/util/javafx/BindingMapping.java | 15 ++- .../hmcl/util/javafx/MappedProperty.java | 90 +++++++-------- .../hmcl/util/versioning/VersionNumber.java | 2 +- build.gradle | 5 + config/checkstyle/checkstyle.xml | 108 ++++++++++++++++++ 68 files changed, 347 insertions(+), 185 deletions(-) create mode 100644 config/checkstyle/checkstyle.xml diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index 8fa9823bd..23623e28d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -163,7 +163,7 @@ public final class Launcher extends Application { File jarFile = new File(Launcher.class.getProtectionDomain().getCodeSource().getLocation().getPath()); String ext = FileUtils.getExtension(jarFile); if ("jar".equals(ext) || "exe".equals(ext)) - result.add(jarFile); + result.add(jarFile); } if (result.isEmpty()) return null; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java index ba9f81842..9a82d1799 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java @@ -43,6 +43,9 @@ import static org.jackhuang.hmcl.util.i18n.I18n.i18n; public final class Main { + private Main() { + } + public static void main(String[] args) { System.setProperty("java.net.useSystemProxies", "true"); System.setProperty("http.agent", "HMCL/" + Metadata.VERSION); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java index 0dfd85d79..577e47139 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java @@ -31,15 +31,17 @@ import java.nio.file.Path; * @author huangyuhui */ public final class HMCLModpackManager { + private HMCLModpackManager() { + } /** * Read the manifest in a HMCL modpack. * - * @param file a HMCL modpack file. + * @param file a HMCL modpack file. * @param encoding encoding of modpack zip file. - * @throws IOException if the file is not a valid zip file. - * @throws JsonParseException if the manifest.json is missing or malformed. * @return the manifest of HMCL modpack. + * @throws IOException if the file is not a valid zip file. + * @throws JsonParseException if the manifest.json is missing or malformed. */ public static Modpack readHMCLModpackManifest(Path file, Charset encoding) throws IOException, JsonParseException { String manifestJson = CompressingUtils.readTextZipEntry(file, "modpack.json", encoding); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java index 7e946e756..3f8969aa4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java @@ -26,11 +26,7 @@ import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.ServerResponseMalformedException; import org.jackhuang.hmcl.auth.microsoft.MicrosoftAccount; -import org.jackhuang.hmcl.auth.yggdrasil.Texture; -import org.jackhuang.hmcl.auth.yggdrasil.TextureModel; -import org.jackhuang.hmcl.auth.yggdrasil.TextureType; -import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilAccount; -import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilService; +import org.jackhuang.hmcl.auth.yggdrasil.*; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.util.ResourceNotFoundError; import org.jackhuang.hmcl.util.StringUtils; @@ -39,13 +35,15 @@ import org.jackhuang.hmcl.util.javafx.BindingMapping; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; -import java.awt.image.WritableRaster; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; +import java.util.EnumMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -263,4 +261,4 @@ public final class TexturesLoader { } return wr; } -} \ No newline at end of file +} diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java index 6623d5dab..0f20d995d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -23,11 +23,11 @@ import org.jackhuang.hmcl.game.HMCLCacheRepository; import org.jackhuang.hmcl.util.CacheRepository; import org.jackhuang.hmcl.util.io.FileUtils; -import static org.jackhuang.hmcl.setting.ConfigHolder.config; - import java.util.Locale; -public class Settings { +import static org.jackhuang.hmcl.setting.ConfigHolder.config; + +public final class Settings { private static Settings instance; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java index 7de512572..caae75806 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java @@ -44,8 +44,6 @@ import java.util.stream.Collectors; @JsonAdapter(VersionSetting.Serializer.class) public final class VersionSetting implements Cloneable { - public transient String id; - private boolean global = false; public boolean isGlobal() { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AwtUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AwtUtils.java index 248399375..fc5335a63 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AwtUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AwtUtils.java @@ -3,7 +3,10 @@ package org.jackhuang.hmcl.ui; import java.awt.*; import java.lang.reflect.Method; -public class AwtUtils { +public final class AwtUtils { + private AwtUtils() { + } + public static void setAppleIcon(Image image) { try { Class taskbarClass = Class.forName("java.awt.TaskBar"); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index 20d361998..000cb482f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -66,6 +66,9 @@ public final class Controllers { private static RootPage rootPage; private static DecoratorController decorator; + private Controllers() { + } + public static Scene getScene() { return scene; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java index 8e05e8866..b2d52423b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java @@ -31,6 +31,8 @@ import java.util.concurrent.atomic.AtomicReference; import static org.jackhuang.hmcl.ui.FXUtils.runInFX; public final class DialogController { + private DialogController() { + } public static AuthInfo logIn(Account account) throws CancellationException, AuthenticationException, InterruptedException { if (account instanceof YggdrasilAccount) { @@ -38,8 +40,8 @@ public final class DialogController { AtomicReference res = new AtomicReference<>(null); runInFX(() -> { AccountLoginPane pane = new AccountLoginPane(account, it -> { - res.set(it); - latch.countDown(); + res.set(it); + latch.countDown(); }, latch::countDown); Controllers.dialog(pane); }); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 3bdfdf3b1..cf29bad26 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -430,6 +430,7 @@ public final class FXUtils { * You should only and always use {@code bindEnum} as well as {@code unbindEnum} at the same time. * @param comboBox the combo box being bound with the property which can be inferred by {@code bindEnum}. * @see #bindEnum(JFXComboBox, Property) + * @deprecated Use {@link ExtendedProperties#selectedItemPropertyFor(ComboBox)} */ @SuppressWarnings("unchecked") @Deprecated diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java index c61bb1dab..153f75875 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java @@ -102,11 +102,11 @@ public class InstallerItem extends Control { } public static class InstallerItemGroup { - public InstallerItem game = new InstallerItem(MINECRAFT); - public InstallerItem fabric = new InstallerItem(FABRIC); - public InstallerItem forge = new InstallerItem(FORGE); - public InstallerItem liteLoader = new InstallerItem(LITELOADER); - public InstallerItem optiFine = new InstallerItem(OPTIFINE); + public final InstallerItem game = new InstallerItem(MINECRAFT); + public final InstallerItem fabric = new InstallerItem(FABRIC); + public final InstallerItem forge = new InstallerItem(FORGE); + public final InstallerItem liteLoader = new InstallerItem(LITELOADER); + public final InstallerItem optiFine = new InstallerItem(OPTIFINE); public InstallerItemGroup() { forge.incompatibleLibraryName.bind(Bindings.createStringBinding(() -> { @@ -133,7 +133,7 @@ public class InstallerItem extends Control { } public InstallerItem[] getLibraries() { - return new InstallerItem[]{game, fabric, forge, liteLoader, optiFine}; + return new InstallerItem[]{game, fabric, forge, liteLoader, optiFine}; } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/AnimationHandler.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/AnimationHandler.java index c617ee9e0..b3c46a105 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/AnimationHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/AnimationHandler.java @@ -23,7 +23,10 @@ import javafx.util.Duration; public interface AnimationHandler { Duration getDuration(); + Pane getCurrentRoot(); + Node getPreviousNode(); + Node getCurrentNode(); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FloatScrollBarSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FloatScrollBarSkin.java index 821ed6801..c14b73c03 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FloatScrollBarSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FloatScrollBarSkin.java @@ -99,9 +99,10 @@ public class FloatScrollBarSkin implements Skin { // we're getting dragged without getting a mouse press dragStart = thumb.localToParent(me.getX(), me.getY()); } - double dragPos = getSkinnable().getOrientation() == Orientation.VERTICAL ? cur.getY() - dragStart.getY(): cur.getX() - dragStart.getX(); + double dragPos = getSkinnable().getOrientation() == Orientation.VERTICAL ? cur.getY() - dragStart.getY() : cur.getX() - dragStart.getX(); double position = preDragThumbPos + dragPos / (trackLength() - thumbLength()); - if (!getSkinnable().isFocused() && getSkinnable().isFocusTraversable()) getSkinnable().requestFocus(); + if (!getSkinnable().isFocused() && getSkinnable().isFocusTraversable()) + getSkinnable().requestFocus(); double newValue = (position * (getSkinnable().getMax() - getSkinnable().getMin())) + getSkinnable().getMin(); if (!Double.isNaN(newValue)) { getSkinnable().setValue(Lang.clamp(getSkinnable().getMin(), newValue, getSkinnable().getMax())); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/SpinnerPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/SpinnerPane.java index 55499d145..a2bf9198f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/SpinnerPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/SpinnerPane.java @@ -42,11 +42,11 @@ public class SpinnerPane extends Control { private final BooleanProperty loading = new SimpleBooleanProperty(this, "loading"); public void showSpinner() { - setLoading(true); + setLoading(true); } public void hideSpinner() { - setLoading(false); + setLoading(false); } public Node getContent() { @@ -62,15 +62,15 @@ public class SpinnerPane extends Control { } public boolean isLoading() { - return loading.get(); + return loading.get(); } - + public BooleanProperty loadingProperty() { - return loading; + return loading; } - + public void setLoading(boolean loading) { - this.loading.set(loading); + this.loading.set(loading); } @Override diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TabControl.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TabControl.java index b5965add9..f4fd58746 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TabControl.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TabControl.java @@ -174,7 +174,7 @@ public interface TabControl { } } - public static class Tab { + class Tab { private final StringProperty id = new SimpleStringProperty(this, "id"); private final StringProperty text = new SimpleStringProperty(this, "text"); private final ReadOnlyBooleanWrapper selected = new ReadOnlyBooleanWrapper(this, "selected"); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorWizardDisplayer.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorWizardDisplayer.java index b995b1c1e..ed6164e7f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorWizardDisplayer.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorWizardDisplayer.java @@ -25,7 +25,6 @@ import org.jackhuang.hmcl.ui.construct.PageCloseEvent; import org.jackhuang.hmcl.ui.wizard.*; import java.util.Map; -import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; public class DecoratorWizardDisplayer extends DecoratorTransitionPage implements WizardDisplayer { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackFileSelectionPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackFileSelectionPage.java index b4c230cce..838f842b0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackFileSelectionPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackFileSelectionPage.java @@ -87,21 +87,24 @@ public final class ModpackFileSelectionPage extends StackPane implements WizardP if (file.isDirectory()) { File[] files = file.listFiles(); - if (files != null) + if (files != null) { for (File it : files) { CheckBoxTreeItem subNode = getTreeItem(it, basePath + "/" + it.getName()); - if (subNode != null) { - node.setSelected(subNode.isSelected() || node.isSelected()); - if (!subNode.isSelected()) - node.setIndeterminate(true); - node.getChildren().add(subNode); + if (subNode != null) { + node.setSelected(subNode.isSelected() || node.isSelected()); + if (!subNode.isSelected()) { + node.setIndeterminate(true); + } + node.getChildren().add(subNode); + } } } if (!node.isSelected()) node.setIndeterminate(false); // Empty folder need not to be displayed. - if (node.getChildren().isEmpty()) + if (node.getChildren().isEmpty()) { return null; + } } HBox graphic = new HBox(); @@ -130,8 +133,9 @@ public final class ModpackFileSelectionPage extends StackPane implements WizardP if (basePath.length() > "minecraft/".length()) list.add(StringUtils.substringAfter(basePath, "minecraft/")); for (TreeItem child : node.getChildren()) { - if (child instanceof CheckBoxTreeItem) + if (child instanceof CheckBoxTreeItem) { getFilesNeeded(((CheckBoxTreeItem) child), basePath + "/" + child.getValue(), list); + } } } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsView.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsView.java index b063929e0..a7073cd40 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsView.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsView.java @@ -535,8 +535,12 @@ public abstract class SettingsView extends StackPane { } protected abstract void onUpdate(); + protected abstract void onHelp(); + protected abstract void onExportLogs(); + protected abstract void onSponsor(); + protected abstract void clearCacheDirectory(); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfilePage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfilePage.java index e5ad0caa7..86dcec548 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfilePage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfilePage.java @@ -68,6 +68,7 @@ public final class ProfilePage extends StackPane implements DecoratorPage { { setMessage(i18n("profile.already_exists")); } + @Override protected void eval() { JFXTextField control = (JFXTextField) this.getSrcControl(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java index 29d44c622..572bc1abf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java @@ -36,7 +36,10 @@ import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import org.jackhuang.hmcl.game.GameDirectoryType; import org.jackhuang.hmcl.game.NativesDirectoryType; -import org.jackhuang.hmcl.setting.*; +import org.jackhuang.hmcl.setting.LauncherVisibility; +import org.jackhuang.hmcl.setting.Profile; +import org.jackhuang.hmcl.setting.Profiles; +import org.jackhuang.hmcl.setting.VersionSetting; import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.ui.Controllers; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java index e28998cde..e66668af6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java @@ -46,7 +46,9 @@ import java.util.logging.Level; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; -public class Versions { +public final class Versions { + private Versions() { + } public static void deleteVersion(Profile profile, String version) { boolean isIndependent = profile.getVersionSetting(version).getGameDirType() == GameDirectoryType.VERSION_FOLDER; @@ -156,7 +158,7 @@ public class Versions { Controllers.getRootPage().checkAccount(); else if (id == null || !profile.getRepository().isLoaded() || !profile.getRepository().hasVersion(id)) Controllers.dialog(i18n("version.empty.launch"), i18n("launch.failed"), MessageDialogPane.MessageType.ERROR, () -> { - Controllers.getRootPage().getSelectionModel().select(Controllers.getRootPage().getGameTab()); + Controllers.getRootPage().getSelectionModel().select(Controllers.getRootPage().getGameTab()); }); else return true; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldExportPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldExportPage.java index 3c54d08d0..5179a303d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldExportPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldExportPage.java @@ -50,7 +50,6 @@ public class WorldExportPage extends WizardSinglePage { return new WorldExportPageSkin(this); } - public StringProperty pathProperty() { return path; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldExportPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldExportPageSkin.java index 0b43f7165..ad388d129 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldExportPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldExportPageSkin.java @@ -94,5 +94,4 @@ public class WorldExportPageSkin extends SkinBase { getChildren().setAll(container); } - } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/wizard/Navigation.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/wizard/Navigation.java index 9d1a16abe..b5b2ecb68 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/wizard/Navigation.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/wizard/Navigation.java @@ -22,11 +22,17 @@ import org.jackhuang.hmcl.ui.animation.ContainerAnimations; public interface Navigation { void onStart(); + void onNext(); + void onPrev(boolean cleanUp); + boolean canPrev(); + void onFinish(); + void onEnd(); + void onCancel(); enum NavigationDirection { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/wizard/WizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/wizard/WizardProvider.java index 4afa80532..e2ccc5086 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/wizard/WizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/wizard/WizardProvider.java @@ -23,9 +23,13 @@ import java.util.Map; public interface WizardProvider { void start(Map settings); + Object finish(Map settings); + Node createPage(WizardController controller, int step, Map settings); + boolean cancel(); + default boolean cancelIfCannotGoBack() { return false; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/JavaFXPatcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/JavaFXPatcher.java index 259179a60..ab60e8e53 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/JavaFXPatcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/JavaFXPatcher.java @@ -8,7 +8,10 @@ import java.util.Set; * * @author ZekerZhayard */ -public class JavaFXPatcher { +public final class JavaFXPatcher { + private JavaFXPatcher() { + } + public static void patch(Set modules, Path... jarPaths) { // Nothing to do with Java 8 } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/SelfDependencyPatcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/SelfDependencyPatcher.java index 1837d3664..2e7a16735 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/SelfDependencyPatcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/SelfDependencyPatcher.java @@ -30,7 +30,10 @@ import static org.jackhuang.hmcl.util.platform.JavaVersion.CURRENT_JAVA; * * @author Matt */ -public class SelfDependencyPatcher { +public final class SelfDependencyPatcher { + private SelfDependencyPatcher() { + } + private static final Path DEPENDENCIES_DIR_PATH = HMCL_DIRECTORY.resolve("dependencies"); private static final String DEFAULT_JFX_VERSION = "16"; private static final Map JFX_DEPENDENCIES = new HashMap<>(); @@ -106,10 +109,8 @@ public class SelfDependencyPatcher { /** * Inject them into the current classpath. * - * @throws IOException - * When the locally cached dependency urls cannot be resolved. - * @throws ReflectiveOperationException - * When the call to add these urls to the system classpath failed. + * @throws IOException When the locally cached dependency urls cannot be resolved. + * @throws ReflectiveOperationException When the call to add these urls to the system classpath failed. */ private static void loadFromCache() throws IOException, ReflectiveOperationException { LOG.info(" - Loading dependencies..."); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java index 1954ad1d1..1e5994e85 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java @@ -28,6 +28,8 @@ import java.util.Locale; import java.util.ResourceBundle; public final class Locales { + private Locales() { + } public static final SupportedLocale DEFAULT = new SupportedLocale(Locale.getDefault(), "lang.default"); @@ -61,12 +63,18 @@ public final class Locales { public static SupportedLocale getLocaleByName(String name) { if (name == null) return DEFAULT; switch (name.toLowerCase()) { - case "en": return EN; - case "zh": return ZH; - case "zh_cn": return ZH_CN; - case "es": return ES; - case "ru": return RU; - default: return DEFAULT; + case "en": + return EN; + case "zh": + return ZH; + case "zh_cn": + return ZH_CN; + case "es": + return ES; + case "ru": + return RU; + default: + return DEFAULT; } } diff --git a/HMCL/src/main/java11/org/jackhuang/hmcl/util/JavaFXPatcher.java b/HMCL/src/main/java11/org/jackhuang/hmcl/util/JavaFXPatcher.java index 59d544c32..8814f9f95 100644 --- a/HMCL/src/main/java11/org/jackhuang/hmcl/util/JavaFXPatcher.java +++ b/HMCL/src/main/java11/org/jackhuang/hmcl/util/JavaFXPatcher.java @@ -17,7 +17,10 @@ import jdk.internal.loader.BuiltinClassLoader; * * @author ZekerZhayard */ -public class JavaFXPatcher { +public final class JavaFXPatcher { + private JavaFXPatcher() { + } + private static final String[] addOpens = { "javafx.base/com.sun.javafx.runtime", "javafx.base/com.sun.javafx.binding", diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorDnD.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorDnD.java index 768951229..8087ad612 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorDnD.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorDnD.java @@ -17,19 +17,19 @@ */ package org.jackhuang.hmcl.auth.authlibinjector; -import static org.jackhuang.hmcl.util.io.NetworkUtils.decodeURL; - -import java.util.Optional; -import java.util.function.Consumer; - import javafx.event.EventHandler; import javafx.scene.input.DragEvent; import javafx.scene.input.Dragboard; import javafx.scene.input.TransferMode; +import java.util.Optional; +import java.util.function.Consumer; + +import static org.jackhuang.hmcl.util.io.NetworkUtils.decodeURL; + /** * @author yushijinhun - * @see https://github.com/yushijinhun/authlib-injector/wiki/%E5%90%AF%E5%8A%A8%E5%99%A8%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83#dnd-%E6%96%B9%E5%BC%8F%E6%B7%BB%E5%8A%A0-yggdrasil-%E6%9C%8D%E5%8A%A1%E7%AB%AF + * @see Launcher Technical Specification for Authlib-Injector */ public final class AuthlibInjectorDnD { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccountFactory.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccountFactory.java index 8dd2e6cc0..92d319f4a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccountFactory.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccountFactory.java @@ -31,7 +31,7 @@ import static org.jackhuang.hmcl.util.Lang.tryCast; * * @author huangyuhui */ -public class OfflineAccountFactory extends AccountFactory { +public final class OfflineAccountFactory extends AccountFactory { public static final OfflineAccountFactory INSTANCE = new OfflineAccountFactory(); private OfflineAccountFactory() { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/PropertyMapSerializer.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/PropertyMapSerializer.java index 0b791c4e3..f21781b32 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/PropertyMapSerializer.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/PropertyMapSerializer.java @@ -17,20 +17,13 @@ */ package org.jackhuang.hmcl.auth.yggdrasil; -import static java.util.Collections.unmodifiableMap; +import com.google.gson.*; import java.lang.reflect.Type; import java.util.LinkedHashMap; import java.util.Map; -import com.google.gson.JsonArray; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; +import static java.util.Collections.unmodifiableMap; public class PropertyMapSerializer implements JsonSerializer>, JsonDeserializer> { @@ -57,4 +50,4 @@ public class PropertyMapSerializer implements JsonSerializer }); return result; } -} \ No newline at end of file +} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/AdaptedDownloadProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/AdaptedDownloadProvider.java index 9dd64cc63..dc729b1e1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/AdaptedDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/AdaptedDownloadProvider.java @@ -17,8 +17,6 @@ */ package org.jackhuang.hmcl.download; -import org.jackhuang.hmcl.util.io.NetworkUtils; - import java.net.URL; import java.util.ArrayList; import java.util.List; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/GameBuilder.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/GameBuilder.java index 753cd226c..4e7a2f705 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/GameBuilder.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/GameBuilder.java @@ -38,7 +38,7 @@ public abstract class GameBuilder { } /** - * The new game version name, for .minecraft/. + * The new game version name, for .minecraft/<version name>. * * @param name the name of new game version. */ diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java index 2f53c5774..5d2bd78ab 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java @@ -130,7 +130,7 @@ public class ForgeNewInstallTask extends Task { @Override public void execute() throws Exception { - Path temp = Files.createTempDirectory("forge_installer"); + Path temp = Files.createTempDirectory("forge_installer"); int finished = 0; try (FileSystem fs = CompressingUtils.createReadOnlyZipFileSystem(installer)) { List processors = profile.getProcessors(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java index 05b6b0402..b7c13a5bc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java @@ -105,7 +105,6 @@ public final class GameAssetIndexDownloadTask extends Task { dependencies.add(task); } - public static class GameAssetIndexMalformedException extends IOException { } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVerificationFixTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVerificationFixTask.java index b76ca25be..e9d765d2f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVerificationFixTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVerificationFixTask.java @@ -19,12 +19,8 @@ package org.jackhuang.hmcl.download.game; import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.LibraryAnalyzer; -import org.jackhuang.hmcl.game.GameVersion; import org.jackhuang.hmcl.game.Version; -import org.jackhuang.hmcl.task.FileDownloadTask; -import org.jackhuang.hmcl.task.FileDownloadTask.IntegrityCheck; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.CacheRepository; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.versioning.VersionNumber; @@ -33,11 +29,9 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystem; import java.nio.file.Files; -import java.nio.file.Path; import java.util.Collection; import java.util.LinkedList; import java.util.List; -import java.util.Optional; /** * Remove class digital verification file in game jar diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java index f363fad63..1d593d86d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java @@ -17,6 +17,8 @@ import java.util.logging.Level; import static org.jackhuang.hmcl.util.Logging.LOG; public final class JavaRepository { + private JavaRepository() { + } public static Task downloadJava(GameJavaVersion javaVersion, DownloadProvider downloadProvider) { return new JavaDownloadTask(javaVersion, getJavaStoragePath(), downloadProvider) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineInstallTask.java index 97ab70ba5..bd9cfd496 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineInstallTask.java @@ -199,10 +199,10 @@ public final class OptiFineInstallTask extends Task { * Install OptiFine library from existing local file. * * @param dependencyManager game repository - * @param version version.json - * @param installer the OptiFine installer + * @param version version.json + * @param installer the OptiFine installer * @return the task to install library - * @throws IOException if unable to read compressed content of installer file, or installer file is corrupted, or the installer is not the one we want. + * @throws IOException if unable to read compressed content of installer file, or installer file is corrupted, or the installer is not the one we want. * @throws VersionMismatchException if required game version of installer does not match the actual one. */ public static Task install(DefaultDependencyManager dependencyManager, Version version, Path installer) throws IOException, VersionMismatchException { @@ -227,7 +227,7 @@ public final class OptiFineInstallTask extends Task { throw new VersionMismatchException(mcVersion, gameVersion.get()); return new OptiFineInstallTask(dependencyManager, version, - new OptiFineRemoteVersion(mcVersion, ofEdition + "_" + ofRelease, Collections.singletonList(""), false), installer); + new OptiFineRemoteVersion(mcVersion, ofEdition + "_" + ofRelease, Collections.singletonList(""), false), installer); } } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessExitedAbnormallyEvent.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessExitedAbnormallyEvent.java index 8b7c9c619..c0931da97 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessExitedAbnormallyEvent.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessExitedAbnormallyEvent.java @@ -22,7 +22,7 @@ import org.jackhuang.hmcl.util.platform.ManagedProcess; /** * This event gets fired when a JavaProcess exited abnormally and the exit code is not zero. - *

+ * * This event is fired on the {@link org.jackhuang.hmcl.event.EventBus#EVENT_BUS} * * @author huangyuhui @@ -34,7 +34,7 @@ public final class ProcessExitedAbnormallyEvent extends Event { /** * Constructor. * - * @param source {@link org.jackhuang.hmcl.launch.ExitWaiter} + * @param source {@link org.jackhuang.hmcl.launch.ExitWaiter} * @param process The process that exited abnormally. */ public ProcessExitedAbnormallyEvent(Object source, ManagedProcess process) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/RefreshedVersionsEvent.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/RefreshedVersionsEvent.java index 8215b96c9..81f48f825 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/RefreshedVersionsEvent.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/RefreshedVersionsEvent.java @@ -29,7 +29,7 @@ public final class RefreshedVersionsEvent extends Event { /** * Constructor. * - * @param source {@link org.jackhuang.hmcl.game.GameRepository] + * @param source {@link org.jackhuang.hmcl.game.GameRepository} */ public RefreshedVersionsEvent(Object source) { super(source); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameDirectoryType.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameDirectoryType.java index a40b16adf..1e2c5fe56 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameDirectoryType.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameDirectoryType.java @@ -35,4 +35,4 @@ public enum GameDirectoryType { * user customized directory. */ CUSTOM -} \ No newline at end of file +} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameRepository.java index cefbde81a..1913414ed 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameRepository.java @@ -88,7 +88,7 @@ public interface GameRepository extends VersionProvider { /** * Gets the root folder of specific version. * The root folders the versions must be unique. - * For example, .minecraft/versions//. + * For example, .minecraft/versions/<version name>/. */ File getVersionRoot(String id); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java index d4ebff777..ab9b5952c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java @@ -45,6 +45,9 @@ import static org.jackhuang.hmcl.util.Logging.LOG; * @author huangyuhui */ public final class GameVersion { + private GameVersion() { + } + private static Optional getVersionFromJson(Path versionJson) { try { Map version = JsonUtils.fromNonNullJson(FileUtils.readText(versionJson), Map.class); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/FabricModMetadata.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/FabricModMetadata.java index ee331bb6c..f71551be4 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/FabricModMetadata.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/FabricModMetadata.java @@ -68,7 +68,7 @@ public final class FabricModMetadata { FabricModMetadata metadata = JsonUtils.fromNonNullJson(FileUtils.readText(mcmod), FabricModMetadata.class); String authors = metadata.authors == null ? "" : metadata.authors.stream().map(author -> author.name).collect(Collectors.joining(", ")); return new ModInfo(modManager, modFile, metadata.name, new ModInfo.Description(metadata.description), - authors, metadata.version, "", metadata.contact != null ? metadata.contact.getOrDefault("homepage", "") : ""); + authors, metadata.version, "", metadata.contact != null ? metadata.contact.getOrDefault("homepage", "") : ""); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java index d93ce5d55..9872ab1aa 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java @@ -67,9 +67,9 @@ public final class ModInfo implements Comparable { try { if (get()) - ModInfo.this.file = modManager.enableMod(path); + ModInfo.this.file = modManager.enableMod(path); else - ModInfo.this.file = modManager.disableMod(path); + ModInfo.this.file = modManager.disableMod(path); } catch (IOException e) { Logging.LOG.log(Level.SEVERE, "Unable to invert state of mod file " + path, e); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackConfiguration.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackConfiguration.java index 611aeba20..e936db80d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackConfiguration.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackConfiguration.java @@ -36,7 +36,7 @@ public final class ModpackConfiguration implements Validation { private final List overrides; public ModpackConfiguration() { - this(null, null, "", null, Collections.emptyList()); + this(null, null, "", null, Collections.emptyList()); } public ModpackConfiguration(T manifest, String type, String name, String version, List overrides) { @@ -110,6 +110,7 @@ public final class ModpackConfiguration implements Validation { /** * The relative path to Minecraft run directory + * * @return the relative path to Minecraft run directory. */ public String getPath() { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java index afe6a5bc7..40a9248df 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java @@ -23,7 +23,7 @@ import org.jackhuang.hmcl.util.Immutable; /** * CurseMetaMod is JSON structure for * https://cursemeta.dries007.net/<projectID>/<fileID>.json - * https://addons-ecs.forgesvc.net/api/v2/addon/<projectID>/file/ { private final DefaultGameRepository repository; private final List> dependencies = new LinkedList<>(); private final List> dependents = new LinkedList<>(); - + public MultiMCModpackInstallTask(DefaultDependencyManager dependencyManager, File zipFile, Modpack modpack, MultiMCInstanceConfiguration manifest, String name) { this.zipFile = zipFile; this.modpack = modpack; @@ -96,7 +96,7 @@ public final class MultiMCModpackInstallTask extends Task { repository.removeVersionFromDisk(name); }); } - + @Override public List> getDependencies() { return dependencies; @@ -138,7 +138,7 @@ public final class MultiMCModpackInstallTask extends Task { public List> getDependents() { return dependents; } - + @Override public void execute() throws Exception { Version version = repository.readVersionJson(name); @@ -169,11 +169,11 @@ public final class MultiMCModpackInstallTask extends Task { Path libraries = root.resolve("libraries"); if (Files.exists(libraries)) - FileUtils.copyDirectory(libraries, repository.getVersionRoot(name).toPath().resolve("libraries")); + FileUtils.copyDirectory(libraries, repository.getVersionRoot(name).toPath().resolve("libraries")); Path jarmods = root.resolve("jarmods"); if (Files.exists(jarmods)) - FileUtils.copyDirectory(jarmods, repository.getVersionRoot(name).toPath().resolve("jarmods")); + FileUtils.copyDirectory(jarmods, repository.getVersionRoot(name).toPath().resolve("jarmods")); } dependencies.add(repository.saveAsync(version)); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java index f2441025a..00b88969c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java @@ -280,7 +280,6 @@ public abstract class Task { */ public void postExecute() throws Exception {} - /** * The collection of sub-tasks that should execute **before** this task running. */ diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Log4jLevel.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Log4jLevel.java index d265b71da..c5022203b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Log4jLevel.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Log4jLevel.java @@ -54,6 +54,7 @@ public enum Log4jLevel { public boolean lessOrEqual(Log4jLevel level) { return this.level <= level.level; } + public static final Pattern MINECRAFT_LOGGER = Pattern.compile("\\[(?[0-9:]+)] \\[[^/]+/(?[^]]+)]"); public static final Pattern MINECRAFT_LOGGER_CATEGORY = Pattern.compile("\\[(?[0-9:]+)] \\[[^/]+/(?[^]]+)] \\[(?[^]]+)]"); public static final String JAVA_SYMBOL = "([a-zA-Z_$][a-zA-Z\\d_$]*\\.)+[a-zA-Z_$][a-zA-Z\\d_$]*"; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java index b84fb7c0b..ee7722c42 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java @@ -31,6 +31,8 @@ import java.util.logging.*; * @author huangyuhui */ public final class Logging { + private Logging() { + } public static final Logger LOG = Logger.getLogger("HMCL"); private static ByteArrayOutputStream storedLogs = new ByteArrayOutputStream(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Pair.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Pair.java index a03e3a7bb..c39aaff10 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Pair.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Pair.java @@ -24,7 +24,7 @@ import java.util.Objects; * * @author huangyuhui */ -public class Pair implements Map.Entry { +public final class Pair implements Map.Entry { public static Pair pair(K key, V value) { return new Pair<>(key, value); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ReflectionHelper.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ReflectionHelper.java index 3fbacd57e..f7df44843 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ReflectionHelper.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ReflectionHelper.java @@ -27,13 +27,16 @@ import java.util.function.Predicate; * @author huangyuhui */ public final class ReflectionHelper { + private ReflectionHelper() { + } + private static Method accessible0; static { try { accessible0 = AccessibleObject.class.getDeclaredMethod("setAccessible0", boolean.class); accessible0.setAccessible(true); - } catch (Throwable ex) { + } catch (Throwable ignored) { } } @@ -43,6 +46,7 @@ public final class ReflectionHelper { /** * Get caller, this method is caller sensitive. + * * @param packageFilter returns false if we consider the given package is internal calls, not the caller * @return the caller, method name, source file, line number */ diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalBiFunction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalBiFunction.java index 5ee70337c..a7c401f73 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalBiFunction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalBiFunction.java @@ -26,4 +26,4 @@ public interface ExceptionalBiFunction { requireNonNull(after); return (t, u) -> after.apply(apply(t, u)); } -} \ No newline at end of file +} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonTypeAdapterFactory.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonTypeAdapterFactory.java index d6de7c6ed..b3d365043 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonTypeAdapterFactory.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonTypeAdapterFactory.java @@ -67,7 +67,6 @@ public class JsonTypeAdapterFactory implements TypeAdapterFactory { }; } - private TypeAdapter createForJsonSubtype(Gson gson, TypeToken type) { Class rawType = type.getRawType(); if (rawType.getSuperclass() == null) return null; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/Validation.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/Validation.java index 06098de6d..726ad8696 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/Validation.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/Validation.java @@ -29,7 +29,7 @@ public interface Validation { /** * 1. Check some non-null fields and; * 2. Check strings and; - * 3. Check generic type of lists and maps are correct. + * 3. Check generic type of lists <T> and maps <K, V> are correct. * * Will be called immediately after initialization. * Throw an exception when values are malformed. diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ChecksumMismatchException.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ChecksumMismatchException.java index 9b82f61d0..ee48263ae 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ChecksumMismatchException.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ChecksumMismatchException.java @@ -21,9 +21,9 @@ import java.io.IOException; public class ChecksumMismatchException extends IOException { - private String algorithm; - private String expectedChecksum; - private String actualChecksum; + private final String algorithm; + private final String expectedChecksum; + private final String actualChecksum; public ChecksumMismatchException(String algorithm, String expectedChecksum, String actualChecksum) { super("Incorrect checksum (" + algorithm + "), expected: " + expectedChecksum + ", actual: " + actualChecksum); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/FileUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/FileUtils.java index a76d3a1c0..2aa038541 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/FileUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/FileUtils.java @@ -124,10 +124,11 @@ public final class FileUtils { /** * Write plain text to file. Characters are encoded into bytes using UTF-8. - * + *

* We don't care about platform difference of line separator. Because readText accept all possibilities of line separator. * It will create the file if it does not exist, or truncate the existing file to empty for rewriting. * All characters in text will be written into the file in binary format. Existing data will be erased. + * * @param file the path to the file * @param text the text being written to file * @throws IOException if an I/O error occurs @@ -138,12 +139,13 @@ public final class FileUtils { /** * Write plain text to file. - * + *

* We don't care about platform difference of line separator. Because readText accept all possibilities of line separator. * It will create the file if it does not exist, or truncate the existing file to empty for rewriting. * All characters in text will be written into the file in binary format. Existing data will be erased. - * @param file the path to the file - * @param text the text being written to file + * + * @param file the path to the file + * @param text the text being written to file * @param charset the charset to use for encoding * @throws IOException if an I/O error occurs */ @@ -155,7 +157,8 @@ public final class FileUtils { * Write byte array to file. * 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 array the data being written to file * @throws IOException if an I/O error occurs */ @@ -192,7 +195,7 @@ public final class FileUtils { * Copy directory. * Paths of all files relative to source directory will be the same as the ones relative to destination directory. * - * @param src the source directory. + * @param src the source directory. * @param dest the destination directory, which will be created if not existing. * @throws IOException if an I/O error occurs. */ @@ -201,7 +204,7 @@ public final class FileUtils { } public static void copyDirectory(Path src, Path dest, Predicate filePredicate) throws IOException { - Files.walkFileTree(src, new SimpleFileVisitor(){ + Files.walkFileTree(src, new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (!filePredicate.test(src.relativize(file).toString())) { @@ -228,7 +231,7 @@ public final class FileUtils { /** * Move file to trash. - * + *

* This method is only implemented in Java 9. Please check we are using Java 9 by invoking isMovingToTrashSupported. * Example: *

{@code
@@ -236,9 +239,10 @@ public final class FileUtils {
      *     FileUtils.moveToTrash(file);
      * }
      * }
+ * * @param file the file being moved to trash. - * @see FileUtils#isMovingToTrashSupported() * @return false if moveToTrash does not exist, or platform does not support Desktop.Action.MOVE_TO_TRASH + * @see FileUtils#isMovingToTrashSupported() */ public static boolean moveToTrash(File file) { try { @@ -253,6 +257,7 @@ public final class FileUtils { /** * Check if {@code java.awt.Desktop.moveToTrash} exists. + * * @return true if the method exists. */ public static boolean isMovingToTrashSupported() { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/JarUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/JarUtils.java index fed526e82..82024397e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/JarUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/JarUtils.java @@ -31,6 +31,8 @@ import java.util.jar.JarFile; import java.util.jar.Manifest; public final class JarUtils { + private JarUtils() { + } public static Optional thisJar() { CodeSource codeSource = JarUtils.class.getProtectionDomain().getCodeSource(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java index ecec920ee..72ae5525a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java @@ -86,6 +86,7 @@ public final class NetworkUtils { break; case '?': left = false; + // fallthrough default: if (ch >= 0x80) sb.append(encodeURL(Character.toString(ch))); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Zipper.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Zipper.java index f055b7c42..3abb0b74e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Zipper.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Zipper.java @@ -17,7 +17,6 @@ */ package org.jackhuang.hmcl.util.io; - import org.jackhuang.hmcl.util.function.ExceptionalPredicate; import java.io.Closeable; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java index 7abc33907..98d7508e6 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java @@ -17,20 +17,19 @@ */ package org.jackhuang.hmcl.util.javafx; -import static java.util.Objects.requireNonNull; -import static org.jackhuang.hmcl.util.Lang.handleUncaughtException; +import javafx.application.Platform; +import javafx.beans.Observable; +import javafx.beans.binding.Bindings; +import javafx.beans.binding.ObjectBinding; +import javafx.beans.value.ObservableValue; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.function.Supplier; - -import javafx.application.Platform; -import javafx.beans.Observable; -import javafx.beans.binding.Bindings; -import javafx.beans.binding.ObjectBinding; -import javafx.beans.value.ObservableValue; +import static java.util.Objects.requireNonNull; +import static org.jackhuang.hmcl.util.Lang.handleUncaughtException; /** * @author yushijinhun diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MappedProperty.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MappedProperty.java index 8565d14de..52ef773f2 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MappedProperty.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MappedProperty.java @@ -17,72 +17,72 @@ */ package org.jackhuang.hmcl.util.javafx; -import java.util.function.Function; - import javafx.beans.binding.Bindings; import javafx.beans.binding.ObjectBinding; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableValue; +import java.util.function.Function; + /** * @author yushijinhun */ public class MappedProperty extends SimpleObjectProperty { - private final Property predecessor; - private final Function reservedMapper; + private final Property predecessor; + private final Function reservedMapper; - private final ObjectBinding binding; + private final ObjectBinding binding; - public MappedProperty(Property predecessor, Function mapper, Function reservedMapper) { - this(null, "", predecessor, mapper, reservedMapper); - } + public MappedProperty(Property predecessor, Function mapper, Function reservedMapper) { + this(null, "", predecessor, mapper, reservedMapper); + } - public MappedProperty(Object bean, String name, Property predecessor, Function mapper, Function reservedMapper) { - super(bean, name); - this.predecessor = predecessor; - this.reservedMapper = reservedMapper; + public MappedProperty(Object bean, String name, Property predecessor, Function mapper, Function reservedMapper) { + super(bean, name); + this.predecessor = predecessor; + this.reservedMapper = reservedMapper; binding = new ObjectBinding() { - { - bind(predecessor); - } + { + bind(predecessor); + } - @Override - protected U computeValue() { - return mapper.apply(predecessor.getValue()); - } + @Override + protected U computeValue() { + return mapper.apply(predecessor.getValue()); + } - @Override - protected void onInvalidating() { - MappedProperty.this.fireValueChangedEvent(); - } - }; - } + @Override + protected void onInvalidating() { + MappedProperty.this.fireValueChangedEvent(); + } + }; + } - @Override - public U get() { - return binding.get(); - } + @Override + public U get() { + return binding.get(); + } - @Override - public void set(U value) { - predecessor.setValue(reservedMapper.apply(value)); - } + @Override + public void set(U value) { + predecessor.setValue(reservedMapper.apply(value)); + } - @Override - public void bind(ObservableValue observable) { - predecessor.bind(Bindings.createObjectBinding(() -> reservedMapper.apply(observable.getValue()), observable)); - } + @Override + public void bind(ObservableValue observable) { + predecessor.bind(Bindings.createObjectBinding(() -> reservedMapper.apply(observable.getValue()), observable)); + } - @Override - public void unbind() { - predecessor.unbind(); - } + @Override + public void unbind() { + predecessor.unbind(); + } - @Override - public boolean isBound() { - return predecessor.isBound(); - } + @Override + public boolean isBound() { + return predecessor.isBound(); + } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java index 867688824..5be68b15e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java @@ -351,5 +351,5 @@ public class VersionNumber implements Comparable { return canonical.hashCode(); } - public static Comparator VERSION_COMPARATOR = Comparator.comparing(VersionNumber::asVersion); + public static final Comparator VERSION_COMPARATOR = Comparator.comparing(VersionNumber::asVersion); } diff --git a/build.gradle b/build.gradle index d4c732eaf..ae43a9793 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,10 @@ buildscript { } } +plugins { + id 'checkstyle' +} + group 'org.jackhuang' version '3.0' @@ -12,6 +16,7 @@ subprojects { apply plugin: 'java' apply plugin: 'idea' apply plugin: 'maven-publish' + apply plugin: 'checkstyle' repositories { mavenCentral() diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml new file mode 100644 index 000000000..daa5be2bf --- /dev/null +++ b/config/checkstyle/checkstyle.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file