From 91c897dab8a5c59ea8808967fc937c772076a52a Mon Sep 17 00:00:00 2001 From: burningtnt Date: Sat, 20 Sep 2025 21:29:02 +0800 Subject: [PATCH] Code cleaup. --- .../hmcl/terracotta/TerracottaManager.java | 49 ++++++------------- .../hmcl/ui/construct/ComponentListCell.java | 5 +- .../hmcl/ui/construct/ComponentSublist.java | 15 ++++++ .../terracotta/TerracottaControllerPage.java | 2 +- 4 files changed, 35 insertions(+), 36 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaManager.java index 8917e0457..27ecb4e1c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaManager.java @@ -68,19 +68,9 @@ public final class TerracottaManager { LOG.warning("Terracotta hasn't support your OS: " + org.jackhuang.hmcl.util.platform.Platform.SYSTEM_PLATFORM); } else { switch (TerracottaMetadata.PROVIDER.status()) { - case NOT_EXIST: { - setState(new TerracottaState.Uninitialized(false)); - break; - } - case LEGACY_VERSION: { - setState(new TerracottaState.Uninitialized(true)); - break; - } - case READY: { - TerracottaState.Launching launching = new TerracottaState.Launching(); - setState(launching); - launch(launching); - } + case NOT_EXIST -> setState(new TerracottaState.Uninitialized(false)); + case LEGACY_VERSION -> setState(new TerracottaState.Uninitialized(true)); + case READY -> launch(setState(new TerracottaState.Launching())); } } }).whenComplete(exception -> { @@ -110,7 +100,7 @@ public final class TerracottaManager { } int port = ((TerracottaState.PortSpecific) state).port; - int index = state instanceof TerracottaState.Ready ? ((TerracottaState.Ready) state).index : Integer.MIN_VALUE; + int index = state instanceof TerracottaState.Ready ready ? ready.index : Integer.MIN_VALUE; TerracottaState next; try { @@ -218,21 +208,14 @@ public final class TerracottaManager { } try { - switch (Objects.requireNonNull(TerracottaMetadata.PROVIDER).status()) { - case NOT_EXIST: - case LEGACY_VERSION: { - return install(file); - } - case READY: { - TerracottaState.Launching launching = new TerracottaState.Launching(); - setState(launching); + return switch (Objects.requireNonNull(TerracottaMetadata.PROVIDER).status()) { + case NOT_EXIST, LEGACY_VERSION -> install(file); + case READY -> { + TerracottaState.Launching launching = setState(new TerracottaState.Launching()); launch(launching); - return launching; + yield launching; } - default: { - throw new AssertionError(); - } - } + }; } catch (NullPointerException | IOException e) { LOG.warning("Cannot determine Terracotta state.", e); return setState(new TerracottaState.Fatal(TerracottaState.Fatal.Type.UNKNOWN)); @@ -274,8 +257,8 @@ public final class TerracottaManager { public static TerracottaState.Waiting setWaiting() { TerracottaState state = STATE_V.get(); - if (state instanceof TerracottaState.PortSpecific) { - new GetTask(URI.create(String.format("http://127.0.0.1:%d/state/ide", ((TerracottaState.PortSpecific) state).port))) + if (state instanceof TerracottaState.PortSpecific portSpecific) { + new GetTask(URI.create(String.format("http://127.0.0.1:%d/state/ide", portSpecific.port))) .setSignificance(Task.TaskSignificance.MINOR) .start(); return new TerracottaState.Waiting(-1, -1, null); @@ -290,9 +273,9 @@ public final class TerracottaManager { public static TerracottaState.HostScanning setScanning() { TerracottaState state = STATE_V.get(); - if (state instanceof TerracottaState.PortSpecific) { + if (state instanceof TerracottaState.PortSpecific portSpecific) { new GetTask(NetworkUtils.toURI(String.format( - "http://127.0.0.1:%d/state/scanning?player=%s", ((TerracottaState.PortSpecific) state).port, getPlayerName())) + "http://127.0.0.1:%d/state/scanning?player=%s", portSpecific.port, getPlayerName())) ).setSignificance(Task.TaskSignificance.MINOR).start(); return new TerracottaState.HostScanning(-1, -1, null); @@ -302,9 +285,9 @@ public final class TerracottaManager { public static Task setGuesting(String room) { TerracottaState state = STATE_V.get(); - if (state instanceof TerracottaState.PortSpecific) { + if (state instanceof TerracottaState.PortSpecific portSpecific) { return new GetTask(NetworkUtils.toURI(String.format( - "http://127.0.0.1:%d/state/guesting?room=%s&player=%s", ((TerracottaState.PortSpecific) state).port, room, getPlayerName() + "http://127.0.0.1:%d/state/guesting?room=%s&player=%s", portSpecific.port, room, getPlayerName() ))) .setSignificance(Task.TaskSignificance.MINOR) .thenSupplyAsync(() -> new TerracottaState.GuestStarting(-1, -1, null)) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java index 70a6c92ff..767b06f59 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java @@ -129,7 +129,7 @@ final class ComponentListCell extends StackPane { groupNode.getChildren().add(headerRippler); VBox container = new VBox(); - boolean hasPadding = !content.getProperties().containsKey("ComponentSubList.noPadding"); + boolean hasPadding = !(list instanceof ComponentSublist subList) || subList.hasMargin(); if (hasPadding) { container.setPadding(new Insets(8, 16, 10, 16)); } @@ -151,7 +151,8 @@ final class ComponentListCell extends StackPane { } Platform.runLater(() -> { - double newAnimatedHeight = (list.prefHeight(list.getWidth()) + (hasPadding ? 8 + 10 : 0)) * (expanded ? 1 : -1); + // FIXME: ComponentSubList without padding must have a 4 pixel padding for displaying a border radius. + double newAnimatedHeight = (list.prefHeight(list.getWidth()) + (hasPadding ? 8 + 10 : 4)) * (expanded ? 1 : -1); double newHeight = expanded ? getHeight() + newAnimatedHeight : prefHeight(list.getWidth()); double contentHeight = expanded ? newAnimatedHeight : 0; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublist.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublist.java index d1bf8f54a..97205e4c9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublist.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublist.java @@ -18,7 +18,9 @@ package org.jackhuang.hmcl.ui.construct; import javafx.beans.DefaultProperty; +import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.Node; @@ -27,6 +29,7 @@ public class ComponentSublist extends ComponentList { private final ObjectProperty headerLeft = new SimpleObjectProperty<>(this, "headerLeft"); private final ObjectProperty headerRight = new SimpleObjectProperty<>(this, "headerRight"); + private final BooleanProperty margin = new SimpleBooleanProperty(this, "padding", true); public ComponentSublist() { super(); @@ -55,4 +58,16 @@ public class ComponentSublist extends ComponentList { public void setHeaderRight(Node headerRight) { this.headerRight.set(headerRight); } + + public boolean hasMargin() { + return margin.get(); + } + + public BooleanProperty marginProperty() { + return margin; + } + + public void setMargin(boolean margin) { + this.margin.set(margin); + } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/terracotta/TerracottaControllerPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/terracotta/TerracottaControllerPage.java index f81eb8510..a206e87ee 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/terracotta/TerracottaControllerPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/terracotta/TerracottaControllerPage.java @@ -477,7 +477,7 @@ public class TerracottaControllerPage extends StackPane { private ComponentList getThirdPartyDownloadNodes() { ComponentSublist locals = new ComponentSublist(); - locals.getProperties().put("ComponentSubList.noPadding", true); + locals.setMargin(false); LineButton header = LineButton.of(false); header.setLeftImage(FXUtils.newBuiltinImage("/assets/img/terracotta.png"));