Skip to content
This repository was archived by the owner on Dec 14, 2025. It is now read-only.

Commit ac8ddbb

Browse files
committed
Add module-info.java and implement version selection and downloading functionality
version:1.0.1
1 parent aeba455 commit ac8ddbb

File tree

4 files changed

+470
-0
lines changed

4 files changed

+470
-0
lines changed

src/main/java/module-info.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module org.mcdcl {
2+
requires javafx.controls;
3+
requires javafx.fxml;
4+
requires javafx.web;
5+
requires javafx.swing;
6+
requires java.desktop;
7+
requires java.prefs; // 添加 java.prefs 模块依赖
8+
requires jmccc;
9+
requires jmccc.mcdownloader;
10+
requires jmccc.microsoft.authenticator;
11+
requires jmccc.mojang.api;
12+
requires jmccc.cli;
13+
14+
exports org.mcdcl;
15+
exports org.mcdcl.ui;
16+
exports org.mcdcl.config;
17+
exports org.mcdcl.controller;
18+
19+
opens org.mcdcl to javafx.graphics;
20+
opens org.mcdcl.ui to javafx.fxml;
21+
opens org.mcdcl.controller to javafx.fxml;
22+
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package org.mcdcl.ui;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Map;
6+
7+
import org.to2mbn.jmccc.mcdownloader.RemoteVersion;
8+
import org.to2mbn.jmccc.mcdownloader.RemoteVersionList;
9+
10+
import javafx.collections.FXCollections;
11+
import javafx.collections.ObservableList;
12+
import javafx.geometry.Insets;
13+
import javafx.geometry.Pos;
14+
import javafx.scene.control.Button;
15+
import javafx.scene.control.ButtonType;
16+
import javafx.scene.control.Dialog;
17+
import javafx.scene.control.Label;
18+
import javafx.scene.control.ListView;
19+
import javafx.scene.control.RadioButton;
20+
import javafx.scene.control.ToggleGroup;
21+
import javafx.scene.layout.HBox;
22+
import javafx.scene.layout.VBox;
23+
import javafx.stage.Modality;
24+
25+
/**
26+
* Minecraft版本选择对话框
27+
*/
28+
public class VersionSelectDialog extends Dialog<String> {
29+
30+
private ListView<String> versionList;
31+
private ObservableList<String> versionItems;
32+
private RemoteVersionList remoteVersionList;
33+
private ToggleGroup versionTypeGroup;
34+
private RadioButton releaseButton;
35+
private RadioButton snapshotButton;
36+
private RadioButton allButton;
37+
38+
/**
39+
* 创建一个新的版本选择对话框
40+
*
41+
* @param remoteVersionList 远程版本列表
42+
*/
43+
public VersionSelectDialog(RemoteVersionList remoteVersionList) {
44+
this.remoteVersionList = remoteVersionList;
45+
46+
// 设置对话框属性
47+
setTitle("选择要下载的Minecraft版本");
48+
setHeaderText("请选择要下载的Minecraft版本");
49+
initModality(Modality.APPLICATION_MODAL);
50+
51+
// 创建版本列表
52+
versionItems = FXCollections.observableArrayList();
53+
versionList = new ListView<>(versionItems);
54+
versionList.setPrefHeight(300);
55+
versionList.setPrefWidth(400);
56+
57+
// 创建版本类型选择按钮
58+
versionTypeGroup = new ToggleGroup();
59+
60+
releaseButton = new RadioButton("正式版");
61+
releaseButton.setToggleGroup(versionTypeGroup);
62+
releaseButton.setSelected(true);
63+
releaseButton.setOnAction(e -> updateVersionList("release"));
64+
65+
snapshotButton = new RadioButton("快照版");
66+
snapshotButton.setToggleGroup(versionTypeGroup);
67+
snapshotButton.setOnAction(e -> updateVersionList("snapshot"));
68+
69+
allButton = new RadioButton("全部版本");
70+
allButton.setToggleGroup(versionTypeGroup);
71+
allButton.setOnAction(e -> updateVersionList("all"));
72+
73+
// 创建版本类型选择布局
74+
HBox versionTypeBox = new HBox(15);
75+
versionTypeBox.setAlignment(Pos.CENTER);
76+
versionTypeBox.getChildren().addAll(releaseButton, snapshotButton, allButton);
77+
78+
// 创建主布局
79+
VBox content = new VBox(10);
80+
content.setPadding(new Insets(10));
81+
content.getChildren().addAll(
82+
new Label("版本类型:"),
83+
versionTypeBox,
84+
new Label("可用版本:"),
85+
versionList
86+
);
87+
88+
// 设置对话框内容
89+
getDialogPane().setContent(content);
90+
91+
// 添加按钮
92+
getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
93+
94+
// 设置结果转换器
95+
setResultConverter(buttonType -> {
96+
if (buttonType == ButtonType.OK) {
97+
return versionList.getSelectionModel().getSelectedItem();
98+
}
99+
return null;
100+
});
101+
102+
// 禁用确定按钮,直到选择了一个版本
103+
Button okButton = (Button) getDialogPane().lookupButton(ButtonType.OK);
104+
okButton.setDisable(true);
105+
106+
versionList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
107+
okButton.setDisable(newValue == null);
108+
});
109+
110+
// 初始加载版本列表
111+
updateVersionList("release");
112+
}
113+
114+
/**
115+
* 根据类型更新版本列表
116+
*
117+
* @param type 版本类型 (release, snapshot, all)
118+
*/
119+
private void updateVersionList(String type) {
120+
versionItems.clear();
121+
122+
if (remoteVersionList == null) {
123+
return;
124+
}
125+
126+
Map<String, RemoteVersion> versions = remoteVersionList.getVersions();
127+
List<String> filteredVersions = new ArrayList<>();
128+
129+
for (RemoteVersion version : versions.values()) {
130+
if (type.equals("all") ||
131+
(type.equals("release") && "release".equals(version.getType())) ||
132+
(type.equals("snapshot") && "snapshot".equals(version.getType()))) {
133+
filteredVersions.add(version.getVersion());
134+
}
135+
}
136+
137+
versionItems.addAll(filteredVersions);
138+
139+
// 如果有版本,选择第一个
140+
if (!versionItems.isEmpty()) {
141+
versionList.getSelectionModel().select(0);
142+
}
143+
}
144+
}

0 commit comments

Comments
 (0)